我的问题非常类似于根据目标端口在不同的接口上输出流量。然而,这个问题是在 2011 年提出的。现在我们有了更新的内核,可以使用 tcp 或 udp 选择器来制定 ip 规则(“策略路由现在在第 4 层占有一席之地”):来源 -请参阅对此答案的评论。
我是路由新手,所以我只知道我在 unix.stackexchange.com 上的答案中读到的内容。我的大部分解决方案想法来自通过特定接口路由端口流量。
我有两个接口 eth1 (10.0.0.182) 和 eth0 (192.168.1.2)。我的默认路由是 eth0。我希望所有 http 和 https 流量都通过 eth1 而不是默认路由进行路由。其他一切都可以保持不变。
route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 202 0 0 eth0
0.0.0.0 10.0.0.1 0.0.0.0 UG 203 0 0 eth1
10.0.0.0 0.0.0.0 255.255.255.0 U 203 0 0 eth1
192.168.1.2 0.0.0.0 255.255.255.0 U 202 0 0 eth0
10.0.0.1 处的设备是 Comcast 调制解调器,充当 DHCP 服务器、防火墙等。公共 IP 地址是 Comcast IP。
以下是我认为需要执行的步骤,才能使用较新的 ip 规则功能使其正常工作。
# add a new (secondary) table:
echo "200 comcast-route" >> /etc/iproute2/rt_tables
# Populate secondary routing table
ip route add default via 10.0.0.1 dev eth1 table comcast-route
# relax Strict Reverse Path Forwarding to Loose RPF
sysctl -w net.ipv4.conf.eth1.rp_filter=2
#NOTE: my system already has this value, so no change is needed
# net.ipv4.conf.eth1.rp_filter = 2
# specify alternate routes when using specific destination ports
# iif lo below means "from local"
ip rule add iif lo ipproto tcp dport 80 lookup 80
ip rule add iif lo ipproto tcp dport 443 lookup 80
这一切看起来正确吗?如果不起作用,我该如何恢复这些更改?
最后,当一切都按预期进行时,我如何使其持久化?我看到一个答案这里,但我认为使用的建议/etc/rc.d/rc.local
已经过时了。有没有更好的方法来坚持这些规则?