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
したがって、WireguardサーバーのIPv6アドレスに対してpingを実行できますが、クライアントが2001:4860:4860::8888
IPv6 DNSサーバーとして構成されているGoogleのIPv6 DNSに対してpingを実行することはできません()。 IPv6設定の問題のようです。次のコマンドを使用して、サーバー側でipv6転送を有効にしました。
$ sudo sysctl -p /etc/sysctl.d/wireguard.conf
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
[編集]:明らかに、VMには別のIPv4インターフェイスとIPv6接続用の別のインターフェイスがあるので、これを行いました。ping6 ipv6.google.com -I eth0/1/2
そして、eth2にはIPv6接続しかないことがわかりました。そのため、サーバーでIPv6ルールを変更し、iptables
サーバーとクライアントの両方で-s fc00:xxx:xxx::/64 -o eth2
Wireguardを再起動した後、IPv6接続が機能しました。sudo systemctl stop wg-quick@wg0 && sudo systemctl start wg-quick@wg0
これが将来的に誰かに役立つことを願っています。