我有两个虚拟机(服务器、客户端)带有 wireguard vpn。当我尝试从客户端 ping 任何 IPv6 资源时,数据包不会返回到客户端。
Tcpdump 显示 enp0s3 接口(服务器)中的 ICMP 回复数据包,而不是 wg0(服务器上的 vpn 接口)。但如果禁用 nftables 并启动 ip6tables,则一切正常。完成此步骤后,我禁用 ip6tables 并启用 nftables... 一切继续正常...
软件版本:
NixOS: 17.09.git.ebaff59 (Hummingbird)
WireGuard: 0.0.20170706
Nftables: 0.7
使用以下命令构建 ISO 映像:
服务器:
nix-build -A config.system.build.isoImage -I nixos-config=./wireguard_server_10.nix ./nixpkgs/nixos/default.nix
客户:
nix-build -A config.system.build.isoImage -I nixos-config=./wireguard_client_20.nix ./nixpkgs/nixos/default.nix
这里是 nix 文件:
使用以下命令创建虚拟机:
服务器:
virt-install \
--name NixOSVS10 \
--ram 1024 \
--vcpus 1 \
--cdrom /tmp/nixos_10.iso \
--os-type linux \
--nodisk \
--network bridge=br0 \
--graphics vnc,password="ABCDEF",port=5910,listen=2a01:4f8:xx:xx::13 \
--autostart \
--noautoconsole
客户:
virt-install \
--name NixOSVS20 \
--ram 1024 \
--vcpus 1 \
--cdrom /tmp/nixos_20.iso \
--os-type linux \
--nodisk \
--network bridge=br0 \
--graphics vnc,password="ABCDEF",port=5920,listen=2a01:4f8:xx:xx::13 \
--autostart \
--noautoconsole
Nftables 规则:
服务器:
客户:
ip a、ip -6 route、route -6、wg、sysctl -a、dmesg、lsmod 的输出。
服务器:
客户:
来自客户端的 Tcpdump 日志。Ping IPv6 地址 2001:19f0:7400:87a2::64 (https://ipv6.net/)
/proc/net/nf_conntrack 的输出:
使用 nftables:
使用 ip6tables:
Snat 在 nftables 中无法正常工作。但按照以下步骤操作即可:
[root@nixos:~]# systemctl stop nftables
[root@nixos:~]# ip6tables -t nat -A POSTROUTING -o enp0s3 -j SNAT --to-source 2a01:4f8:xx:xx::10
答案1
解决了。 http://marc.info/?l=netfilter-devel&m=150027256708621&w=2
您可能缺少需要注册的回复 NAT 链。
https://wiki.nftables.org/wiki-nftables/index.php/Performing_Network_Address_Translation_(NAT)
我现在正在更新 wiki,将其以粗体显示。