Wireguard 握手成功但无法访问互联网

Wireguard 握手成功但无法访问互联网

首先:这不是重复的。除了 OpenVPN 或 IPSec,我尝试了所有方法。我收到了客户端和服务器之间的握手,客户端之间的 SSH 和 Ping 工作正常,但我无法访问全球互联网,甚至无法访问服务器的公共 IP。我的配置只是通常的密钥、端点,我完全遵循了 Linode 指南。我的客户端是 openSUSE,但我的服务器是 ubuntu,我假设这是瓶颈。

答案1

这正是我遇到的情况。您的服务器有公共 IP 吗?还是位于 NAT 后面?如果位于 NAT 后面,则Linode 指南中的PostUpPostDowniptables 命令不适用。

尝试将以下内容添加到您的服务器配置文件中,并更改eth0为您的计算机所调用的内容:

PreUp = iptables -t nat -A POSTROUTING -j MASQUERADE -o eth0
PreDown = iptables -t nat -D POSTROUTING -j MASQUERADE -o eth0

来源:https://unix.stackexchange.com/questions/530790/wireguard-not-routing-traffic-from-client-to-other-servers-on-the-network

示例配置

以下是一个示例配置,其中路由器位于 10.0.1.1(正常网络),10.0.0.x 是新的 WireGuard 网络,服务器配置为 10.0.0.1,客户端配置为 10.0.0.2。使用的端口为 51820,默认网络接口为 eth0。所有流量都通过 WireGuard 路由,但不会停留在 WireGuard 子网内。客户端可以访问服务器的本地网络(10.0.1.x)和一般互联网。不要忘记将 51820 端口从路由器转发到服务器,并在服务器上启用 ipv4 转发(# sysctl -w net.ipv4.ip_forward=1

服务器配置

[Interface]
Address = 10.0.0.1/24
PrivateKey = YOUR_SEVER_PRIVATE_KEY
ListenPort = 51820
PreUp = iptables --table nat --append POSTROUTING --jump MASQUERADE --out-interface eth0
PreDown = iptables --table nat --delete POSTROUTING --jump MASQUERADE --out-interface eth0

[Peer]
PublicKey = YOUR_CLIENT_PUBLIC_KEY
AllowedIPs = 10.0.0.2/32

客户端配置

[Interface]
Address = 10.0.0.2/24
DNS = 10.0.1.1
PrivateKey = YOUR_CLIENT_PRIVATE_KEY
ListenPort = 51820

[Peer]
PublicKey = YOUR_SERVER_PUBLIC_KEY
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = YOUR.DYNAMIC_DNS.COM:51820

答案2

根据您的云提供商,您可能需要更改 MTU,Wireguard 默认 MTU 为 1420,而 Google Cloud MTU 为 1460。因此,如果您使用 Google Cloud,通过添加到MTU = 1460客户端和服务器的接口将 MTU 设置为 1460 将解决问题。

你可以查看我的Github 上的完整教程如果有任何问题。

相关内容