根据目的地通过不同接口路由流量

根据目的地通过不同接口路由流量

我正在研究 iptables 和路由。

所以我有一台带有2个接口eth0(192.168.2.100,gw 192.168.2.1)和tun0(10.7.7.2,gw 10.7.7.1)的Ubuntu机器。
我希望流量通过 tun0(10.7.7.1) 到达此站点 ifconfig.me 并通过 eth0(192.168.2.1) 到达 ipinfo.io

所以我做了:

我在以下位置创建了新条目/etc/iproute2/rt_tables

echo 1 vpn >> /etc/iproute2/rt_tables

然后我将默认路由添加到新表:

ip route add default via 10.7.7.1 dev tun0 table vpn

我添加了规则,因此所有带有 makr 1 的数据包都将通过表 VPN 进行路由:

ip rule add fwmark 0x1 table vpn

我用标记 1 将所有到 ifconfig.me 的传出流量标记为:

iptables -A OUTPUT -t mangle -d ifconfig.me -j MARK --set-mark 1

当我卷曲到 ipinfo.io 时,curl ipinfo.io我得到了正确的 IP,形成了 eth0 提供的网关,但是当我尝试从 ifconfig.me 获取响应时,curl ifconfig.me什么也没有发生(我认为它超时了)。因此,看起来流量正在通过正确的表,但它停在那里。

ip route show table vpn:

default via 10.7.7.1 dev tun0

答案1

您不需要所有这些混乱,路由是基于目的地和网关的,所以如果您希望一些流量通过某个接口,您需要的只是......正确设置路由:

# ifconfig thru vpn link
ip route add 153.121.72.212 via 10.7.7.1
ip route add 153.121.72.211 via 10.7.7.1
# everything else via default network
ip route add default via 192.168.2.1

相关内容