Назад | Перейти на главную страницу

iptables nat table не меняет IP назначения в PREROUTING?

Хорошо, поэтому при установке ванильного Ubuntu 14.04.2 я запускаю следующие команды:

sudo bash -c 'echo 1 > "/proc/sys/net/ipv4/ip_forward"'
sudo iptables -t nat -A PREROUTING -d 192.168.100.1 -j DNAT --to-destination 10.196.106.230
sudo tcpdump -i wlan0 icmp and icmp[icmptype]=icmp-echo -n

Тогда я пинг 192.168.100.1 с другого терминала. Но я вижу tcpdump показывая мне это:

01:46:37.536354 IP 10.196.100.76 > 192.168.100.1: ICMP echo request, id 6635, seq 1, length 64

Взаимодействие с другими людьми

Однако, если я сброшу таблицу нат и запустил эта команда вместо:

sudo iptables -t nat -A OUTPUT -d 192.168.100.1 -j DNAT --to-destination 10.196.106.230

Затем, tcpdump дает это:

01:46:53.168639 IP 10.196.100.76 > 10.196.106.230: ICMP echo request, id 6638, seq 1, length 64

(Пинг прошел успешно, с другой машины возвращается понг.)

Из многочисленные учебники онлайн, я бы ожидал, что IP-адрес назначения будет изменен даже в цепочке PREROUTING, верно? Или мне что-то не хватает?

Цепочка PREROUTING не оценивается для пакетов, созданных локальными процессами.

Ваше первое правило будет работать при вводе пакетов из сетевого интерфейса (попробуйте выполнить пинг с другого компьютера).

Возможно, эта картинка поможет прояснить, как исследуется поток пакетов:

источник: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Security_Guide/sect-Security_Guide-IPTables.html