一:使用 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
刪除默認路由
#route del default gw 192.168.2.1
二:在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 -$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文件中。
###############################
echo "route add -net 172.16.100.0/24 gw 192.168.6.249" >>/etc/rc.local 使得在系統重啟之后,加入這條命令。
################################################################
Debian/Ubuntu RedHat/CentOS/Fedora如何永久添加靜態路由
目前Linux系統網絡配置基本都差不多,但是不同的發行版又有些不同,常見主要區分兩大類型:
(1)RedHat(RHEL)/CentOS/Fedora Linux是放在/etc/sysconfig/network-scripts目錄下面的一大堆文件里面。
(2)Debian/Ubuntu Linux網絡配置則是存在/etc/network/目錄下面的幾個文件里面。
比如我們要給linux系統添加靜態路由,就要區分不同的平台,RedHat(RHEL)/CentOS/Fedora Linux環境永久添加靜態路由通常是寫在諸如/etc/sysconfig/network-scripts/route-eth0這些文件里。而Debian/Ununtu下有所不同,添加路由的腳本放到/etc/network/interfaces里執行。
一、Debian平台實例:
Debian/Ununtu添加路由的腳本放到/etc/network/interfaces里執行:
auto eth0
iface eth0 inet static
address 192.168.1.88
netmask 255.255.255.0
gateway 192.168.1.1
up route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.2.1
down route del -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.2.1
二、RedHat、CentOS、Fedora平台實例:
使用配置文件/etc/sysconfig/network-scripts/route-interface,interface可以根據實際的網卡換成網卡名,比如我要在eth0上加靜態路由,那就寫route-eth0
配置文件的格式如下:
ADDRESS0=X.X.X.X
NETMASK0=x.x.x.x
GATEWAY0=X.X.X.x
如果有多條靜態路由要建立,那么繼續在文件里追加,ADDRESS、NETMASK、GATEWAY后面的數字遞增即可。如有2條記錄:
ADDRESS0=X.X.X.X
NETMASK0=x.x.x.x
GATEWAY0=X.X.X.x
ADDRESS1=X.X.X.X
NETMASK1=x.x.x.x
GATEWAY1=X.X.X.x
采用規范的方法的好處如下:
1.系統啟動的時候自動加上這些靜態路由,無需寫rc.local
2.如果修改了靜態路由,只需要service network restart即可,無需手動使用route命令增刪靜態路由
