linux策略路由基礎
策略性是指對於IP包的路由是以網絡管理員根據需要定下的一些策略為主要依據進行路由的。例如我們可以有這樣的策略:“所有來直自網A的包,選擇X路徑;其他選擇Y路徑”,或者是“所有TOS為A的包選擇路徑F;其他選者路徑K”
linux最多可以支持255張路由表,其中有3張表是內置的:
存在文件/etc/iproute2/rt_tables中
表255 本地路由表(Local table)本地接口地址,廣播地址,已及NAT地址都放在這個表。該路由表由自動維護,管理員不能直接修改。
表254 主路由表(Main table)如果沒有指明路由所屬的表,所有的路由都默認都放在這個表裡,一般來說,舊的路由工具(如route)所添加的路由都會加到這個表。一般是普通的路由。
表253 默認路由表(Default table)一般來說默認的路由都放在這張表,但是如果特別指明放的也可以是所有的網關路由。
表0 保留
路由配置命令的格式如下:
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這些。例如添加路由可以用:
router># ip route add 0/0 via 192.168.0.4 table main
router># 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)進行操作。而在單表體系裡,路由的操作是不用指明路由表的。
規則的配置 IP Rule
在裡,總共可以定義232個優先級的規則,一個優先級別只能有一條規則,即理論上總共可以有條規則。其中有3個規則是默認的。命令用法如下:
Usage: ip rule [ list | add | del ] SELECTORACTION
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規則,即尋找默認路由表。如果失敗,路由將失敗。重這裡可以看出,策略性路由是往前兼容的。
還可以添加規則:
router># ip rule add [from 0/0] table 1 pref 32800
router >#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信息