Linux-iptables-route-rule

 

 

詳情:

http://www.mamicode.com/info-detail-1412618.html  最後面有粘貼html

 

 

linux系統路由表

linux一共0-255個路由表
linux能夠自定義從1-252個路由表,
linux系統維護了4個路由表:
0表 系統保留表
 
255  local 本地路由表,存有本地接口地址,廣播地址,以及NAT地址。
     local表由系統自動維護,管理員不能操做此表。
254  main 主路由表,傳統路由表,ip route若沒指定表即操做表254。
     注:平時用route查看的亦是此表設置的路由。
253  default  默認路由表通常存放默認路由。
     注:rt_tables文件中表以數字來區分表,保留最多支持255張表。

路由表的查看可有如下二種方法:
      ip route list/show table table_number
      ip route list/show table table_name
路由表序號和表名的對應關係在/etc/iproute2/rt_tables中,可手動編輯

路由規則 ip rule

進行路由時,根據路由規則來進行匹配,按優先級(pref)從低到高匹配,直到找到合適的規則,因此在應用中配置默認路由是必要的。
ip rule show 顯示路由規則。
路由規則的添加:
# ip rule add from 192.168.1.10/32 table 1 pref 100
若是pref值不指定,則將在已有規則最小序號前插入
注:建立完路由規則若需當即生效須執行
#ip route flush cache
刷新路由緩衝。
 
命令格式以下:
        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 ]

    參數解析以下:
        From -- 源地址
        To -- 目的地址(這裏是選擇規則時使用,查找路由表時也使用)
  Tos -- IP包頭的TOS(type of sevice)域Linux高級路由-
  Dev -- 物理接口
     Fwmark -- iptables標籤
    採起的動做除了指定路由表外,還能夠指定下面的動做:
        Table 指明所使用的表
      Nat 透明網關
   Prohibit 丟棄該包,併發送 COMM.ADM.PROHIITED的ICMP信息 
   Reject 單純丟棄該包
   Unreachable丟棄該包, 併發送 NET UNREACHABLE的ICMP信息
 
    路由表添加完畢,便可在策略路由表內添加路由。
 
 
例:
 

以一例子來講明:公司內網要求192.168.0.100 之內的使用 10.0.0.1 網關上網 (電信),其餘IP使用 20.0.0.1 (網通)上網。linux

  1. 首先要在網關服務器上添加一個默認路由,固然這個指向是絕大多數的IP的出口網關:ip route add default gw 20.0.0.1
  2. 以後經過 ip route 添加一個路由表:ip route add table 3 via 10.0.0.1 dev ethX (ethx 是 10.0.0.1 所在的網卡, 3 是路由表的編號)
  3. 以後添加 ip rule 規則:ip rule add fwmark 3 table 3 (fwmark 3 是標記,table 3 是路由表3 上邊。 意思就是凡事標記了 3 的數據使用 table3 路由表)
  4. 以後使用 iptables 給相應的數據打上標記:iptables -A PREROUTING -t mangle -i eth0 -s 192.168.0.1 - 192.168.0.100 -j MARK --set-mark 3
由於mangle的處理是優先於 nat 和fiter表的,因此相應數據包到達以後先打上標記,以後再經過ip rule規則。對應的數據包使用相應的路由表進行路由,最後讀取路由表信息,將數據包送出網關。
 
 
 

標籤:算法

1.基礎知識

1.1 路由 (Routing)

1.1.1 路由策略 (使用 ip rule 命令操做路由策略數據庫)

    基於策略的路由比傳統路由在功能上更強大,使用更靈活,它使網絡管理員不只可以根據目的地址並且可以根據報文大小、應用或IP源地址等屬性來選擇轉發路徑。數據庫

ip rule 命令:
  • Usage: ip rule [ list | add | del ] SELECTOR ACTION (add 添加;del 刪除; llist 列表)
  • SELECTOR := [ from PREFIX 數據包源地址] [ to PREFIX 數據包目的地址] [ tos TOS 服務類型][ dev STRING 物理接口] [ pref NUMBER ] [fwmark MARK iptables 標籤]
  • ACTION := [ table TABLE_ID 指定所使用的路由表] [ nat ADDRESS 網絡地址轉換][ prohibit 丟棄該表| reject 拒絕該包| unreachable 丟棄該包]
  • [ flowid CLASSID ]
  • TABLE_ID := [ local | main | default | new | NUMBER ]

例子:服務器

  • ip rule add from 192.203.80/24 table inr.ruhep prio 220 經過路由表 inr.ruhep 路由來自源地址爲192.203.80/24的數據包 
  • ip rule add from 193.233.7.83 nat 192.203.80.144 table 1 prio 320 把源地址爲193.233.7.83的數據報的源地址轉換爲192.203.80.144,並經過表1進行路由 

在 Linux 系統啓動時,內核會爲路由策略數據庫配置三條缺省的規則: 網絡

  • 0 匹配任何條件 查詢路由表local(ID 255) 路由表local是一個特殊的路由表,包含對於本地和廣播地址的高優先級控制路由。rule 0很是特殊,不能被刪除或者覆蓋。  
  • 32766 匹配任何條件 查詢路由表main(ID 254) 路由表main(ID 254)是一個一般的表,包含全部的無策略路由。系統管理員能夠刪除或者使用另外的規則覆蓋這條規則。
  • 32767 匹配任何條件 查詢路由表default(ID 253) 路由表default(ID 253)是一個空表,它是爲一些後續處理保留的。對於前面的缺省策略沒有匹配到的數據包,系統使用這個策略進行處理。這個規則也能夠刪除。

不要混淆路由表和策略:規則指向路由表,多個規則能夠引用一個路由表,並且某些路由表能夠沒有策略指向它。若是系統管理員刪除了指向某個路由表的全部規則,這個表就沒有用了,可是仍然存在,直到裏面的全部路由都被刪除,它纔會消失。併發

資料來源工具

1.1.2 路由表 (使用 ip route 命令操做靜態路由表)

    所謂路由表,指的是路由器或者其餘互聯網網絡設備上存儲的表,該表中存有到達特定網絡終端的路徑,在某些狀況下,還有一些與這些路徑相關的度量。路由器的主要工做就是爲通過路由器的每一個數據包尋找一條最佳的傳輸路徑,並將該數據有效地傳送到目的站點。因而可知,選擇最佳路徑的策略即路由算法是路由器的關鍵所在。爲了完成這項工做,在路由器中保存着各類傳輸路徑的相關數據——路由表(Routing Table),供路由選擇時使用,表中包含的信息決定了數據轉發的策略。打個比方,路由表就像咱們平時使用的地圖同樣,標識着各類路線,路由表中保存着子網的標誌信息、網上路由器的個數和下一個路由器的名字等內容。路由表根據其創建的方法,能夠分爲動態路由表和靜態路由表。ui

    linux 系統中,能夠自定義從 1-252個路由表,其中,linux系統維護了4個路由表:url

  • 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

如下面的路由表爲例:

技術分享
Destination    Netmask    Gateway          Interface    Metric
0.0.0.0    0.0.0.0    192.168.123.254    192.168.123.88    1 #缺省路由,目的地址不在本路由表中的數據包,通過本機的 192.168.123.88 接口發到下一個路由器 192.168.123.254
127.0.0.0    255.0.0.0    127.0.0.1    127.0.0.1    1        #發給本機的網絡包
192.168.123.0    255.255.255.0    192.168.123.68    192.168.123.68    1 #直連路由。目的地址爲 192.168.123.0/24 的包發到本機 192.168.123.88 接口
192.168.123.88    255.255.255.255    127.0.0.1    127.0.0.1    1        #目的地址爲 192.168.123.88的包是發給本機的包
192.168.123.255    255.255.255.255    192.168.123.88    192.168.123.88    1 #廣播包的網段是 192.168.123.0/24,通過 192.168.123.88 接口發出去
224.0.0.0    224.0.0.0    192.168.123.88    192.168.123.88    1             #多播包,通過 192.168.123.88 接口發出去
255.255.255.255    255.255.255.255    192.168.123.68    192.168.123.68    1 #全網廣播包
Default Gateway: 192.168.123.254
技術分享

各字段說明:

  • destination:目的網段
  • mask:與網絡目標地址相關聯的網掩碼(又稱之爲子網掩碼)。子網掩碼對於 IP 網絡地址能夠是一適當的子網掩碼,對於主機路由是 255.255.255.255 ,對於默認路由是 0.0.0.0。若是忽略,則使用子網掩碼 255.255.255.255。定義路由時因爲目標地址和子網掩碼之間的關係,目標地址不能比它對應的子網掩碼更爲詳細。換句話說,若是子網掩碼的一位是 0,則目標地址中的對應位就不能設置爲 1。
  • interface:到達該目的地的本路由器的出口ip
  • gateway: 下一跳路由器入口的 ip,路由器經過 interface 和 gateway 定義一調到下一個路由器的鏈路。一般狀況下,interface 和 gateway 是同一網段的metric 跳數,該條路由記錄的質量,通常狀況下,若是有多條到達相同目的地的路由記錄,路由器會採用metric值小的那條路由

根據子網掩碼,能夠將路由分爲三種類型:

  • 主機路由:機路由是路由選擇表中指向單個IP地址或主機名的路由記錄。主機路由的Flags字段爲H。
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。
Destination    Gateway       Genmask    Flags     Metric    Ref    Use    Iface
-----------    -------     ------- -----      ------    ---    ---    -----
default       192.168.1.1     0.0.0.0    UG       0        0     0    eth0

設置和查看路由表均可以用 route 命令,設置內核路由表的命令格式是:route [add|del] [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]

其中:

  • add : 添加一條路由規則,del : 刪除一條路由規則,-net : 目的地址是一個網絡,-host : 目的地址是一個主機,target : 目的網絡或主機
  • netmask : 目的地址的網絡掩碼,gw : 路由數據包經過的網關,dev : 爲路由指定的網絡接口

好比:

  • route add 0.0.0.0 mask 0.0.0.0 192.168.12.1
  • route add 10.41.0.0 mask 255.255.0.0 10.27.0.1 metric 7

(數據來源:(1)(2)(3)

關於 src 屬性:

當一個主機有多個網卡配置了多個 IP 的時候,對於它產生的網絡包,能夠在路由選擇時設置源 IP 地址。好比:

ip route add 78.22.45.0/24 via 10.45.22.1 src 10.45.22.12 (發到 78.22.45.0/24 網段的網絡包,下一跳的路由器 IP 是 10.45.22.1,包的源IP地址設爲10.45.22.12)。

要注意的是,src 選項只會影響該 host 上產生的網絡包。若是是一個被路由的外來包,明顯地它已經帶有了一個源 IP 地址,這時候,src 參數的配置對它沒有任何影響,除非你使用 NAT 來改變它。對 Neutron 來講,qrouter 和 qif namespace 中的路由表中的 src 都沒有實際意義,由於它們只會處理外來的網絡包。

1.1.3 路由分類之靜態路由

  靜態路由是指由用戶或網絡管理員手工配置的路由信息。當網絡的拓撲結構或鏈路的狀態發生變化時,網絡管理員須要手工去修改路由表中相關的靜態路由信息。靜態路由信息在缺省狀況下是私有的,不會傳遞給其餘的路由器。固然,網管員也能夠經過對路由器進行設置使之成爲共享的。靜態路由通常適用於比較簡單的網絡環境,在這樣的環境中,網絡管理員易於清楚地瞭解網絡的拓撲結構,便於設置正確的路由信息。

技術分享

以上面的拓撲結構爲例,在沒有配置路由的狀況下,計算機1 和 2 沒法互相通訊,由於 1 發給 2 的包在到達路由器 A 後,它不知道怎麼轉發它。B 也一樣。管理員能夠配置以下的靜態路由來實現 1 和 2 之間的通訊:

計算機配置默認網關:

  • 計算機1 上:route add default gw 192.168.1.1
  • 計算機2 上:route add default gw 192.168.3.1

路由器配置:

  • R1 上:ip route 192.168.3.0 255.255.255.0 f0/1 (意思爲:目標網絡地址爲 192.168.3.0/24 的數據包,通過 f0/1 端口發出)
  • R2 上:ip route 192.168.1.0 255.255.255.0 f0/1 (意思爲:目標網絡地址爲 192.168.1.0/24 的數據包,通過 f0/1 端口發出)

或者

  • R1 上:ip route 192.168.3.0 255.255.255.0 192.168.2.2 (意思爲:要去 192.168.3.0/24 的數據包,下一路由器 IP 地址爲 192.168.2.2)
  • R2 上:ip route 192.168.1.0 255.255.255.0 192.168.2.1

(來源:http://baike.baidu.com/view/911.htm

1.1.4 路由分類之動態路由

    動態路由是指路由器可以自動地創建本身的路由表,而且可以根據實際狀況的變化適時地進行調整。它是與靜態路由相對的一個概念,指路由器可以根據路由器之間的交換的特定路由信息自動地創建本身的路由表,而且可以根據鏈路和節點的變化適時地進行自動調整。當網絡中節點或節點間的鏈路發生故障,或存在其它可用路由時,動態路由能夠自行選擇最佳的可用路由並繼續轉發報文。

常見的動態路由協議有如下幾個:路由信息協議(RIP)、OSPF(Open Shortest Path First開放式最短路徑優先)、IS-IS(Intermediate System-to-Intermediate System,中間系統到中間系統)、邊界網關協議(BGP)是運行於 TCP 上的一種自治系統的路由協議。

(來源:http://baike.baidu.com/view/897.htm)    

1.1.5 ip rule,ip route,iptables 三者之間的關係

以一例子來講明:公司內網要求192.168.0.100 之內的使用 10.0.0.1 網關上網 (電信),其餘IP使用 20.0.0.1 (網通)上網。

  1. 首先要在網關服務器上添加一個默認路由,固然這個指向是絕大多數的IP的出口網關:ip route add default gw 20.0.0.1
  2. 以後經過 ip route 添加一個路由表:ip route add table 3 via 10.0.0.1 dev ethX (ethx 是 10.0.0.1 所在的網卡, 3 是路由表的編號)
  3. 以後添加 ip rule 規則:ip rule add fwmark 3 table 3 (fwmark 3 是標記,table 3 是路由表3 上邊。 意思就是凡事標記了 3 的數據使用 table3 路由表)
  4. 以後使用 iptables 給相應的數據打上標記:iptables -A PREROUTING -t mangle -i eth0 -s 192.168.0.1 - 192.168.0.100 -j MARK --set-mark 3

由於 mangle 的處理是優先於 nat 和 fiter 表的,因此在數據包到達以後先打上標記,以後再經過 ip rule 規則,對應的數據包使用相應的路由表進行路由,最後讀取路由表信息,將數據包送出網關。

(來源:使用 ip route , ip rule , iptables 配置策略路由這裏 有一個更詳細的例子)

技術分享

這裏能夠看出 Netfilter 處理網絡包的前後順序:接收網絡包,先 DNAT,而後查路由策略,查路由策略指定的路由表作路由,而後 SNAT,再發出網絡包。

1.1.6 Traceroute 工具

    咱們在 linux 機器上,使用 traceroute 來獲知從你的計算機到互聯網另外一端的主機是走的什麼路徑。固然每次數據包由某一一樣的出發點(source)到達某一一樣的目的地(destination)走的路徑可能會不同,但基本上來講大部分時候所走的路由是相同的。在 MS Windows 中該工具爲 tracert。 在大多數狀況下,咱們會在linux主機系統下,直接執行命令行:traceroute hostname;而在Windows系統下是執行tracert的命令: tracert hostname。

  • 命令格式:traceroute [參數] [主機]
  • 命令功能:traceroute 指令讓你追蹤網絡數據包的路由途徑,預設數據包大小是 40Bytes,用戶可另行設置。
  • 具體參數格式:traceroute [-dFlnrvx][-f<存活數值>][-g<網關>...][-i<網絡界面>][-m<存活數值>][-p<通訊端口>][-s<來源地址>][-t<服務類型>][-w<超時秒數>][主機名稱或IP地址][數據包大小]
  • 命令參數:
    • -d 使用Socket層級的排錯功能,-f 設置第一個檢測數據包的存活數值TTL的大小,-F 設置勿離斷位,-g 設置來源路由網關,最多可設置8個,-i 使用指定的網絡界面送出數據包,-I 使用ICMP迴應取代UDP資料信息,-m 設置檢測數據包的最大存活數值TTL的大小,-n 直接使用IP地址而非主機名稱。
    • -p 設置UDP傳輸協議的通訊端口,-r 忽略普通的Routing Table,直接將數據包送到遠端主機上,-s 設置本地主機送出數據包的IP地址,-t 設置檢測數據包的TOS數值。
    • -v 詳細顯示指令的執行過程,-w 設置等待遠端主機回報的時間,-x 開啓或關閉數據包的正確性檢驗。

(1)例子

技術分享
[root@localhost ~]# traceroute www.baidu.com
traceroute to www.baidu.com (61.135.169.125), 30 hops max, 40 byte packets
1 192.168.74.2 (192.168.74.2) 2.606 ms 2.771 ms 2.950 ms
2 211.151.56.57 (211.151.56.57) 0.596 ms 0.598 ms 0.591 ms
3 211.151.227.206 (211.151.227.206) 0.546 ms 0.544 ms 0.538 ms
4 210.77.139.145 (210.77.139.145) 0.710 ms 0.748 ms 0.801 ms
5 202.106.42.101 (202.106.42.101) 6.759 ms 6.945 ms 7.107 ms
6 61.148.154.97 (61.148.154.97) 718.908 ms * bt-228-025.bta.net.cn (202.106.228.25) 5.177 ms
7 124.65.58.213 (124.65.58.213) 4.343 ms 4.336 ms 4.367 ms
8 202.106.35.190 (202.106.35.190) 1.795 ms 61.148.156.138 (61.148.156.138) 1.899 ms 1.951 ms
9 * * *
30 * * *
技術分享

說明:

  • 記錄按序列號從1開始,每一個紀錄就是一跳 ,每跳錶示一個網關,咱們看到每行有三個時間,單位是 ms,其實就是 -q 的默認參數。
  • 探測數據包向每一個網關發送三個數據包後,網關響應後返回的時間;若是您用 traceroute -q 4 www.58.com ,表示向每一個網關發送4個數據包。
  • 有時咱們 traceroute 一臺主機時,會看到有一些行是以星號表示的。出現這樣的狀況,多是防火牆封掉了ICMP 的返回信息,因此咱們得不到什麼相關的數據包返回數據。
  • 有時咱們在某一網關處延時比較長,有多是某臺網關比較阻塞,也多是物理設備自己的緣由。固然若是某臺 DNS 出現問題時,不能解析主機名、域名時,也會 有延時長的現象;您能夠加-n 參數來避免DNS解析,以IP格式輸出數據。
  • 若是在局域網中的不一樣網段之間,咱們能夠經過 traceroute 來排查問題所在,是主機的問題仍是網關的問題。若是咱們經過遠程來訪問某臺服務器遇到問題時,咱們用到traceroute 追蹤數據包所通過的網關,提交IDC服務商,也有助於解決問題;但目前看來在國內解決這樣的問題是比較困難的,就是咱們發現問題所在,IDC服務商也不可能幫助咱們解決。

(2)原理

 Traceroute 程序的設計是利用 ICMP 及 IP header 的 TTL(Time To Live)欄位(field)。

  1. 首先,traceroute 送出一個 TTL 是 1 的 IP datagram(其實,每次送出的爲3個40字節的包,包括源地址,目的地址和包發出的時間標籤)到目的地,當路徑上的第一個路由器(router)收到這個datagram 時,它將TTL減1。此時,TTL變爲0了,因此該路由器會將此 datagram 丟掉,並送回一個「ICMP time exceeded」消息(包括髮IP包的源地址,IP包的全部內容及路由器的IP地址),traceroute 收到這個消息後,便知道這個路由器存在於這個路徑上。
  2. 接着,traceroute 再送出另外一個TTL 是 2  的datagram,發現第2 個路由器...... 
  3. 而後,traceroute  每次將送出的 datagram 的 TTL  加1來發現另外一個路由器,這個重複的動做一直持續到某個datagram 抵達目的地。當datagram到達目的地後,該主機並不會送回ICMP time exceeded消息,由於它已經是目的地了,那麼traceroute如何得知目的地到達了呢?

    Traceroute 在送出 UDP datagrams 到目的地時,它所選擇送達的 port number 是一個通常應用程序都不會用的號碼(30000 以上),因此當此 UDP datagram 到達目的地後該主機會送回一個「ICMP port unreachable」的消息,而當traceroute 收到這個消息時,便知道目的地已經到達了。因此traceroute 在Server端也是沒有所謂的Daemon 程式。Traceroute提取發 ICMP TTL 到期消息設備的 IP 地址並做域名解析。每次 ,Traceroute 都打印出一系列數據,包括所通過的路由設備的域名及 IP地址,三個包每次來回所花時間。

(以上資料來自互聯網)

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息