服务器上 tcp 端口的 udp2raw 路由问题导致 WireGuard

服务器上 tcp 端口的 udp2raw 路由问题导致 WireGuard

我已成功使用 udp2raw 通过 TCP 连接到 wireguard。

摘要如下:

  My local MAC               Server Via TCP             Wireguard On the Server
127.0.0.1:3333 (UDP) <---> 52.55.198.100:70 (TCP) <----> 52.55.198.100:64731 (UDP)

现在我连接到 127.0.0.1:3333(通过 MacOS 上的 wireguard 客户端),它可以工作,但并不完全是。

问题是,它一开始不起作用,我从 allowedips 中排除了服务器的 ip。

为此我使用了:

https://www.procustodibus.com/blog/2021/03/wireguard-allowedips-calculator/

对于允许的 IP,我有:

::/0, 1.0.0.0/8, 2.0.0.0/8, 3.0.0.0/8, 4.0.0.0/6, 8.0.0.0/7, 11.0.0.0/8, 12.0.0.0/6, 16.0.0.0/4, 32.0.0.0/3, 64.0.0.0/2, 128.0.0.0/3, 160.0.0.0/5, 168.0.0.0/6, 172.0.0.0/12, 172.32.0.0/11, 172.64.0.0/10, 172.128.0.0/9, 173.0.0.0/8, 174.0.0.0/7, 176.0.0.0/4, 192.0.0.0/9, 192.128.0.0/11, 192.160.0.0/13, 192.169.0.0/16, 192.170.0.0/15, 192.172.0.0/14, 192.176.0.0/12, 192.192.0.0/10, 193.0.0.0/8, 194.0.0.0/7, 196.0.0.0/6, 200.0.0.0/5, 208.0.0.0/4, 1.1.1.1/32, 1.0.0.1/32

这基本上是排除本地 IP 的默认设置。

Disallowed IPs添加了 52.55.198.100,最终结果如下:

0.0.0.0/3, 32.0.0.0/4, 48.0.0.0/6, 52.0.0.0/11, 52.32.0.0/12, 52.48.0.0/14, 52.52.0.0/15, 52.54.0.0/16, 52.55.0.0/17, 52.55.128.0/18, 52.55.192.0/22, 52.55.196.0/23, 52.55.198.0/26, 52.55.198.64/27, 52.55.198.96/30, 52.55.198.101/32, 52.55.198.102/31, 52.55.198.104/29, 52.55.198.112/28, 52.55.198.128/25, 52.55.199.0/24, 52.55.200.0/21, 52.55.208.0/20, 52.55.224.0/19, 52.56.0.0/13, 52.64.0.0/10, 52.128.0.0/9, 53.0.0.0/8, 54.0.0.0/7, 56.0.0.0/5, 64.0.0.0/2, 128.0.0.0/1, ::/0

以下是我的客户的全部配置:

[Interface]
PrivateKey = Gsss
Address = 10.66.66.19/32, fd42:42:42::19/128
DNS = 1.1.1.1, 1.0.0.1
MTU = 1280

[Peer]
PublicKey = Lsss
PresharedKey = fsss
AllowedIPs = 0.0.0.0/3, 32.0.0.0/4, 48.0.0.0/6, 52.0.0.0/11, 52.32.0.0/12, 52.48.0.0/14, 52.52.0.0/15, 52.54.0.0/16, 52.55.0.0/17, 52.55.128.0/18, 52.55.192.0/22, 52.55.196.0/23, 52.55.198.0/26, 52.55.198.64/27, 52.55.198.96/30, 52.55.198.101/32, 52.55.198.102/31, 52.55.198.104/29, 52.55.198.112/28, 52.55.198.128/25, 52.55.199.0/24, 52.55.200.0/21, 52.55.208.0/20, 52.55.224.0/19, 52.56.0.0/13, 52.64.0.0/10, 52.128.0.0/9, 53.0.0.0/8, 54.0.0.0/7, 56.0.0.0/5, 64.0.0.0/2, 128.0.0.0/1, ::/0
Endpoint = 127.0.0.1:3333

有用。

问题

好吧,一切正常,除了当 vpn 开启时我无法再访问我的服务器,ssh 不起作用,服务器上的所有网站都无法加载,基本上,只要我打开 VPN,我就无法再从服务器访问任何东西。

有趣的是,如果我连接到 ssh,然后打开 vpn,它不会断开连接,我可以继续使用它,但我无法打开新的 ssh,我想这就是连接的方式吧? tcp 端口 70 在运行之前已打开,这就是它仍然有效的原因。

我想我可能应该添加一条路由,以便只52.55.198.100:70排除服务器上的所有其他内容。(以某种方式将这个地址保留在我自己的接口 (eth0) 上,其他所有内容照常通过 (wg0))

我有两个客户端,一个是 MacOS,另一个是 Ubuntu,我的主要系统是 MacOS,但我希望有一个也可以在 Ubuntu 上运行的解决方案。

如果可以从服务器端解决这个问题,我也会接受!实际上我更喜欢这样,这样我就不必处理两个客户端,只需处理一个服务器。

以下是我的服务器(csf)上的防火墙规则

#!/bin/bash
#/usr/sbin/iptables -t nat -A POSTROUTING -o ens192 -s 10.66.66.1/24 -j MASQUERADE

/usr/sbin/iptables -t nat -A POSTROUTING -o ens192 -j MASQUERADE
/usr/sbin/iptables -A INPUT -i wg0 -j ACCEPT
/usr/sbin/iptables -A FORWARD -i wg0 -j ACCEPT
/usr/sbin/iptables -A FORWARD -o wg0 -j ACCEPT
/usr/sbin/iptables -A FORWARD -i wg0 -o ens192 -m state --state RELATED,ESTABLISHED -j ACCEPT
/usr/sbin/iptables -A FORWARD -i ens192 -o wg0 -m state --state RELATED,ESTABLISHED -j ACCEPT

- - 更新

我认为答案就在这里: https://www.procustodibus.com/blog/2022/02/wireguard-over-tcp/#point-to-internet

但由于我现在只能访问 MacOS,因此无法对其进行测试。

# route public IP of Endpoint B through LAN gateway
PreUp = ip route add 203.0.113.2 via 192.168.1.1 dev eth0
PostDown = ip route del 203.0.113.2 via 192.168.1.1 dev eth0

对于 MacOS 来说,这些 ip 命令的替代方案是什么?


我尝试了这样的事情:

route add -host 54.81.143.201 -interface en0

感谢https://superuser.com/a/756146/1006908 它并不能解决问题,我只需要端口 70(tcp)位于接口 en0 上,但它可以使一切都在其上。

解决方法:

如果我添加路由,连接到 Wireguard,然后删除路由,包括 ssh 在内的所有内容,网站都可以为我工作。

但它显然是不合理的,并且对 Ubuntu 根本不起作用。

答案1

您可以通过在配置中添加192.168.1.0/24(或类似方式)来简单地公开主机网络AllowedIPs客户

然后,您就可以使用私有 IP 毫无问题地连接到您的服务器和主机网络的其余部分。请注意,必须在服务器中启用流量转发:

PostUp = iptables -A FORWARD -i %i -j ACCEPT
PostUP = iptables -A FORWARD -o %i -j ACCEPT
PostUP = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostUP = ip6tables -A FORWARD -i %i -j ACCEPT
PostUP = ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT
PostDown = iptables -D FORWARD -o %i -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
PostDown = ip6tables -D FORWARD -i %i -j ACCEPT
PostDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

相关内容