VPN 连接中断入站流量

VPN 连接中断入站流量

我有一台服务器(66.66.66.66)(当然不是真正的IP),我的家庭网络也有一个公共IP(202.202.122.123)。

当我使用 VPN(技术上是 OpenVPN,这应该没关系)作为代理从路由器(172.22.34.1)连接到服务器后,

然后我有一个像这样的主路由表: 202.202.122.1 dev ppp0 proto kernel scope link 172.22.34.0/24 dev br0 proto kernel scope link src 172.22.34.1 10.12.12.0/24 dev tap11 proto kernel scope link src 10.12.12.2 default via 202.202.122.1 dev ppp0 和一个像这样的 ov1 路由表: 172.22.34.0/24 dev br0 scope link 66.66.66.66/32 via 202.202.122.1 dev ppp0 0.0.0.0/1 via 10.12.12.1 dev tap11 128.0.0.0/1 via 10.12.12.1 dev tap11 和像这样的 ip 规则(我这样做是为了控制谁可以使用 VPN 隧道): 0: from all lookup local 32764: from 172.22.34.101 lookup ov1 32765: from 172.22.34.44 lookup ov1 32766: from all lookup main 32767: from all lookup default

IP 为 66.66.66.66 的服务器可以查看 home 上托管的 HTTPS 网站(202.202.122.123:443 DNAT 到 172.22.34.44:443),但是其他的没有(我的手机,在线端口检查工具等)。

然后,我在 172.22.34.44 上使用 tshark(wireshark CLI)跟踪了数据包,当我尝试从手机(使用蜂窝网络)查看网页时,甚至没有入站流量,但在我只需像服务器一样手动将手机的 IP 添加到 ov1 路由表(ip route add PHONEIP dev ppp0 table ov1),然后它就可以正常工作。

令我困惑的是我所知,路由表显示“目的地”而不是“源”: Kernel IP routing table 目的地....Gateway Genmask Flags Metric Ref Use Iface 202.202.122.1 * 255.255.255.255 UH 0 0 0 ppp0 172.22.34.0 * 255.255.255.0 U 0 0 0 br0 10.12.12.0 * 255.255.255.0 U 0 0 0 tap11 127.0.0.0 * 255.0.0.0 U 0 0 0 lo default 202.202.122.1 0.0.0.0 UG 0 0 0 ppp0 这应该只会影响出站流量,没想到入站流量也会消失。

哪里错了?

PS.1 当从 IP 规则中删除 172.22.34.44 以使其使用主路由表时,它也能正常工作。

PS.2.1ip route add 0.0.0.0/0 dev ppp0 table ov1没有效果,而
PS.2.2ip route add PHONEIP dev ppp0 table ov1有效果。(前面提到过)

PS.3 有什么文件推荐吗?

答案1

TL;DR:IP 路由是无状态的,路由表用于目的地,ip rule可以检查并标记/连接源。

通过echo 0 > /proc/sys/net/ipv4/conf/ppp0/rp_filter禁用反向路径检查,主要问题似乎得到了解决。路由表确实表示目的地,而不是源 IP。

对于那些想知道发生了什么的人,这里有一个简短的解释。

当来自 0.0.0.0/0(等于 ov1 路由表上的 0.0.0.0/1 + 128.0.0.0/1)的 IP 通过 ppp0(eth0)尝试连接 202.202.122.123:443 时,
路由器将对其进行 DNAT,
然后使用主路由,因为如 whichip rule命令所示(所有查找主)、
172.22.34.44(:443)响应,
但现在路由器将使用 ov1 表(172.22.34.44 lookup ov1),
尝试通过tap11将此包发送出去,
然后如果路由器上的反向路径检查处于打开状态,则
此包将被丢弃。

所以解决我的问题的最佳方法是在 172.22.34.44 上添加虚拟接口 172.22.34.45,然后 DNAT 到 172.22.34.45。使用 fwmark 并优先于 172.22.34.44 规则并禁用 RP_FILTER 或启用 SRC_VALID_MARK。

相关内容