LINUX.ORG.RU
ФорумAdmin

iptables, NAT для wireguard

 ,


0

2

Привет. Есть у меня на сервере давний скрипт для настройки ВПН’а. Поднимается wg интерфейс, делается дефолт шлюзом и всё такое. Всё работает хорошо. За NAT отвечает эта строка:

# iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE

В общем полез я на досуге в этом рзбираться, она мне показалась странной, NAT должен настраиваться как-то так:

# iptables -t nat -A POSTROUTING -s 192.168.10/24 -o eth0 -j MASQUERADE

Но так не работает, я не понимаю почему, первое вообще кажется невалидным. Вот как я рассуждаю:

  1. Клиент идет на xxx.com через wg,
  2. На интерфейс eth0 сервера приходит пакет
  3. eth0->PREROUTING->routing->INPUT->wg обрабатывает пакет
  4. wg отправляет пакет на xxx.com
  5. wg->PREROUTIN->routing->FORWARD->POSTROUTING->eth0

Должно работать второе правило с выходным интерфейсом eth0. Через routing framework должны пройти пакеты с впн адресами и в конце на них накидывается NAT. В чем я ошибаюсь и почему непонятное бредовое правило #1 работает?



Последнее исправление: kvpfs_2 (всего исправлений: 2)
Ответ на: комментарий от futurama
# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

# iptables --list -v
Chain FORWARD (policy ACCEPT 369 packets, 110K bytes)
 pkts bytes target     prot opt in     out     source               destination         
 2550 1713K ACCEPT     all  --  wg0    any     anywhere             anywhere            
 3314  859K ACCEPT     all  --  any    wg0     anywhere             anywhere
kvpfs_2
() автор топика
Ответ на: комментарий от kvpfs_2

с клиента на адрес wg0 сервера ping без проблем идёт?

счётчик пакетов не маленький, куда-то они таки идут. смотри счетчик на правиле MASQUERADE

futurama ★★★★★
()
Последнее исправление: futurama (всего исправлений: 2)
Ответ на: комментарий от kvpfs_2

ну тогда надо отследить маршруты хождения пакетов, может где-то routing «не туда» или еще файервал (правила) не те

и MTU проверь

futurama ★★★★★
()
Последнее исправление: futurama (всего исправлений: 1)
Ответ на: комментарий от futurama

ну тогда надо отследить маршруты хождения пакетов

Как это можно сделать? Вот прям пришел пакет, PREROTING->routing->…->NAT или там дропнулось где показывается. Я вообще такого никогда не делал, хз что юзать

kvpfs_2
() автор топика
Ответ на: комментарий от kvpfs_2

на сервере

посмотреть

ip r или netstat -rn

tcpdump -i any host 8.8.8.8

на клиенте

ping 8.8.8.8

если у тебя более-менее дефолтные системы без влезания в потроха маршрутизации, этого хватит

еще все правила посмотреть iptables-save

futurama ★★★★★
()
Последнее исправление: futurama (всего исправлений: 1)
Ответ на: комментарий от futurama

Спасибо, я попробую. Но насколько я помню, tcpdump слишком высокоуровневый для таких штук. Я вообще подумаываю, может х.. с этим iptables’ом, покрутить netfilter. Может он адекватней. Тут (serverfault.com) товарищ трейсил правила iptables’а, должо быть что-то оно

kvpfs_2
() автор топика
Ответ на: комментарий от futurama

По счетчикам видно, что пакеты прихдят в ВГ, также доходят от него до интерфейса eth0 и отправляются на сервер, это подтверждает и wireshark.

Также wireshark показывает, что src ip у пакетов == ip eth0 интерфейса (как с NAT правилом, так и без него). Сервер не отвечает вообще, когда запросы идут от девайса в локалке (когда пакеты генерятся самим хостом, то всё норм).

Вообще для простоты немного упростил - у меня в инете вг сервер, в локалке вг клиент, остальные девайсы используют ВГ клиент как шлюз.

kvpfs_2
() автор топика
Последнее исправление: kvpfs_2 (всего исправлений: 1)
Ответ на: комментарий от futurama

Разобрался, я сам себя запутал. ВГ сервер и ВГ клиент-шлюз для других девайсов в локалке работают сильно иначе, зашёл на ВГ сервер, у меня там:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

серверу не нужен маскарад на входе в wg0, он сам отслеживает адреса при рукопожатиях. Зато он пропускает пакеты с адресом клиентов через весь этот network-routing framework (можно написать PBR привила например), клиент этого не делает.

Не могу сказать, что понял всё, но этого достаточно, чтобы более мене разобраться. Вот не понял я почему сервер не отвечает клиенту, который используется как шлюз, когда на входе в wg0 не стоит NAT. Ну да бог с ним

kvpfs_2
() автор топика
Последнее исправление: kvpfs_2 (всего исправлений: 1)