LINUX.ORG.RU
решено ФорумAdmin

«iptables -t nat -j LOG» работает на fedora, но не на ubuntu

 , ,


1

1

Уже несколько дней «бьюсь головой в непробиваемую стену», пытаясь заставить iptables-таблицу NAT работать на ubuntu. Выяснил следующее - если:

  • Поставить в виртуалку чистый дистрибутив
  • Прописать sudo iptables -t nat -A PREROUTING -j LOG
  • Сделать nc -l 1111 и nc <ip> 1111 с хоста и поотправлять сообщения

То в dmesg у ubuntu не появится ничего (что на 24.04, что на 22.04), но на fedora 43 сообщения о пакетах появляются. Хотя вроде как пакеты должны маршрутизироваться одинаково независимо от дистрибутива. Есть ли у кого-то догадки, почему это может так происходить, и как заставить ubuntu не игнорить таблицу nat? netcat нормально ловит сообщения на обоих

UPD: оказывается, таблица NAT в убунте не будет работать, пока в нее не добавлено хотя бы одно «настоящее» правило (типа -j REDIRECT). Добавить iptables -t NAT -A PREROUTING -j ACCEPT НЕ достаточно. В fedora это, видимо, пофиксили



Последнее исправление: fox1432 (всего исправлений: 3)
Ответ на: комментарий от targitaj

Насколько я понимаю, об PREROUTING должен стукаться любой первый пакет, приходящий извне. Так как связь с хостом держится через адаптер, пакеты оттуда вполне внешние. Если бы они не проходили хук PREROUTING, нельзя было бы в принципе настроить DNAT из внешней сети во внутреннюю - плюс, не работает вообще вся таблица nat (POSTROUTING, INPUT, OUTPUT - нигде нет сообщений, есть только на других таблицах). И опять же, на fedora все работает

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

Насколько я понимаю, об PREROUTING должен стукаться любой первый пакет, приходящий извне

для входящих соединений. Для установленных соединений другие механизмы (но это не точно, давно не трогал).

targitaj ★★★★★
()
Последнее исправление: targitaj (всего исправлений: 1)

Там может Connection Tracking мешать. Не помню точно механизм, но вроде в NAT таблицу попадают только первые пакеты до установления соединения. Потом они уже Established или Related и Tracking механизм их проводит мимо. Если тебе надо просто логировать - логичнее было бы использовать RAW таблицу и её PREROUTING. Туда должно валиться всё что приходит до любой обработки.

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

Да, по идее после установления соединения там работает conntrack. Но беда-то в том, что мне не логировать надо, а делать DNAT, и именно при установке соединения. Просто когда у меня это не получилось, я стал копаться, почему - и обнаружил, что вся таблица nat на убунте почему-то мертвая. Хотя iptables там встроенный и все из коробки (точнее, из live cd). Таблица RAW работает как надо - там пакеты есть

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

Точнее, скорее всего, это я что-то не понимаю в настройке этого чуда (ну не может же в версиях за несколько лет не работать) - но вот что именно, найти никак не могу

fox1432
() автор топика

оказывается, таблица NAT в убунте не будет работать, пока в нее не добавлено хотя бы одно правило -j REDIRECT. Добавить iptables -t NAT -A PREROUTING -j ACCEPT НЕ достаточно. В fedora это, видимо, пофиксили. Оригинальный ответ - 1562825 на askubuntu

fox1432
() автор топика