IP-route管理路由


 摘自:https://blog.csdn.net/chengxuyuanyonghu/article/details/39558643

一、高級路由的基礎IP ROUTE2
基本命令:
ip link list 顯示ip鏈路狀態信息
ip address show 除顯示所有網絡地址
ip route show 顯示主路由表信息
ip neigh show 顯示鄰居表


linux系統路由表
linux可以自定義從1-252個路由表,
linux系統維護了4個路由表:
0#表 系統保留表
253#表 defulte table 沒特別指定的默認路由都放在改表
254#表 main table 沒指明路由表的所有路由放在該表
255#表 locale table 保存本地接口地址,廣播地址、NAT地址 由系統維護,用戶不得更改

 


路由表的查看可有以下二種方法:
      ip route list table table_number


      ip route list table table_name


路由表序號和表名的對應關系在/etc/iproute2/rt_tables中,可手動編輯


路由表添加完畢即時生效,下面為實例
ip route add default via 192.168.1.1 table 1 在一號表中添加默認路由為192.168.1.1
ip route add 192.168.0.0/24 via 192.168.1.2 table 1 在一號表中添加一條到192.168.0.0網段的路由為192.168.1.2


注:各路由表中應當指明默認路由,盡量不回查路由表.路由添加完畢,即可在路由規則中應用..


二、高級路由重點之一路由規則 ip rule
進行路由時,根據路由規則來進行匹配,按優先級(pref)從低到高匹配,直到找到合適的規則.所以在應用中配置默認路由是必要的.. 

    
ip rule show 顯示路由規則


路由規則的添加
ip rule add from 192.168.1.10/32 table 1 pref 100


如果pref值不指定,則將在已有規則最小序號前插入


注:創建完路由規則若需立即生效須執行#ip route flush cache;刷新路由緩沖
    可參數解析如下:   &n
        From -- 源地址
        To -- 目的地址(這里是選擇規則時使用,查找路由表時也使用)
      Tos -- IP包頭的TOS(type of sevice)域Linux高級路由-
      Dev -- 物理接口
      Fwmark -- iptables標簽


    采取的動作除了指定路由表外,還可以指定下面的動作:


        Table 指明所使用的表


       Nat 透明網關

      Prohibit 丟棄該包,並發送 COMM.ADM.PROHIITED的ICMP信息 
      Reject 單純丟棄該包
      Unreachable丟棄該包, 並發送 NET UNREACHABLE的ICMP信息


    具體格式如下:更強大,使用更靈活,它使網絡管理員不僅能
        Usage: ip rule [ list | add | del ] SELECTOR ACTION


        SELECTOR := [ from PREFIX ] [ to PREFIX ] [ tos TOS ][ dev STRING ] [ pref NUMBER ]


        ACTION := [ table TABLE_ID ] [ nat ADDRESS ][ prohibit | reject | unreachable ]
                  [ flowid CLASSID ]


        TABLE_ID := [ local | main | default | new | NUMBER ]

  1. 策略路由 
        基於策略的路由比傳統路由在功能上更強大,使用更靈活,它使網絡管理員不僅能夠根據目的地址而且能夠根據報文大小、應用或IP源地址來選擇轉發路徑...         
        #/etc/iproute2/rt_tables 此文件存有linux 系統路由表默認表有255 254 253三張表 
          255  local 本地路由表存有本地接口地址,廣播地址,已及NAT地址. 
               local表由系統自動維護..管理員不能操作此表... 
          254  main 主路由表 傳統路由表,ip route若沒指定表亦操作表254.一般存所有的路由.. 
               注:平時用ip ro sh查看的亦是此表設置的路由. 


  2.       253  default  默認路由表一般存放默認路由... 


  3.            注:rt_tables文件中表以數字來區分表0保留最多支持255張表 


  4.     路由表的查看可有以下二種方法: 
          #ip route list table table_number

  5.  

      #ip route list table table_name

    路由表添加完畢,即可在策略路由表內添加路由例:

      #ip route add 192.168.1.0/24 dev eth0 via 192.168.1.66 realm 4

 

        注:發往子網192.168.1.0/24的數據包通過分類4轉發配合tc使用,后文有介紹講解...

 

      #ip route add default via 192.168.1.1 table int1

      #ip route add 192.168.1.0/24 via 192.168.1.1 table int2

      #ip route add 172.16.0.2/16 via 172.16.0.1 table int3

        注:各路由表中應當指明默認路由,盡量不回查路由表.路由添加完畢,即可在路由規則中應用.. 
    #ip rule show 顯示路由規則 
      0:      from all lookup local 
      32766:  from all lookup main 
      32767:  from all lookup default 
    進行路由時,正是根據路由規則來進行匹配,按優先級(pref后數值)從高到低匹配,直到找到合適的規則.所以在應用中配置默認路由是必要的..     
    策略路由一般手工添加路由表,路由表的添加只需編輯rt_tables文件,規定表序號,表名即可.. 
    ip rule規則添加示例: 
      #ip rule add from 192.168.1.112/32 [tos 0x10] table test2 pref 999 prohibit 
      #ip rule add to 192.168.1.2 pref 1000 table test1 
      #ip rule add from 192.168.1.0/24 pref 1001 table test1 
      #ip rule add [from 0/0] table test1 pref 1003 
      #ip rule add fwmark 1 pref 1002 table test2  此句型配合iptables -t mangle應用.如先對數據

  包作標記:

      #iptables -t mangle -A PREROUTING -p tcp -m multiport

                             --dports 80,8080,20,21 -s 192.168.1.0/24 -j MARK --set-mark 

 

  2.網卡捆綁(網關linux+多網卡)

    #modprobe bonding mod=1 miimon=200 primary=eth1 創建bond0,模式為1,主網卡eth1..

    #ip addr add dev bond$ 10.0.0.1/24 設置bond0的IP

    #ifenslave bond0 eth1 eth2 添加綁定的dev

      注:mode=0 輪轉均衡(默認模式),此模式MAC頻繁切換導致交換機負載大..

         mode=1 主備模式 用primary指定網卡

         mode=4 常用 802.3ad模式,動態鏈路采集模式.此模式要求SWITCH捆綁..

         miimon=ms 每隔多少毫秒查詢鏈路是否有效.

      其它參數如:

         arp_interval=ms

         arp_ip_target=*.*.*.*

 

    另一種網卡捆綁固化方式:

      #vi /etc/modules.conf 加入以下行

      alias bond0 bonding

        系統在啟動時加載bonding模塊,對外虛擬網絡接口設備為 bond0..

      #cd /etc/sysconfig/network-scripts

      #vi ifcfg-bond0

        DEVICE=bond0 
        IPADDR=11.0.0.1 
        NETMASK=255.0.0.0 
        NETWORK=192.168.1.0 
        BROADCAST=192.168.1.255 
        ONBOOT=yes 
        BOOTPROTO=none 
        USERCTL=no

      #vi ifcfg-eth0  
        DEVICE=eth0 
        USERCTL=no 
        ONBOOT=yes 
        MASTER=bond0 
        SLAVE=yes 
        BOOTPROTO=none

      #vi ifcfg-eth1 
        DEVICE=eth0 
        USERCTL=no 
        ONBOOT=yes 
        MASTER=bond0 
        SLAVE=yes 
        BOOTPROTO=none

     #/etc/init.d/network restart 重啟網絡服務驗證網卡的配置信息備份網卡被加上了NOARP標記

 

     #cat /proc/net/bond0/info 查看bond信息

 

  3.網橋(Linux+多網卡)

    配置工具 brctl http://bridge.sourceforge.net/  源碼包名:bridge-utils-*形式

    安裝第一步:autoconf 后類同於源碼包安裝..

    例.linu+二網卡eth0 eth1 配置成網橋

      配置前去除加入網橋的eth0 eth1的IP

      #ifconfig eth0/eth1 down

      #ifconfig eth0/eth1 0.0.0.0 up

      #brctl addbr br0

      #brctl addif br0 eth0 eth1

      #ip li set dev br0 up

      #brctl showmacs br0 顯示網橋MAC 
    撤網橋:

      #ip li set dev br0 down

      #brctl delif br0 eth0 eth1

      #brctl delbr br0

    網橋接口處亦可進行流量控制,無Ip的linux網橋可有效防御外界的功擊,對linux網橋機的總控安全性高...

 

    貼上一篇網橋應用實例,此實例是網橋的一種擴張應用...

      腳本名:start_bridge.sh

      #!/bin/sh

      brctl addbr net1 
      brctl addif net1 eth0 
      ifconfig eth0 down 
      ifconfig eth0 0.0.0.0 up 
      ifconfig net1 192.168.5.1 up 
      #ip ro del 192.168.1.0/24 dev eth1  proto kernel  scope link  src 192.168.1.28

      ip ro del 192.168.1.0/24 
      #route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.5.2

      ip route add default via 192.168.5.2 
      echo "1" > /proc/sys/net/ipv4/ip_forward

 

  Linux高級路由需結合iptables才能充分體現其功能

 

查看路由表內容在查看路由表之前,首先使用ip rule show命令來查看目前使用了哪些路由表,接着,再使用ip route show [table id | name]命令來查看路由表的內容。例如,可以使用ip route show table main來查看路由表main的內容,如果省略路由表名稱(如ip route show),會默認地查看路由表main的內容。

  1.  

1. [root@localhost /]# ip rule show 
2. 0: from all lookup local 
3. 32766: from all lookup main 
4. 32767: from all lookup default 
5. [root@localhost /]# 
6. [root@localhost /]# ip route show table main 
7. 10.10.15.0/25 dev eth0 proto kernel scope link src 10.10.15.46 
8. 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.10 
9. default via 10.10.15.1 dev eth0 
10. [root@localhost /]#

在默認情況下,系統有三個路由表,這三個路由表的功能如下:

local:路由表local包含本機路由及廣播信息。例如,在本機上執行ssh 127.0.0.1時,就會參考這份路由表的內容,在正常情況下,只要配置好網卡的網絡設置,就會自動生成local路由表的內容,我們應該也不必修改其內容。

main:使用傳統命令route -n所看到的路由表就是main的內容。Linux系統在默認情況下使用這份路由表的內容來傳輸數據包,因此,其內容極為重要,在正常情況下,只要配置好網卡的網絡設置,就會自動生成main路由表的內容。

default:最后是default路由表,這個路由表在默認情況下內容為空;除非有特別的要求,否則保持其內容為空即可。

 

在此使用路由表main的內容進行解釋,以下是圖10-10路由表main的內容,因為在主機上有eth0及eth1兩塊網卡,且為其設置的IP分別是10.10.15.46/25及192.168.1.10/24,因此,路由表內的第.行即是告訴系統,如果有數據包要送到10.10.15.0/25這個網段,就直接將數據包由eth0接口送出即可,而本機臨近這個網段的IP是10.10.15.46,第.行則是設置到192.168.1.0/24的路由,其含義與第.行完全相同;以上這兩行是只要將計算機網卡上的IP設置好,並在網絡服務重啟之后,默認就會生成的路由,無需特別的設置。最后一行.則指:如果數據包不是送往10.10.15.0/25及192.168.1.0/24網段,那么數據包將統一轉發給10.10.15.1主機去處理,而10.10.15.1就是我們在網絡配置中所設置的“默認網關”。
1. [root@localhost /]# ip route show table main 
2. 10.10.15.0/25 dev eth0 proto kernel scope link src 10.10.15.46
3. 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.10  
4. default via 10.10.15.1 dev eth0 
5. [root@localhost /]#

2. 添加路由

添加路由在此還是一樣采用ip命令而不是route命令,下例首先使用ip route show.命令顯示路由表main的內容,接着再使用ip route add命令將所需的路由添加到路由表main中.,最后再次使用ip route show命令將路由表main的內容打印出來,此時就可以在路由表main之中看到剛才添加的路由了。

1. [root@localhost /]# ip route show table main 
2. 10.10.15.0/25 dev eth0 proto kernel scope link src 10.10.15.46 
3. 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.10 
4. default via 10.10.15.1 dev eth0 
5. [root@localhost /]# 
6. [root@localhost /]# ip route add 192.168.2.0/24 via 10.10.15.50 table main 
7. [root@localhost /]# 
8. [root@localhost /]# ip route show table main  
9. 10.10.15.0/25 dev eth0 proto kernel scope link src 10.10.15.46 
10. 192.168.2.0/24 via 10.10.15.50 dev eth0 
11. 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.10 
12. default via 10.10.15.1 dev eth0 
13. [root@localhost /]#

如果要添加的路由並未出現在現有的路由表中,又該如何處理呢?在此請先有一個概念,單純添加路由表並無意義,因為新增出來的路由表,系統默認是不會去使用的,如果要將路由添加到main以外的路由表,只有先添加“規則”才能確定新的路由表名稱(Table ID),有了新的路由表之后,才會把路由添加到新的路由表中。

我們使用下列示例來說明這個過程。首先使用ip rule show.來查詢RPDB的當前狀態,可以看到目前只有三條默認規則,接着,再使用ip rule add命令來添加一條規則.,此時系統內就多了一個有用的路由表,其路由表ID為10,我們可以立即使用ip route show命令來查看這個新的路由表.,其內容默認為空,接着可以在這個新路由表中添加路由,在此使用iproute add命令來添加路由,我們決定凡是來自於192.168.2.0/24網段的數據包,都從eth1接口將數據包送離本機,因此,必須完整編寫eth1接口的路由。首先將臨近eth1接口的路由填入.,告訴系統本機與192.168.1.0/24網段的通信都通過eth1接口來處理,接着填入這個路由表的默認路由.,最后使用ip route show命令顯示路由表10的內容。

1. [root@localhost ~]# ip rule show  
2. 0: from all lookup local 
3. 32766: from all lookup main 
4. 32767: from all lookup default 
5. [root@localhost ~]# 
6. [root@localhost ~]# ip rule add from 192.168.2.0/24 table 10  
7. [root@localhost ~]# 
8. [root@localhost ~]# ip route show table 10  
9. [root@localhost ~]# 
10. [root@localhost ~]# ip route add 192.168.1.0/24 dev eth1 table 10  


11. [root@localhost ~]# ip route add default via 192.168.1.254 table 10  
12. [root@localhost ~]# 
13. [root@localhost ~]# ip route show table 10  
14. 192.168.1.0/24 dev eth1 scope link 
15. default via 192.168.1.254 dev eth1 
16. [root@localhost ~]#

3. 刪除路由

可以使用ip命令來方便地刪除路由,我們使用以下示例來說明如何刪除路由。首先將路由表10的內容顯示出來.,可以看到路由表10中當前有兩條路由,接着使用ip route del命令刪除默認路由.,在此別忘了指定我們所要刪除的是路由表10,否則默認會刪除路由表main的默認路由,接着再使用ip route show 命令查看路由表10.,此時路由表10的默認路由已經不存在了,再次使用ip route del命令刪除192.168.122.0/24的路由.,最后可以看到路由表10中已經沒有任何路由了。

1. [root@localhost ~]# ip route show table 10  
2. 192.168.1.0/24 dev virbr0 scope link 
3. default via 192.168.1.254 dev eth1 
4. [root@localhost ~]# 
5. [root@localhost ~]# ip route del default table 10  
6. [root@localhost ~]# 
7. [root@localhost ~]# ip route show table 10  
8. 192.168.1.0/24 dev virbr0 scope link 
9. [root@localhost ~]# 
10. [root@localhost ~]# ip route del 192.168.1.0/24 table 10  
11. [root@localhost ~]# 
12. [root@localhost ~]# ip route show table 10  
13. [root@localhost ~]#

 

 

 

 

1. 查看策略數據庫
要查看策略數據庫的內容,可以使用ip rule show命令,或者可以使用ip rule ls。如下是命令執行后所得到的輸出結果,在這些數據中,可以看到系統的三條默認規則,而這三條規則默認分別對應於local、mail及default三個路由表。

1. [root@localhost /]# ip rule show 
2. 0: from all lookup local 
3. 32766: from all lookup main 
4. 32767: from all lookup default
2. 添加規則
在添加規則時,必須先確定好“條件”、“優先級別”及“路由表ID”,此后才可以執行添加規則的操作。關於這三個參數的含義,我們根據圖10-5再說明一次:
條件
條件是用來決定哪類數據包可以符合這項規則,而可用來匹配的字段為Source IP、Destination IP、Type of Service、fwmark及dev等,這些字段的使用方式如下:
Source IP:
根據來源端IP來決定數據包參考哪個路由表發送出去。以下兩個示例分別指出,如果數據包的來源端IP是192.168.1.10,就參考路由表10;如果來源端IP為192.168.2.0/24網段的IP,就參考路由表20。
1. ip rule add from 192.168.1.10 table 10 
2. ip rule add from 192.168.2.0/24 table 20
Destination IP:
根據目的端IP來決定數據包參考哪個路由表發送出去。以下兩個示例分別指出,如果數據包的目的端IP是168.95.1.1,就參考路由表10;如果目的端IP是168.95.0.0/24網段的IP,就參考路由表20。

1. ip rule add to 168.95.1.1 table 10 
2. ip rule add to 168.96.0.0/24 table 20
fwmark:
fwmark指第3章所提到過的nfmark,如果你已忘了nfmark的含義,不妨參考第2.2.6節。將fwmark作為匹配條件時,必須搭配Netfilter一起使用, 這看起來很麻煩, 卻是最靈活的匹配條件。如圖10-8所示,某公司對外有三條ADSL,我們希望所有HT T P 協議經由第一條ADS L ,SMTP及POP3經由第二條ADSL,其余流量則經由第三條ADSL。可以使用如下的命令組合來達到這樣的目的:
 20120902032029655.jpg
 

圖10-8 fwmark示例
1. iptables -t mangle -A FORWARD -i eth3 -p tcp --dport 80 -j MARK --set-mark 1 
2. iptables -t mangle -A FORWARD -i eth3 -p tcp --dport 25 -j MARK --set-mark 2 
3. iptables -t mangle -A FORWARD -i eth3 -p tcp --dport 110 -j MARK --set-mark 2 
4. iptables -t mangle -A FORWARD -i eth3 -j MARK --set-mark 3 
5. ip rule add fwmark 1 table 1 
6. ip rule add fwmark 2 table 2 
7. ip rule add fwmark 3 table 3
 

首先使用Netfilter的managle機制針對特定的數據包設置MARK值,在此將HTTP數據包的MARK值設置為1,SMTP及POP3數據包的MARK值設置為2,其余數據包則設置MARK值為3。接着,再根據fwmark條件來判斷數據包的MARK值,如果MARK值為1,則參考路由表1將數據包送出;MAKR值為2時,則參考路由表2將數據包送出;最后,MARK值為3的數據包則參考路由表3送出。

以上示例只是一個概念而已,如果真要完整體現出這個示例的所有功能,還需要注意許多細節,稍后將使用詳細的示例講解這部分內容,在此只要首先了解fwmark與Netfilter結合使用的概念即可。
dev:

最后,還可以使用數據包輸入的接口來作為判斷依據,如圖10-9所示,我們希望凡是由eth2接口送入的數據包都由eth0接口轉發出去,由eth3接口送入的數據包都由eth1接口轉發出去。以下命令組合將能滿足我們的要求:
1. ip rule add dev eth2 table 1 
2. ip rule add dev eth3 table 3
 20120902032155785.jpg
 

圖10-9 接口示例
3. 優先級別
前面介紹了規則中“條件”的使用方式,接下來要討論的是優先級別。優先級別用數字來表示,其范圍可由0~4億多,堪稱天文數字,我們實際上不可能在一台PC上設置如此龐大的路由機制。

1. [root@localhost ~]# ip rule show 
2. 0: from all lookup local 
3. 32766: from all lookup main 
4. 32767: from all lookup default 
5. [root@localhost ~]# 
6. [root@localhost ~]# ip rule add from 192.168.1.0/24 table 1 
7. [root@localhost ~]# ip rule add from 192.168.2.0/24 table 2 
8. [root@localhost ~]# 
9. [root@localhost ~]# ip rule show 
10. 0: from all lookup local 
11. 32764: from 192.168.2.0/24 lookup 2 
12. 32765: from 192.168.1.0/24 lookup 1 
13. 32766: from all lookup main 
14. 32767: from all lookup default
如以上示例,我們執行ip rule show命令所顯示內容的第一個字段就是優先級別,數字越小,代表優先級別越高,也代表這條規則可以排得越靠前,如此數據包在進行條件匹配時,就會越早匹配到這條規則,從輸出的數據中,默認優先級別0、32766及32767已被占用,因此,在添加規則時,如果沒有特別設置優先級別,那么,優先級別默認會從32766開始遞減,如32765、32764……,如果我們需要特別設置優先級別,可以在ip rule add命令的最后加上prio XXX參數。如下例所示:
1. [root@localhost ~]# ip rule show 
2. 0: from all lookup local 
3. 32766: from all lookup main 
4. 32767: from all lookup default 
5. [root@localhost ~]# 
6. [root@localhost ~]# ip rule add from 192.168.1.0/24 table 1 prio 10 
7. [root@localhost ~]# ip rule add from 192.168.2.0/24 table 2 prio 20 
8. [root@localhost ~]# 
9. [root@localhost ~]# ip rule show 
10. 0: from all lookup local 
11. 10: from 192.168.1.0/24 lookup 1 
12. 20: from 192.168.2.0/24 lookup 2 
13. 32766: from all lookup main 
14. 32767: from all lookup default
路由表ID
Linux的基於策略的路由中,路由表用ID來表示,但如有必要,還可以用ID與名稱對照表將ID轉換成名稱,關於這部分請參考第10.2.1節。
4. 刪除規則
ip命令提供的刪除規則的方式十分靈活,例如,要刪除下列第2條規則,可以分別使用“優先級別”、“條件”及“路由表”當中任何一個唯一的值來設置所需刪除的規則,如下:
ip rule del prio 10
ip rule del from 192.168.1.0/24
ip rule del table 1
ip rule del from 192.168.1.0/24 table 1 prio 10
1. [root@localhost ~]# ip rule show 
2. 0: from all lookup local 
3. 10: from 192.168.1.0/24 lookup 1 
4. 20: from 192.168.2.0/24 lookup 2 
5. 32766: from all lookup main 
6. 32767: from all lookup default 
7. [root@localhost ~]#


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM