在linux下永久添加靜態路由有兩種方法:
一、使用route命令添加
使用route 命令添加的路由,機器重啟或者網卡重啟后路由就失效了,方法:
A、添加到主機的路由
# route add –host 192.168.1.10 dev eth0
# route add –host 192.168.1.10 gw 192.168.1.1
B、添加到網絡的路由
# route add –net 192.168.1.0 netmask 255.255.255.0 eth0
# route add –net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1
# route add –net 192.168.1.0/24 eth1
C、添加默認網關
# route add default gw 192.168.1.1
D、刪除路由
# route del –host 192.168.1.10 dev eth0
二、添加永久路由
A、# vi /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
B、# vi /etc/sysconfig/network (添加到末尾)
語句:GATEWAY=gw-ip 或者 GATEWAY=gw-dev
C、# vi /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
D、開啟 IP 轉發:
# echo “1” >/proc/sys/net/ipv4/ip_forward (臨時)
# vi /etc/sysctl.conf –> net.ipv4.ip_forward=1 (永久開啟)
如果在rc.local中添加路由會造成NFS無法自動掛載問題,所以使用static-routes的方法是最好的。無論重啟系統和service network restart 都會生效。
按照linux啟動的順序,rc.local里面的內容是在linux所有服務都啟動完畢,最后才被執行的,也就是說,這里面的內容是在netfs之后才被執行的,那也就是說在netfs啟動的時候,服務器上的靜態路由是沒有被添加的,所以netfs掛載不能成功。static-routes文件又是什么呢,這個是network腳本執行時調用的一個文件,這個文件的放在/etc/sysconfig目錄下,在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
從這段腳本可以看到,這個就是添加靜態路由的方法,static-routes的寫法是:
any net 192.168.1.0/16 gw 網關ip
這樣的話,在啟動network腳本的時候路由就自動添加上了,又因為network是在netfs前面啟動的,自然在掛載nfs的時候就正常了。這樣看來,如果需要添加靜態路由,使用static-routes文件要比使用rc.local好,而且當改變了網絡配置,需要重啟network腳本的時候,相應的靜態路由是可以自動添加上的,但這時如果使用rc.local的話,在重啟network服務的時候,原本添加好的靜態路由就消失了。
route 命令的輸出項說明
輸出項 說明
Destination | 目標網段或者主機 |
Gateway | 網關地址,”*” 表示目標是本主機所屬的網絡,不需要路由 |
Genmask | 網絡掩碼 |
Flags | 標記。一些可能的標記如下: |
U — 路由是活動的 | |
H — 目標是一個主機 | |
G — 路由指向網關 | |
R — 恢復動態路由產生的表項 | |
D — 由路由的后台程序動態地安裝 | |
M — 由路由的后台程序修改 | |
! — 拒絕路由 | |
Metric | 路由距離,到達指定網絡所需的中轉數(linux 內核中沒有使用) |
Ref | 路由項引用次數(linux 內核中沒有使用) |
Use | 此路由項被路由軟件查找的次數 |
Iface | 該路由表項對應的輸出接口 |
3 種路由類型
主機路由
主機路由是路由選擇表中指向單個IP地址或主機名的路由記錄。主機路由的Flags字段為H。例如,在下面的示例中,本地主機通過IP地址192.168.1.1的路由器到達IP地址為10.0.0.10的主機。
Destination Gateway Genmask Flags Metric Ref Use Iface ----------- ------- ------- ----- ------ --- --- ----- 10.0.0.10 192.168.1.1 255.255.255.255 UH 0 0 0 eth0
網絡路由
網絡路由是代表主機可以到達的網絡。網絡路由的Flags字段為N。例如,在下面的示例中,本地主機將發送到網絡192.19.12的數據包轉發到IP地址為192.168.1.1的路由器。
Destination Gateway Genmask Flags Metric Ref Use Iface ----------- ------- ------- ----- ----- --- --- ----- 192.19.12 192.168.1.1 255.255.255.0 UN 0 0 0 eth0
默認路由
當主機不能在路由表中查找到目標主機的IP地址或網絡路由時,數據包就被發送到默認路由(默認網關)上。默認路由的Flags字段為G。例如,在下面的示例中,默認路由是IP地址為192.168.1.1的路由器。
Destination Gateway Genmask Flags Metric Ref Use Iface ----------- ------- ------- ----- ------ --- --- ----- default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
配置靜態路由
route 命令
設置和查看路由表都可以用 route 命令,設置內核路由表的命令格式是:
# route [add|del] [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
其中:
- add : 添加一條路由規則
- del : 刪除一條路由規則
- -net : 目的地址是一個網絡
- -host : 目的地址是一個主機
- target : 目的網絡或主機
- netmask : 目的地址的網絡掩碼
- gw : 路由數據包通過的網關
- dev : 為路由指定的網絡接口