SNAT DNAT в iptables
Задача: Полученный UDP-пакет на 192.168.100.101 на порт 4444 (интерфейс eth0) перенаправить на 192.168.1.7, порт 4444 c ip адреса 192.168.1.101 интерфейса eth1. Сделать это с испльзованием iptables (а именно в таблице nat цепочки PREROUTING и POSTROUTING).
Для этого я делаю следующее:
- на одном интерфейсе выставляю 192.168.100.101/24 (eth0), на втором 192.168.1.101/24 (eth1)
- добавляем LOG в цепочки, чтобы иметь хоть какой-то контроль прохождения пакетов. Нас интересуют цепочки PREROUTING и POSTROUTING в таблице nat, INPUT и FORWARD в таблице filter, ну и PREROUTING с FORWARD таблицы mangle
Сейчас (без использования DNAT и SNAT), получив UDP-пакет на порт 4444, мы увидим (в DMESG), что он прошёл по следующему пути: PREROUTING(mangle)->PREROUTING(nat)->INPUT(filter)->... и так до локального процесса. здесь все верно.
Теперь добавим DNAT:
sudo iptables -t nat -A PREROUTING -d 192.168.100.101 -p udp --dport 4444 --to-destination 192.168.1.7:4444
сейчас при принятии пакета на порт 44444 следующая цепочка: PREROUTING(mangle)->PREROUTING(nat)->???? теперь не заходит в INPUT(filter) что верно, но и не заходит FORWARD(mangle) и FORWARD(filter). ПОЧЕМУ? Естественно пакет не был доставлен на 192.168.1.7
разрешим отправку данных попавших на интерфейс eth0 FORWARD
sudo iptables -A FORWARD -i eth0 -d 192.168.100.101 -p udp --dport 4444 -j ACCEPT
подменим IP источника UDP-пакета
sudo iptables -t nat -A POSTROUTING -p udp --dport 4444 -j SNAT --to-source 192.168.1.101:4455
но ситуацию это не изменит: PREROUTING(mangle)->PREROUTING(nat)->???? я не попадаю в цепочку FORWARD таблиц mangle и filter. Почему? В идеале должно же быть (учитывая логи которые написаны) PREROUTING(mangle)->PREROUTING(nat)->FORWARD(mangle)->FORWARD(filter)->POSTROUTING(nat) так? или для маршрутицации нужно что-то разрешить еще или доустановить? ufw отключен. Линуха работает в виртуалке с двумя виртуальными интерфейсами в режиме моста.
Спасибо