Исходящие пакеты, не транзитные, именно локально созданные, браузером, в таблице nat перенаправляются в локальный прокси 127.0.0.1:8080 и локальный DNS 127.0.0.1:53:
iptables -t nat -A OUTPUT ! -o lo -p udp --dport 53 -m udp -j REDIRECT --to-ports 53
iptables -t nat -A OUTPUT ! -o lo -p tcp -j REDIRECT --to-ports 8080
В логах вижу (логгирует из filter, OUTPUT; это уже после обработки в таблице nat), что идёт пакет на 127.0.0.1:8080 и через eth0 вместо петли:
IN= OUT=eth0 SRC=192.168.0.2 DST=127.0.0.1 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=49221 DF PROTO=TCP SPT=36551 DPT=8080 WINDOW=2641 RES=0x00 ACK FIN URGP=0
IN= OUT=eth0 SRC=192.168.0.2 DST=127.0.0.1 LEN=89 TOS=0x00 PREC=0x00 TTL=64 ID=34996 DF PROTO=TCP SPT=59256 DPT=8080 WINDOW=2641 RES=0x00 ACK PSH URGP=0
IN= OUT=eth0 SRC=192.168.0.2 DST=127.0.0.1 LEN=58 TOS=0x00 PREC=0x00 TTL=64 ID=40181 PROTO=UDP SPT=35527 DPT=53 LEN=38
Пакет попадает в прокси, оттуда уже идёт наружу, всё работает.
Как объяснить, что интерфейс eth0?
Для ясности, вот диаграмма, как пакеты идут по цепям:
http://kray.info/images/KernelPacketTravelingDiagram.png
Выходит, последовательность такая: пакет с внешним адресом был направлен в eth0,
в таблице nat был переписан адрес и порт назначения, но не менялся интерфейс,
в таблице filter пакет был записан в журнал,
где-то после снова выполнено направление в петлю, вместо eth0.
Где, когда происходит перенаправление в loopback? За пределами Netfilter, при обработке согласно таблице маршрутов?
А имеет смысл в iptables анализировать интерфейс, если известно, что имел место NAT?
Я правильно понял последовательность?