Linux 使用 ip route , ip rule , iptables 配置策略路由
要求192.168.0.100以內(nèi)的使用 10.0.0.1 網(wǎng)關(guān)上網(wǎng),其他IP使用 20.0.0.1 上網(wǎng)志电。
首先要在網(wǎng)關(guān)服務(wù)器上添加一個默認(rèn)路由曙咽,當(dāng)然這個指向是絕大多數(shù)的IP的出口網(wǎng)關(guān)。
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所在的網(wǎng)卡,3 是路由表的編號)
之后添加 ip rule 規(guī)則
ip rule add fwmark 3 table 3 (fwmark 3是標(biāo)記挑辆,table 3 是路由表3 上邊例朱。 意思就是凡事標(biāo)記了 3 的數(shù)據(jù)使用table3 路由表)
之后使用iptables給相應(yīng)的數(shù)據(jù)打上標(biāo)記
iptables -A PREROUTING -t mangle -i eth0 -s 192.168.0.1 -192.168.0.100 -j MARK --set-mark 3
因為mangle的處理是優(yōu)先于 nat 和fiter表的,所以相依數(shù)據(jù)包到達(dá)之后先打上標(biāo)記鱼蝉,之后在通過ip rule規(guī)則洒嗤,對應(yīng)的數(shù)據(jù)包使用相應(yīng)的路由表進(jìn)行路由,最后讀取路由表信息魁亦,將數(shù)據(jù)包送出網(wǎng)關(guān)渔隶。
ip rule:
進(jìn)行路由時,根據(jù)路由規(guī)則來進(jìn)行匹配洁奈,按優(yōu)先級(pref)從低到高匹配,直到找到合適的規(guī)則.所以在應(yīng)用中配置默認(rèn)路由是必要的
路由規(guī)則的添加
ip rule add from 192.168.1.10/32 table 1 pref 100
如果pref值不指定间唉,則將在已有規(guī)則最小序號前插入
PS: 創(chuàng)建完路由規(guī)則若需立即生效須執(zhí)行
ip route flush cache
From -- 源地址
To -- 目的地址(這里是選擇規(guī)則時使用,查找路由表時也使用)
Tos -- IP包頭的TOS(type of sevice)域Linux高級路由-
Dev -- 物理接口
Fwmark -- iptables標(biāo)簽
采取的動作除了指定路由表外利术,還可以指定下面的動作:
Table 指明所使用的表
Nat 透明網(wǎng)關(guān)
Prohibit 丟棄該包呈野,并發(fā)送 COMM.ADM.PROHIITED的ICMP信息
Reject 單純丟棄該包
Unreachable丟棄該包, 并發(fā)送 NET UNREACHABLE的ICMP信息
Usage: ip rule [ list | add | del ]SELECTOR ACTION
SELECTOR := [ 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策略路由印叁,路由策略(高級路由設(shè)置被冒,多出口)
FROM http://rfyiamcool.blog.51cto.com/1030776/768562
功能說明:
由Linux實現(xiàn)流量分割,
1轮蜕, 到202.96.209.133的數(shù)據(jù)從Linux路由器的eth2到路由器A,再到202.96.209.133昨悼。
2, 到Internet其他地方的數(shù)據(jù)從Linux路由器的eth1到路由器B,再到Internet肠虽。
實現(xiàn)方法:
打開Linux的路由功能:
echo 1 >/proc/sys/net/ipv4/ip_forward
首先添加一條規(guī)則幔戏,指定從172.16.16.2來的數(shù)據(jù)查找路由表5:
ip ru add from 172.16.16.2 lookup 5
1,實現(xiàn)第一個功能
(1)税课,在路由表5中添加一條路由闲延,到202.96.209.133的數(shù)據(jù)經(jīng)過192.168.1.1:
# ip ro add 202.96.209.133 via 192.168.1.1 table 5
(2)痊剖,這樣就完成了路由的設(shè)置,因為172.16.16.2是私有地址垒玲,所以在Linux路由器的出口eth2處應(yīng)該對其進(jìn)行NAT的設(shè)置陆馁,如下:
# 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合愈, 實現(xiàn)第二個功能(在第一個的基礎(chǔ)上)
(1)叮贩,在路由表5中添加默認(rèn)路由:
# ip ro add default via 10.10.10.2 table 5
(2),在Linux路由器的出口eth1處進(jìn)行NAT設(shè)置:
# 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命令進(jìn)行測試寸莫。不同點在于路由的第二跳捺萌,到202.96.209.133時,第二跳為:192.168.1.1膘茎,到其他地方時第二跳為:10.10.10.2桃纯。
注意:linux路由器是不能上網(wǎng)的,因為沒有為他自己指定專門的路由或默認(rèn)路由披坏。為Linux路由器指定路由的命令如下:
ip ro add default via 192.168.1.1
ip ro flush cache
文章2:
實驗名稱:Linux下實現(xiàn)基于源地址的策略路由
操作系統(tǒng):RedHat 7.2
所使用的內(nèi)核:2.4.18
必須的模塊: iproute2态坦,iptables
功能描述:首先你必須明白策略路由和路由策略是兩個不同的概念,策略路由是根據(jù)IP包中的源地址棒拂,端口號等來實現(xiàn)的伞梯;而路由策略可以理解為路由表中的一系列路由動作。
普通的路由是根據(jù)IP包中的目的地址來判斷的帚屉,如:如果數(shù)據(jù)包是到http://linux.networksbase.com的壮锻,那么發(fā)送到網(wǎng)關(guān)192.168.1.1,如果到其他地方發(fā)送到192.168.2.1涮阔。
但很多時候我們需要對數(shù)據(jù)包的源地址也要作出判斷,如:網(wǎng)絡(luò)中有幾條出口線路灰殴,那么優(yōu)先權(quán)高的人走速率快的鏈路敬特,其他人走速率慢的鏈路,這個時候就需要策略路由牺陶。
描述:實驗中有兩個局域網(wǎng):LAN 1和LAN 2伟阔,我們要實現(xiàn)如下功能:
1,LAN 1中的192.168.2.25和192.168.2.128從路由器A上網(wǎng)掰伸;
2皱炉,LAN 1中的其他用戶從路由器B上網(wǎng);
3狮鸭,LAN 2中的所有用戶從路由器A上網(wǎng)
實現(xiàn):
首先你要打開Linux服務(wù)器的路由功能合搅,命令如下:
echo 1> /proc/sys/net/ipv4/ip_forward
然后設(shè)置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多搀,設(shè)置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的數(shù)據(jù)查找路由表5
ip route add default via 192.168.0.1 table 5
定義路由表5的路由策略。
2灾部,設(shè)置LAN 1中其他用戶的路由:
ip rule add from 192.168.2.0/24 lookup 6
這句話的意思是讓來自192.168.2.0的數(shù)據(jù)查找路由表6
ip route add default via 192.168.1.1 table 6
定義路由表6的路由策略康铭。
3,設(shè)置LAN 2的路由:
ip rule add from 172.16.3.0/24 lookup 6
這句話的意思是讓來自LAN 2的數(shù)據(jù)查找路由表6
ip route add default via 192.168.1.1 table 6(這條命令上面已經(jīng)用過了赌髓!)
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