首先:这不是重复的。除了 OpenVPN 或 IPSec,我尝试了所有方法。我收到了客户端和服务器之间的握手,客户端之间的 SSH 和 Ping 工作正常,但我无法访问全球互联网,甚至无法访问服务器的公共 IP。我的配置只是通常的密钥、端点,我完全遵循了 Linode 指南。我的客户端是 openSUSE,但我的服务器是 ubuntu,我假设这是瓶颈。
答案1
这正是我遇到的情况。您的服务器有公共 IP 吗?还是位于 NAT 后面?如果位于 NAT 后面,则Linode 指南中的PostUp
和PostDown
iptables 命令不适用。
尝试将以下内容添加到您的服务器配置文件中,并更改eth0
为您的计算机所调用的内容:
PreUp = iptables -t nat -A POSTROUTING -j MASQUERADE -o eth0
PreDown = iptables -t nat -D POSTROUTING -j MASQUERADE -o eth0
示例配置
以下是一个示例配置,其中路由器位于 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 上的完整教程如果有任何问题。