我有两个网卡和两个IP。 如何设置路由,通过第一个IP发送所有内容,除了通过第二个IP发送stream量的给定(本地)用户的stream量之外?
我知道那里有一些HOWTO,但在过去的三天里,我无法成功地使用它们。
我喜欢这个http://www.debian-administration.org/article/379/Policy_routing文章最好,唯一的区别是我的情况是我不处理PPP连接,我有两个以太网接口。
在设置好所有内容(?)之后,在wireshark中可以看到给定的本地用户的Web浏览stream量,SYN ACK回到正确的IP和界面,但是浏览器不回答。
请帮忙。
– -整个故事 – –
使用全新安装的Ubuntu 10.10进行testing,两个连接是:
eth0: ip=192.168.168.236 gw=192.168.168.1 wlan0: ip=192.168.2.12 gw=192.168.2.1 nameserver is 192.168.168.1
防火墙一开始是空的(即没有规则),所有的策略都是接受的。
root@kipkopp:~# ip rule list 0: from all lookup local 32766: from all lookup main 32767: from all lookup default root@kipkopp:~# ip route show 192.168.2.0/24 dev wlan0 proto kernel scope link src 192.168.2.12 metric 2 192.168.168.0/24 dev eth0 proto kernel scope link src 192.168.168.236 metric 1 169.254.0.0/16 dev eth0 scope link metric 1000 default via 192.168.168.1 dev eth0 proto static root@kipkopp:~# cat /etc/iproute2/rt_tables # # reserved values # 255 local 254 main 253 default 0 unspec # # local # #1 inr.ruhep 100 copyofmain 101 new
(build立copyofmain表,表新是空的)
root@kipkopp:~# ip route show table copyofmain 192.168.2.0/24 dev wlan0 proto kernel scope link src 192.168.2.12 metric 2 192.168.168.0/24 dev eth0 proto kernel scope link src 192.168.168.236 metric 1 169.254.0.0/16 dev eth0 scope link metric 1000 default via 192.168.168.1 dev eth0 proto static root@kipkopp:~# iptables -t mangle -A OUTPUT -m owner --uid-owner 1001 -j MARK --set-mark 1 root@kipkopp:~# ip rule add fwmark 1 pri 100 table copyofmain root@kipkopp:~# ip rule add from 192.168.168.236 pri 200 table copyofmain root@kipkopp:~# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source=192.168.168.236
尝试浏览到网站作为uid = 1001一切都很好。
(build立“新”表)
root@kipkopp:~# ip route show table new 192.168.2.0/24 dev wlan0 proto kernel scope link src 192.168.2.12 metric 1 192.168.168.0/24 dev eth0 proto kernel scope link src 192.168.168.236 metric 2 169.254.0.0/16 dev wlan0 scope link metric 1000 default via 192.168.2.1 dev wlan0 proto static root@kipkopp:~# ip rule add from 192.168.2.1 pri 200 table new root@kipkopp:~# iptables -t nat -A POSTROUTING -o wlan0 -j SNAT --to-source=192.168.2.12 root@kipkopp:~# ip rule show 0: from all lookup local 100: from all fwmark 0x1 lookup copyofmain 200: from 192.168.168.236 lookup copyofmain 200: from 192.168.2.12 lookup new 32766: from all lookup main 32767: from all lookup default
UID 1001还使用copyofmain表,并能上网。
root@kipkopp:~# ip rule delete from all fwmark 0x1 lookup copyofmain root@kipkopp:~# ip rule add fwmark 1 pri 100 table new root@kipkopp:~# ip rule list 0: from all lookup local 100: from all fwmark 0x1 lookup new 200: from 192.168.168.236 lookup copyofmain 200: from 192.168.2.12 lookup new 32766: from all lookup main 32767: from all lookup default
Uid 1001无法再浏览。
root@kipkopp:~# echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter root@kipkopp:~# echo 0 > /proc/sys/net/ipv4/conf/wlan0/rp_filter root@kipkopp:~# ip route flush cache
没提升。
我更改主(!)表中的默认路由:
root@kipkopp:~# ip route delete default via 192.168.168.1 dev eth0 proto static root@kipkopp:~# ip route add default via 192.168.2.1 dev wlan0 proto static
与其他用户一样,Uid 1001也是愉快的浏览。