Linux OpenVPN Tap 路由适用于单个 IP,但并不适用于所有流量

Linux OpenVPN Tap 路由适用于单个 IP,但并不适用于所有流量

我想在假期旅行之前设置家庭 VPN。

我有一个使用 TAP 设置的 OpenVPN 服务器,该服务器运行成功,并且我能够使用客户端连接到它。

然而,我在通过它路由客户端流量时遇到了问题。

这个redirect-gateway选项对我来说不起作用。现在,我放弃了这个选项,并尝试手动设置我的路线。

我的方法是首先针对 tap 接口运行 DHCP 客户端 (dhcpcd),然后尝试手动添加路由。

# dhcpcd tap0
dhcpcd-9.4.1 starting
...
tap0: rebinding lease of 192.168.1.137
tap0: probing address 192.168.1.137/24
tap0: leased 192.168.1.137 for 86400 seconds
tap0: adding route to 192.168.1.0/24
forked to background, child pid 11185

DHCP 客户端设置的路由对于内部 IP 来说运行良好。我能够 ping/ssh 家用网络上的计算机。我正在通过有线蜂窝连接进行测试。

# ip route
default via 192.168.149.13 dev wlan0 proto dhcp src 192.168.149.193 metric 600
192.168.1.0/24 dev tap0 proto dhcp scope link src 192.168.1.137 metric 1052
192.168.149.0/24 dev wlan0 proto kernel scope link src 192.168.149.193 metric 600

# ping 192.168.1.136 # another IP on my network
PING 192.168.1.136 (192.168.1.136) 56(84) bytes of data.
64 bytes from 192.168.1.136: icmp_seq=1 ttl=64 time=104 ms
64 bytes from 192.168.1.136: icmp_seq=2 ttl=64 time=83.5 ms
...

如果我使用家庭网络的网关 IP 手动添加互联网主机的 IP 路由,我就可以通过 OpenVPN 访问这些主机。

(请注意,175.55.55.55 是我的蜂窝网络连接,72.33.33.33 是我的家庭 IP)

# curl -4 https://icanhazip.com
175.55.55.55

# host -t a icanhazip.com
icanhazip.com has address 104.18.115.97
icanhazip.com has address 104.18.114.97

# ip route add 104.18.115.97 via 192.168.1.1
# ip route add 104.18.114.97 via 192.168.1.1

# curl -4 https://icanhazip.com
72.33.33.33

问题是我不知道如何将其推广到所有流量。

我尝试添加 catchall 路由来通过 VPN 传输流量:

# ip route add 0.0.0.0/1 via 192.168.1.1 dev tap0
# ip route add 128.0.0.0/1 via 192.168.1.1 dev tap0

当我再次尝试访问 icanhazip.com 时,它超时了,并且 OpenVPN 客户端日志显示:

2022-12-15 15:27:38 us=127602 Recursive routing detected, drop tun packet to [AF_INET]72.33.33.33:2445
2022-12-15 15:27:38 us=122602 Recursive routing detected, drop tun packet to [AF_INET]72.33.33.33:2445
2022-12-15 15:27:38 us=147702 Recursive routing detected, drop tun packet to [AF_INET]72.33.33.33:2445

如果有帮助的话,我可以提供来自客户端(或服务器)的日志或配置,但我认为这可能更多的是一个路由问题。

答案1

哦,真是的。

@TomYan 帮我解决了这个问题。

OpenVPN 客户端通过该设备与 OpenVPN 服务器进行通信wlan0

当我将wlan0路由覆盖为默认路由(或有效默认路由,使用0.0.0.0/1128.0.0.0/1地址)并尝试通过 vpn 设备发送所有流量时tap0,其中也包括 OpenVPN 流量。

“递归路由”消息确实是正确的。

如果我使用的是 TCP,我可能早就注意到了这个问题,因为当我把这些路由放在那里时连接就会超时。

解决方案是明确添加单个地址路由,允许 OpenVPN 客户端仍然到达服务器。

因此,DHCP 之后的路由立即具有:

# ip route
default via 192.168.149.13 dev wlan0 proto dhcp src 192.168.149.193 metric 600
192.168.1.0/24 dev tap0 proto dhcp scope link src 192.168.1.137 metric 1052
192.168.149.0/24 dev wlan0 proto kernel scope link src 192.168.149.193 metric 600

我的 OpenVPN 服务器地址是72.33.33.33,因此我将通过上面默认提到的 wlan0 网关手动添加一条到它的路由:

# ip route add 72.33.33.33 via 192.168.149.13 dev wlan0

现在我的两条万能路线就可以起作用了:

# ip route add 0.0.0.0/1 via 192.168.1.1 dev tap0
# ip route add 128.0.0.0/1 via 192.168.1.1 dev tap0
# curl -4 https://icanhazip.com
73.33.33.33

相关内容