Хорошо, поэтому при установке ванильного 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 не оценивается для пакетов, созданных локальными процессами.
Ваше первое правило будет работать при вводе пакетов из сетевого интерфейса (попробуйте выполнить пинг с другого компьютера).
Возможно, эта картинка поможет прояснить, как исследуется поток пакетов: