无法通过 VPN 进行 IP 路由

无法通过 VPN 进行 IP 路由

我正在尝试运行 VPN。我希望程序明确请求接口,而不是路由所有流量,就像 一样curl --interface

curl --interface ppp0 ip.bsd-unix.net应该通过VPN发送,但不知何故,使用tcpdumpiftop我可以看到流量通过 eth0,即使源 IP 是 10.10.1.2。这是我的ip route show

default via 149.x.y.z dev eth0
10.10.1.1 dev ppp0  proto kernel  scope link  src 10.10.1.2
149.x.y.128/25 dev eth0  proto kernel  scope link  src 149.x.y.172

一些 IP 被隐藏了。第二个 IP 是 xl2tp 在启动时添加的,并创建了 ppp0 接口。149.etc 是我的 LAN,10.etc 是我的 VPN。


另外,当我 时ping -I ppp0 8.8.8.8,我可以看到 ppp0 活动,并且我收到了更高 ms 的回复,这表明他们正在通过 VPN。

答案1

我假设如果数据包的源 IP 与接口的源 IP 匹配,数据包就会使用该接口。如果这不是固有的 IP 行为,那么我的第二条路由就会实现这一点:src路由的这一部分对我来说只是个幌子。

那么,我的程序绑定到 ppp0 地址,该地址设置了它们的源 IP,对吗?我按照 @davidgo 所说的做了,并创建了一个单独的路由表...

echo 200 custom | sudo tee -a /etc/iproute2/rt_tables

...然后添加一条规则,对具有该源 IP 的数据包使用自定义表...

sudo ip rule add from 10.10.1.2 lookup custom

...并在自定义表中添加了一条规则,以使用 ppp0 来处理其获得的任何通过 ppp0 网关的流量。

sudo ip route add default via 10.10.1.1 dev ppp0 table custom

curl ip.bsd-unix.net给我我的家庭 IP 以及curl --interface ppp0 ip.bsd-unix.net我的 VPN 的远程 IP。它起作用了!

不过,我感兴趣的是为什么 ping 始终能正确地通过 ppp0。

相关内容