關於linux的新增永久靜態路由的static-routes方法

quanshengaa發表於2014-08-21
在linux下新增永久靜態路由方法大家網上隨便搜都能搜到一堆,不知道各位有沒有看過static-routes方法是怎麼新增路由呢?
最近有同事反饋用static-routes方法新增永久靜態路由失敗,但是用手動用route add方法可以成功。網上搜了一堆資料都是類似下面的(隨便搜的啊,應該步侵權吧):

一:使用 route 命令新增
使用route 命令新增的路由,機器重啟或者網路卡重啟後路由就失效了,方法:
//新增到主機的路由
# route add –host 192.168.1.11 dev eth0
# route add –host 192.168.1.12 gw 192.168.1.1
//新增到網路的路由
# route add –net 192.168.1.11  netmask 255.255.255.0 eth0
# route add –net 192.168.1.11  netmask 255.255.255.0 gw 192.168.1.1
# route add –net 192.168.1.0/24 eth1
//新增預設閘道器
# route add default gw 192.168.2.1
//刪除路由
# route del –host 192.168.1.11 dev eth0


二:在linux下設定永久路由的方法:
1.在/etc/rc.local裡新增
方法: 
route add -net 192.168.3.0/24 dev eth0
route add -net 192.168.2.0/24 gw 192.168.2.254

2.在/etc/sysconfig/network裡新增到末尾
方法:GATEWAY=gw-ip 或者 GATEWAY=gw-dev

3./etc/sysconfig/static-routes : (沒有static-routes的話就手動建立一個這樣的檔案)
any net 192.168.3.0/24 gw 192.168.3.254
any net 10.250.228.128 netmask 255.255.255.192 gw 10.250.228.129

 

4.開啟 IP 轉發:
# echo "1" >/proc/sys/net/ipv4/ip_forward (臨時)
# vi /etc/sysctl.conf --&gt net.ipv4.ip_forward=1 (永久開啟)


這裡並沒有錯誤的地方,只不過之前沒有接觸對這些引數沒什麼想法,這次正好研究了下,大概瞭解了下沒個引數的意思。

首先從最簡單的是route add方法:

route add這個是新增路由的命令,這個沒什麼好說的,然後是後面的-host和net引數,根據緊跟引數後面的資訊可以發現host指的是新增一個主機到路由中,net是新增一個網段到路由中。在後面的引數是dev和gw,字面理解加上後面緊跟的值判斷,dev表示這個host或者這段net走的是那個網口,gw是gateway,自然是透過哪個閘道器了。對這裡為何指定網口或者指定閘道器都行呢,我的認識是這樣的,網口上配置有閘道器的資訊,指定的網口其實最終還是去讀取這個網口對應的閘道器資訊,等效於指定gw引數。不過指定網口一般是由於有多個網路環境的情況,如果網口沒有指定閘道器,會去讀取預設的閘道器,所以這裡一般要求把網口的閘道器資訊配置上去,在linux下很多時候閘道器資訊並不是配置在網口的配置檔案,比如:/etc/sysconfig/network-scripts/ifcfg-eth0 檔案裡面,而是在/etc/sysconfig/network這裡面,所以在用dev引數的時候需要小心這點,儘可能透過指定gw的方式。

為什麼會介紹到route add方法,因為後面會有用到。現在回到主題,關於static-routes的設定。網上一般的都是寫著:

any net 192.168.3.0/24 gw 192.168.3.254

設定的都是整個網段的,但如果是單個主機怎麼設定呢?同時從廠家那邊給了一個指令碼是:

eth0 x.x.x.x netmask 255.255.255.192 gw x.x.x.x

看上去也很對的樣子,但是執行發現netstat -an裡面看不到新增的資訊,完全不行。

然後我們在看下static-routes這個檔案的作用,根據網上的說法,static-routes其實在被network這個指令碼呼叫的,開啟這個指令碼:

/etc/rc.d/init.d/network 

裡面有寫到:

# Add non interface-specific static-routes.
  if [ -f /etc/sysconfig/static-routes ]; then
     grep "^any" /etc/sysconfig/static-routes | while read ignore args ; do
         /sbin/route add -$args
      done
   fi

network在執行的時候到static-routes裡面尋找any開頭的行,然後執行

/sbin/route add -$args 相當於手動執行了route add指令碼,那後面事情就簡單了,回到了手動執行的方式,根據前面的說明,正確的指令碼就是:

any host 10.0.0.10 gw 192.168.1.1

network執行的時候把any去掉,獲取後面的引數:host 10.0.0.10 gw 192.168.1.1

然後執行route add -host 10.0.0.10 gw 192.168.1.1

注意這裡host前面的-是network自帶的,不需要配置到static-routes檔案中。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15797451/viewspace-1255352/,如需轉載,請註明出處,否則將追究法律責任。

相關文章