1. 策略路由
1) 介紹
策略路由是一種比基於目標網絡進行路由更加靈活的數據包路由轉發機制。
Linux最多可以支持255張路由表,其中有3張表是內置的:存在文件/etc/iproute2/rt_tables中
表255 本地路由表(Local table) 本地接口地址,廣播地址,已及NAT地址都放在這個表。該路由表由系統自動維護,管理員不能直接修改。
表254 主路由表(Main table) 如果沒有指明路由所屬的表,所有的路由都默認都放在這個表里,一般來說,舊的路由工具(如route)所添加的路由都會加到這個表。一般是普通的路由。
表253 默認路由表(Default table)一般來說默認的路由都放在這張表,但是如果特別指明放的也可以是所有的網關路由。
表0 保留
2) 路由配置命令 IP Route
Usage: ip route list SELECTOR
ip route { change | del | add | append | replace | monitor } ROUTE
如果想查看路由表的內容,可以通過命令:
ip route list table <table_number>
ip -6 route list table <table_number> (對於IPv6)
對於路由的操作包括change、del、add 、append 、replace 、 monitor這些。例如添加路由可以用:
ip route add 0/0 via 192.168.0.4 table main
ip route add 192.168.3.0/24 via192.168.0.3 table 1
第一條命令是向主路由表(main table)即表254添加一條路由(而不是添加一條規則),路由的內容是設置192.168.0.4成為網關。
第二條命令代表向路由表1添加一條路由,子網192.168.3.0(子網掩碼是255.255.255.0)的網關是192.168.0.3.
在多路由表的路由體系里,所有的路由的操作,例如往路由表添加路由,或者在路由表里尋找特定的路由,需要指明要操作的路由表,所有沒有指明路由表,默認是對主路由表(表254)進行操作。而在單表體系里,路由的操作是不用指明路由表的。
3) 規則的配置 IP Rule
在Linux里,總共可以定義232個優先級的規則,一個優先級別只能有一條規則,即理論上總共可以有232條規則。其中有3個規則是默認的。命令用法如下:
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 ]
首先我們可以看看路由表默認的所有規則:
root@netmonster# ip rule list
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
注:數字越小,優先級越高
規則0,它是優先級別最高的規則,規則規定,所有的包,都必須首先使用local表(254)進行路由。本規則不能被更改和刪除。
規則32766,規定所有的包,使用表main進行路由。本規則可以被更改和刪除。
規則32767,規定所有的包,使用表default進行路由。本規則可以被更改和刪除。
在默認情況下進行路由時,首先會根據規則0在本地路由表里尋找路由,如果目的地址是本網絡,或是廣播地址的話,在這里就可以找到合適的路由;如果路由失敗,就會匹配下一個不空的規則,在這里只有32766規則,在這里將會在主路由表里尋找路由;如果失敗,就會匹配32767規則,即尋找默認路由表。如果失敗,路由將失敗。 從這里可以看出,策略路由是往前兼容的。
還可以添加規則:
ip rule add [from 0/0] table 1 pref 32800
ip rule add from 192.168.3.112/32 [tos 0x10] table 2 pref 1500 prohibit
第一條命令將向規則鏈增加一條規則,規則匹配的對象是所有的數據包,動作是選用路由表1的路由,這條規則的優先級是32800.
第二條命令將向規則鏈增加一條規則,規則匹配的對象是IP為192.168.3.112, tos等於0x10的包,使用路由表2,這條規則的優先級是1500,動作是丟棄。
添加以后,我們可以看看系統規則的變化。
router># ip rule
0: from all lookup local
1500 from 192.168.3.112/32 [tos 0x10] lookup 2
32766: from all lookup main
32767: from all lookup default
32800: from all lookup 1
上面的規則是以源地址為關鍵字,作為是否匹配的依據的。除了源地址外,還可以用以下的信息:
From -- 源地址
To -- 目的地址(這里是選擇規則時使用,查找路由表時也使用)
Tos -- IP包頭的TOS(type of sevice)域
Dev -- 物理接口
Fwmark -- 防火牆參數
采取的動作除了指定表,還可以指定下面的動作:
Table 指明所使用的表
Nat 透明網關
Action:
prohibit 丟棄該包,並發送 COMM.ADM.PROHIITED的ICMP信息
Reject 單純丟棄該包
Unreachable丟棄該包,並發送 NET UNREACHABLE的ICMP信息
4)IP Rule 與 IP Route 的區別
不要混淆路由表(route)和規則(rule):規則指向路由表,多個規則可以引用一個路由表,而且某些路由表可以沒有策略指向它。如果系統管理員刪除了指向某個路由表的所有規則,這個表就沒有用了,但是仍然存在,直到里面的所有路由都被刪除,它才會消失。
5)例子
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值小的那條路由。
http://www.cnblogs.com/sammyliu/p/4713562.html