我有一台安装了 Ubuntu 22.04 和 wireguard 服务器的云服务器,以及一台安装了 WireGuard 应用程序的 MacOS 设备。该应用程序显示活动连接,但 IP 地址没有更改,我也没有在服务器上看到活动连接。我的配置文件如下所示:
/etc/wireguard/wg0.conf
[Interface]
Address = 10.8.0.1/24, cce7:c18e:3cd5::2/64
ListenPort = 41194
SaveConfig = true
PostUp = ufw route allow in on wg0 out on ens192
PostUp = iptables -t nat -I POSTROUTING -o ens192 -j MASQUERADE
PostUp = ip6tables -t nat -I POSTROUTING -o ens192 -j MASQUERADE
PreDown = ufw route delete allow in on wg0 out on ens192
PreDown = iptables -t nat -D POSTROUTING -o ens192 -j MASQUERADE
PreDown = ip6tables -t nat -D POSTROUTING -o ens192 -j MASQUERADE
PrivateKey = <server_private_key>
我的对等配置如下所示:
[Interface]
PrivateKey = <peer_private_key>
Address = 10.8.0.2/24, cce7:c18e:3cd5::2/64
[Peer]
PublicKey = <server_public_key>
AllowedIPs = 10.8.0.0/24, cce7:c18e:3cd5::/64
Endpoint = dunno.com:41194
防火墙已打开 UDP 端口 41194,并且 wg0 配置中的规则也已到位:
41194/udp ALLOW Anywhere
41194/udp (v6) ALLOW Anywhere (v6)
Anywhere on ens192 ALLOW FWD Anywhere on wg0
Anywhere (v6) on ens192 ALLOW FWD Anywhere (v6) on wg0
WireGuard 服务器正在运行:
● [email protected] - WireGuard via wg-quick(8) for wg0
Loaded: loaded (/lib/systemd/system/[email protected]; enabled; vendor preset: enabled)
Active: active (exited) since Sat 2023-12-16 11:22:50 UTC; 8s ago
Docs: man:wg-quick(8)
man:wg(8)
https://www.wireguard.com/
https://www.wireguard.com/quickstart/
https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8
Process: 5925 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS)
Main PID: 5925 (code=exited, status=0/SUCCESS)
CPU: 239ms
Dec 16 11:22:50 localhost wg-quick[5925]: [#] wg setconf wg0 /dev/fd/63
Dec 16 11:22:50 localhost wg-quick[5925]: [#] ip -4 address add 10.8.0.1/24 dev wg0
Dec 16 11:22:50 localhost wg-quick[5925]: [#] ip -6 address add cce7:c18e:3cd5::2/64 dev wg0
Dec 16 11:22:50 localhost wg-quick[5925]: [#] ip link set mtu 1420 up dev wg0
Dec 16 11:22:50 localhost wg-quick[5925]: [#] ufw route allow in on wg0 out on ens192
Dec 16 11:22:50 localhost wg-quick[5956]: Rule added
Dec 16 11:22:50 localhost wg-quick[5956]: Rule added (v6)
Dec 16 11:22:50 localhost wg-quick[5925]: [#] iptables -t nat -I POSTROUTING -o ens192 -j MASQUERADE
Dec 16 11:22:50 localhost wg-quick[5925]: [#] ip6tables -t nat -I POSTROUTING -o ens192 -j MASQUERADE
Dec 16 11:22:50 localhost systemd[1]: Finished WireGuard via wg-quick(8) for wg0.
我可以激活对等连接,并且应用程序显示绿灯,但是当调用类似https://whatismyipaddress.com/我仍然可以看到我的本地 IP。此外,服务器上的 wg 没有显示任何活动连接:
#wg show wg0
interface: wg0
public key: <public_server_key>
private key: (hidden)
listening port: 41194
我究竟做错了什么?
编辑
在阅读@Michalng 的评论后(感谢!)我明白了,它AllowedIPs
定义了在我的对等点上调用的 URL,并且应该通过 WG 服务器进行路由。因此,我将该设置更改为::/0, 0.0.0.0.0/0
建议的设置,现在我看到数据通过连接传递到服务器。并且,如上所述,我确实收到了 DNS 错误。因此,我将我的 openWRT 路由器的 IP 添加到对等点的配置中:
[Interface]
....
DNS = 192.168.200.1
当调用nslookup google.com
这个功能在我的对等终端上运行良好时,但在浏览器中我无法打开同一页面 - 它只是无休止地加载。
我在 MacOS 上使用 WireGuard 应用程序,它显示数据已发送:X MB,但在服务器上运行 wg show all 仅显示 wg0 接口。
那么,似乎缺少了一点点。那是什么呢?
答案1
您的 WireGuard 设置未完成。Ubuntu 主机缺少 macOS 主机的对等配置。
要在两个主机之间设置 WireGuard,您需要:
- 在主机 A 上
- 主机 A 的私钥
- 主机A的监听端口
- 主机 B 的公钥
- 主机 B 的 IP 地址和/或子网(“允许的 IP”)
- 在主机 B 上
- 主机 B 的私钥
- 主机B的监听端口
- 主机 A 的公钥
- 主机 A 的 IP 地址和/或子网
所有这些都必须事先交换。要建立两台主机之间的关联,至少其中一台必须能够访问另一台的 UDP 监听端口。这个设置过程可能很麻烦,这就是 Tailscale 存在的原因。
您必须添加对等体使用 macOS 主机的公钥在 Ubuntu 主机上输入。不过,您不需要添加端点。如果一切顺利,双方都会将对方列为对等方。鉴于您正在使用wg-quick,它可能看起来像这样:
[Peer]
PublicKey = R6gGtDkUJCfVYXpRrem1TxlLYGzT/PrfZNp5Cp669Ro=
AllowedIPs = 10.8.0.2/32, cce7:c18e:3cd5::2/128
(前缀长度允许IP必须适当选择:“公路战士”同伴通常会有/32(或 _/128)。WireGuard 使用此信息将流量路由到对等点。在对等体,接口仍将配置“真实”前缀长度。)
然后,在成功交换流量后,您还将wg
在 Ubuntu 主机上看到类似这样的内容:
peer: R6gGtDkUJCfVYXpRrem1TxlLYGzT/PrfZNp5Cp669Ro=
endpoint: 203.0.113.54:51820
allowed ips: 10.8.0.2/32, cce7:c18e:3cd5::2/128
latest handshake: 38 seconds ago
transfer: 46.34 MiB received, 995.54 MiB sent
如果发起关联的主机(在您的情况下为 macOS 主机)位于 NAT 后面,您可能需要在那里启用保活数据包。