目錄
三, ip rule,ip route,iptables 三者之間的關係
一,路由策略(使用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 ]
例子:
#例子1:通過路由表 inr.ruhep 路由來自源地址爲192.203.80/24的數據包
ip rule add from 192.203.80/24 table inr.ruhep prio 220
#例子2:把源地址爲193.233.7.83的數據報的源地址轉換爲192.203.80.144,並通過表1進行路由
ip rule add from 193.233.7.83 nat 192.203.80.144 table 1 prio 320
在 Linux 系統啓動時,內核會爲路由策略數據庫配置三條缺省的規則:
0:匹配任何條件,查詢路由表local(ID 255),該表local是一個特殊的路由表,包含對於本地和廣播地址的優先級控制路由。rule 0非常特殊,不能被刪除或者覆蓋。
32766:匹配任何條件,查詢路由表main(ID 254),該表是一個通常的表,包含所有的無策略路由。系統管理員可以刪除或者使用另外的規則覆蓋這條規則。
32767:匹配任何條件,查詢路由表default(ID 253),該表是一個空表,它是後續處理保留。對於前面的策略沒有匹配到的數據包,系統使用這個策略進行處理,這個規則也可以刪除。
注:不要混淆路由表和策略:規則指向路由表,多個規則可以引用一個路由表,而且某些路由表可以策略指向它。如果系統管理員刪除了指向某個路由表的所有規則,這個表沒有用了,但是仍然存在,直到裏面的所有路由都被刪除,它纔會消失。
二,路由表(使用ip route命令操作靜態路由表)
所謂路由表,指的是路由器或者其他互聯網網絡設備上存儲的表,該表中存有到達特定網絡終端的路徑,在某些情況下,還有一些與這些路徑相關的度量。路由器的主要工作就是爲經過路由器的每個數據包尋找一條最佳的傳輸路徑,並將該數據有效地傳送到目的站點。由此可見,選擇最佳路徑的策略即路由算法是路由器的關鍵所在。爲了完成這項工作,在路由器中保存着各種傳輸路徑的相關數據--路由表,供路由選擇時使用,表中包含的信息決定了數據轉發的策略。
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文件中,可以手動編輯,路由表添加完畢及時生效,實例如下:
#實例1:在一號表中添加默認路由爲192.168.1.1
ip route add default via 192.168.1.1 table 1
#實例2:在一號表中添加一條到192.168.0.0網段的路由爲192.168.1.2
ip route add 192.168.0.0/24 via 192.168.1.2 table 1
以下面的路由表爲例,說明各個字段含義:
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
三, ip rule,ip route,iptables 三者之間的關係
iptables:iptables其實不是真正的防火牆,我們可以把它理解成一個客戶端代理,用戶通過iptables這個代理,將用戶的安全設定執行到對應的"安全框架"中,這個"安全框架"纔是真正的防火牆,這個框架的名字叫netfilter。
注:圖中 “路由判斷” 就是使用ip rule,ip route設置的規則,其中ip route配置的路由表服務於ip rule配置的規則。
以一例子來說明:公司內網要求192.168.0.100 以內的使用 10.0.0.1 網關上網 (電信),其他IP使用 20.0.0.1 (網通)上網。
- 首先要在網關服務器上添加一個默認路由,當然這個指向是絕大多數的IP的出口網關:ip route add default gw 20.0.0.1
- 之後通過 ip route 添加一個路由表:ip route add table 3 via 10.0.0.1 dev ethX (ethx 是 10.0.0.1 所在的網卡, 3 是路由表的編號)
- 之後添加 ip rule 規則:ip rule add fwmark 3 table 3 (fwmark 3 是標記,table 3 是路由表3 上邊。 意思就是凡事標記了 3 的數據使用 table3 路由表)
- 之後使用 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 規則,對應的數據包使用相應的路由表進行路由,最後讀取路由表信息,將數據包送出網關。
這裏可以看出 Netfilter 處理網絡包的先後順序:接收網絡包,先 DNAT,然後查路由策略,查路由策略指定的路由表做路由,然後 SNAT,再發出網絡包。
歡迎訂閱公衆號【從零開始學無線】,一起學習交流!