假设我有多个网络接口,并且我想根据应用程序有选择地使用它们。eth0 是主路由表中具有标准网关的标准接口,eth1 是具有不同网关的另一个接口。
假设我以用户“user_eth1”的身份启动一个应用程序。
我使用了以下一组 iptables/ip 规则。
IP表:
iptables -t mangle -A OUTPUT -m user --uid-owner user_eth1 -j MARK --set-mark 100
iptables -t nat -A POSTROUTING -m user -uid-owner -o eth1 user_eth1 -j SNAT --to-source <eth_ipaddress>
IP规则:
ip rule add fwmark 100 lookup table100
我构建了“table100”,如下所示(毫无疑问)
ip route show table main | grep -Ev ^default | while read ROUTE; do ip route add table table100 $ROUTE; done
ip route add default via <default_gateway> table table100
根本不起作用。这是怎么回事?
先感谢您!
答案1
这有什么问题?
- 您确定“-m 用户”吗?可能是“-m 所有者”?
- «-t nat -A POSTROUTING -m user -uid-owner» 最好与 «-m mark --mark» 一起使用 — 您已经分配了标记,记得吗?
好吧,无论如何,这个设置是合法的。你可以用tcpdump
它来调试它。