Задать вопрос
@inturned

Почему snat не работает в nftables, но работает в iptables?

Создано 2 виртуальных машины (сервер, клиент). Между ними настроен Wireguard VPN.
В nftables настроен snat, forwarding включен.
Пакеты ICMP Request уходят с клиента на сервер через VPN.
Но обратно пакеты (ICMP Reply) не возвращаются.
Конечная точка ICMP Reply пакетов - интерфейс enp0s3 на сервере.
На интерфейсе wg0 на сервере видны только Request пакеты, но не Reply.

Но, если выключить nftables и вместо него запустить ip6tables с таким же snat правилом,
то пакеты будут приходит и уходить без каких-либо проблем.
Если после этого отключить 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
Команда для сборки ISO образа клиента:
nix-build -A config.system.build.isoImage -I nixos-config=./wireguard_client_20.nix ./nixpkgs/nixos/default.nix
Nix файлы (там же nftables правила):
https://gist.github.com/MrSorcus/d6d8b8b6acff71536...

Команда для создания виртуальной машины (сервер):
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

Вывод команд ip a, ip -6 route, route -6, wg, sysctl -a, dmesg, lsmod.
https://gist.github.com/MrSorcus/1a8c9f5aacf895750... - сервер.
https://gist.github.com/MrSorcus/b7dc077249ca513ca... - клиент.

Выхлоп tcpdump с клиента. Пинг IPv6 адреса сайта (https://ipv6.net/)
https://gist.github.com/MrSorcus/03e716fba67c41197... - логи с интерфейсов enp0s3 & wg0 клиента и сервера.

Выхлоп /proc/net/nf_conntrack с nftables:
https://gist.github.com/MrSorcus/601170680ff644c52...

Выхлоп /proc/net/nf_conntrack с ip6tables:
https://gist.github.com/MrSorcus/e043101f98e787c8c...

После команды:
[root@nixos:~]# ip6tables -t nat -A POSTROUTING -o enp0s3 -j SNAT --to-source 2a01:4f8:xx:xx::10
Все работает. Т.е. IPv6 ресурсы успешно пингуются.
И продолжает работать, если отключить ip6tables и включить обратно nftables.
  • Вопрос задан
  • 1987 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@inturned Автор вопроса
Решено. marc.info/?l=netfilter-devel&m=150027256708621&w=2

You are probably lacking the reply NAT chain, which needs to be registered.
https://wiki.nftables.org/wiki-nftables/index.php/...
I'm updating right now the wiki to put this in bold.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы