1. 程式人生 > >Linux 更改靜態路由

Linux 更改靜態路由

路由

一:使用 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命令增刪靜態路由

本文出自 “堅持就是勝利” 博客,轉載請與作者聯系!

Linux 更改靜態路由