假設,網路中有兩個外部介面,IP地址分別為eth0 172.16.1.1/24,eth1 10.0.0.1/24,串連內部網路的介面為eth2 192.168.1.1。現在設計這樣一個策略,將所有來自內部網路的web服務的資料,走向172.16.1.1這個出口。其他的資料走向 10.0.0.1 這個出口。
#介面設定
ifconfig eth0 172.16.1.1 netmask 255.255.255.0
ifconfig eth1 10.0.0.1 netmask 255.255.255.0
ifconfig eth2 192.168.1.1 netmask 255.255.255.0
echo 1 >/proc/sys/net/ipv4/ip_forward
#將web服務類的資料包打上標示100
#這一步,很關鍵,用於實現策略路由的是iproute2工具包,但是iproute2工具包是無法根據連接埠來進行匹配的,因此,需要藉助iptables來配合
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 100
#增加多路由表 假設172.16.1.1 這一出口的網關是172.16.1.254
ip route add 0/0 via 172.16.1.254 table 100
#設定路由策略 凡是資料包標記位上是100的資料,查詢100號路由表
ip rule add fwmark 100 table 100
#NAT 如果需要的話,進行NAT 不需要的話,就直接路由
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
本文主要是說明了把iptables和iproute2協同以後可以做出很多很強的應用。你可以利用iptables強勁的對資料報的識別能力來將不同類型的資料包打上你自己定義的標示,然後利用iproute2的策略路由的功能來對路由進行人為的幹預。