Linux route新增靜態路由

NO IMAGE

一:使用 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 --> 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 -argsdonefinetwork在執行的時候到static−routes裡面尋找any開頭的行,然後執行/sbin/routeadd−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檔案中。