URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 93563
[ Назад ]

Исходное сообщение
"Растолкуйте про роутинг - к 127.0.0.1 записан через eth0."

Отправлено Artif , 15-Июл-12 22:36 
Исходящие пакеты, не транзитные, именно локально созданные, браузером, в таблице 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?

Я правильно понял последовательность?


Содержание

Сообщения в этом обсуждении
"Растолкуйте про роутинг - к 127.0.0.1 записан через eth0."
Отправлено Andrey Mitrofanov , 16-Июл-12 12:50 
> iptables -t nat -A OUTPUT ! -o lo -p udp --dport 53 -m udp -j REDIRECT --to-ports 53

(1)

> Выходит, последовательность такая: пакет с внешним адресом был направлен в eth0,
> в таблице nat был переписан адрес и порт назначения, но не менялся
> интерфейс,
> Где, когда происходит перенаправление в loopback? За пределами Netfilter, при обработке
> согласно таблице маршрутов?

При dnat-е меняется dest-ip --> пакет может роутиться повторно.

"""Обратите внимание также на тот факт, что пакеты, с адресом назначения на брандмауэр, могут претерпеть изменение сетевого адреса назначения (DNAT) в цепочке PREROUTING таблицы nat и соответственно дальнейшая маршрутизация в первой точке будет выполняться в зависимости от произведенных изменений. .. https://www.opennet.ru/docs/RUS/iptables/#TRAVERSINGOFTABLES

(1) Обычно перенаправление (DNAT в частности) делают в NAT/PREROUTING -- видимо, как раз чтоб не гонять роутинг и все таблицы по два раза.

+++Мозголомные подробности "другого" табличинга: http://ebtables.sourceforge.net/br_fw_ia/br_fw_ia.html