Linux 使用 ip route , ip rule , iptables 配置策略路由
要求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規則,對應的數據包使用相應的路由表進行路由,最后讀取路由表信息,將數據包送出網關。
ip rule:
進行路由時,根據路由規則來進行匹配,按優先級(pref)從低到高匹配,直到找到合適的規則.所以在應用中配置默認路由是必要的
路由規則的添加
ip rule add from 192.168.1.10/32 table 1 pref 100
如果pref值不指定,則將在已有規則最小序號前插入
PS: 創建完路由規則若需立即生效須執行
ip route flush cacheFrom -- 源地址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 ACTIONSELECTOR := [ from PREFIX ] [ toPREFIX ] [ tos TOS ][ dev STRING ] [ pref NUMBER ]ACTION := [ table TABLE_ID ] [ natADDRESS ][ prohibit | reject | unreachable ][ flowid CLASSID ]TABLE_ID := [ local | main | default| new | NUMBER ]
詳解看http://blog.csdn.net/scdxmoe/article/details/38661457
linux策略路由,路由策略(高級路由設置,多出口)
FROM http://rfyiamcool.blog.51cto.com/1030776/768562
功能說明:
由Linux實現流量分割,
1, 到202.96.209.133的數據從Linux路由器的eth2到路由器A,再到202.96.209.133。
2, 到Internet其他地方的數據從Linux路由器的eth1到路由器B,再到Internet。
實現方法:
打開Linux的路由功能:
echo 1 >/proc/sys/net/ipv4/ip_forward
首先添加一條規則,指定從172.16.16.2來的數據查找路由表5:
ip ru add from 172.16.16.2 lookup 5
1,實現第一個功能
(1),在路由表5中添加一條路由,到202.96.209.133的數據經過192.168.1.1:
# ip ro add 202.96.209.133 via 192.168.1.1 table 5
(2),這樣就完成了路由的設置,因為172.16.16.2是私有地址,所以在Linux路由器的出口eth2處應該對其進行NAT的設置,如下:
# iptables -t nat -A POSTROUTING -s 172.16.16.2 -d 202.96.209.133 -j SNAT --to 192.168.1.3
(3),刷新路由緩存:
# ip ro flush cache
2, 實現第二個功能(在第一個的基礎上)
(1),在路由表5中添加默認路由:
# ip ro add default via 10.10.10.2 table 5
(2),在Linux路由器的出口eth1處進行NAT設置:
# iptables -t nat -A POSTROUTING -s 172.16.16.2 -j SNAT --to 10.10.10.1
(3),刷新路由緩存:
# ip ro flush cache
注意:如果路由緩存不刷新的話,路由命令不能馬上生效!
腳本如下:
#!/bin/sh
echo 1 >/proc/sys/net/ipv4/ip_forward
ip ru add from 172.16.16.2 lookup 5
ip ro add 202.96.209.133 via 192.168.1.1 table 5
iptables -t nat -A POSTROUTING -s 172.16.16.2 -d 202.96.209.133 -j SNAT --to 192.168.1.3
ip ro add default via 10.10.10.2 table 5
iptables -t nat -A POSTROUTING -s 172.16.16.2 -j SNAT --to 10.10.10.1
ip ro flush cache
你也可以將上面腳本中的幾行iptables命令合為一行如下:
#iptables -t nat -A POSTROUTING -s 172.16.16.2 -j MASQUERADE
那么腳本如下:
#!/bin/sh
echo 1 >/proc/sys/net/ipv4/ip_forward
ip ru add from 172.16.16.2 lookup 5
ip ro add 202.96.209.133 via 192.168.1.1 table 5
ip ro add default via 10.10.10.2 table 5
iptables -t nat -A POSTROUTING -s 172.16.16.2 -j MASQUERADE
ip ro flush cache
可以使用tracert命令進行測試。不同點在于路由的第二跳,到202.96.209.133時,第二跳為:192.168.1.1,到其他地方時第二跳為:10.10.10.2。
注意:linux路由器是不能上網的,因為沒有為他自己指定專門的路由或默認路由。為Linux路由器指定路由的命令如下:
ip ro add default via 192.168.1.1
ip ro flush cache
文章2:
實驗名稱:Linux下實現基于源地址的策略路由
操作系統:RedHat 7.2
所使用的內核:2.4.18
必須的模塊: iproute2,iptables
功能描述:首先你必須明白策略路由和路由策略是兩個不同的概念,策略路由是根據IP包中的源地址,端口號等來實現的;而路由策略可以理解為路由表中的一系列路由動作。
普通的路由是根據IP包中的目的地址來判斷的,如:如果數據包是到http://linux.networksbase.com的,那么發送到網關192.168.1.1,如果到其他地方發送到192.168.2.1。
但很多時候我們需要對數據包的源地址也要作出判斷,如:網絡中有幾條出口線路,那么優先權高的人走速率快的鏈路,其他人走速率慢的鏈路,這個時候就需要策略路由。
描述:實驗中有兩個局域網:LAN 1和LAN 2,我們要實現如下功能:
1,LAN 1中的192.168.2.25和192.168.2.128從路由器A上網;
2,LAN 1中的其他用戶從路由器B上網;
3,LAN 2中的所有用戶從路由器A上網
實現:
首先你要打開Linux服務器的路由功能,命令如下:
echo 1> /proc/sys/net/ipv4/ip_forward
然后設置LAN 1和LAN 2的IP偽裝:
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 172.16.3.0/24 -j MASQUERADE
1,設置192.168.2.25和192.168.2.128的路由:
ip rule add from 192.168.2.25 lookup 5
ip rule add from 192.168.2.128 lookup 5
這兩句話的意思是將來自192.168.2.25和192.168.2.128的數據查找路由表5
ip route add default via 192.168.0.1 table 5
定義路由表5的路由策略。
2,設置LAN 1中其他用戶的路由:
ip rule add from 192.168.2.0/24 lookup 6
這句話的意思是讓來自192.168.2.0的數據查找路由表6
ip route add default via 192.168.1.1 table 6
定義路由表6的路由策略。
3,設置LAN 2的路由:
ip rule add from 172.16.3.0/24 lookup 6
這句話的意思是讓來自LAN 2的數據查找路由表6
ip route add default via 192.168.1.1 table 6(這條命令上面已經用過了!)
4,刷新路由:
ip route flush cache
5,腳本如下:
#!/bin/sh
echo 1> /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 172.16.3.0/24 -j MASQUERADE
ip rule add from 192.168.2.25 lookup 5
ip rule add from 192.168.2.128 lookup 5
ip route add default via 192.168.0.1 table 5
ip rule add from 192.168.2.0/24 lookup 6
ip rule add from 172.16.3.0/24 lookup 6
ip route add default via 192.168.1.1 table 6
ip route flush cache
6,更明顯一些,我們可以將上面腳本中的iptables命令行替換為下面的行
iptables -t nat -A POSTROUTING -s 192.168.2.25/24 -j SNAT --to 192.168.0.51
iptables -t nat -A POSTROUTING -s 192.168.2.128/24 -j SNAT --to 192.168.0.51
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j SNAT --to 192.168.1.51
iptables -t nat -A POSTROUTING -s 172.16.3.0/24 -j SNAT --to 192.168.0.51
那么新腳本如下:
#!/bin/sh
echo 1> /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 192.168.2.25/24 -j SNAT --to 192.168.0.51
iptables -t nat -A POSTROUTING -s 192.168.2.128/24 -j SNAT --to 192.168.0.51
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j SNAT --to 192.168.1.51
iptables -t nat -A POSTROUTING -s 172.16.3.0/24 -j SNAT --to 192.168.0.51
ip rule add from 192.168.2.25 lookup 5
ip rule add from 192.168.2.128 lookup 5
ip route add default via 192.168.0.1 table 5
ip rule add from 192.168.2.0/24 lookup 6
ip rule add from 172.16.3.0/24 lookup 6
ip route add default via 192.168.1.1 table 6
ip route flush cache
?