我已经在运行于 Ubuntu 和几个客户端之上的虚拟机上设置了 Wireguard 服务器。我还在同一虚拟机上安装了 Pi-Hole,并使用公共 IP 地址在客户端上进行 DNS 解析配置。 IPv4 工作得很好,但 IPv6 却不行。这是我的服务器配置:
# Server Configuration
[Interface]
Address = 172.16.0.1/27, fc00:xxx:xxx::1/64
PrivateKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
ListenPort = 51820
PreUp = iptables -t nat -A POSTROUTING -s 172.16.0.0/27 -o eth0 -j MASQUERADE; ip6tables -t nat -A POSTROUTING -s fc00:xxx:xxx::/64 -o eth0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -s 172.16.0.0/27 -o eth0 -j MASQUERADE; ip6tables -t nat -D POSTROUTING -s fc00:xxx:xxx::/64 -o eth0 -j MASQUERADE
# Laptop 1
[Peer]
PublicKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
AllowedIPs = 172.16.0.2/32, fc00:xxx:xxx::2/128
# Phone
[Peer]
PublicKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
AllowedIPs = 172.16.0.3/32, fc00:xxx:xxx::3/128
# Laptop 2
[Peer]
PublicKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
AllowedIPs = 172.16.0.4/32, fc00:xxx:xxx::4/128
这是我客户的配置:
[Interface]
PrivateKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Address = 172.16.0.4/27, fc00:xxx:xxx::4/64
DNS = <VM_Public_IP>, 2001:4860:4860::8888
[Peer]
PublicKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Endpoint = <VM_Public_IP>:51820
AllowedIPs = 0.0.0.0/0, ::/0
因此,我可以 ping 到 Wireguard 服务器的 IPv6 地址,但不能 ping 到 Google 的 IPv6 DNS,后者2001:4860:4860::8888
在客户端上配置为 IPv6 DNS 服务器 ( )。我猜这是 IPv6 配置的问题。我已经使用以下命令在服务器端启用了 ipv6 转发:
$ sudo sysctl -p /etc/sysctl.d/wireguard.conf
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
[编辑]:显然虚拟机有一个单独的 IPv4 接口和另一个用于 IPv6 连接的接口,所以我这样做了:ping6 ipv6.google.com -I eth0/1/2
并发现只有在 eth2 上才有 IPv6 连接。因此,我在服务器上更改了iptables
IPv6 规则,并在服务器和客户端上-s fc00:xxx:xxx::/64 -o eth2
重新启动了 Wireguard ,之后我就拥有了可用的 IPv6 连接。sudo systemctl stop wg-quick@wg0 && sudo systemctl start wg-quick@wg0
我希望这对将来的人有所帮助。