LINUX.ORG.RU

История изменений

Исправление vel, (текущая версия) :

iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT

Это проверяет отностся ли пакет к слушаемому/открытому локальному сокету.

В современных ядрах есть еще полезная опция --transparent (чтоб не срабатывало на нормальные локальные сокеты)

Это правило не срабатывает для первого пакета соедиения.

Отдельная цепочка divert нужна только из-за того, что MARK не умеет возвращать ACCEPT. А сделать нужно 2 действия MARK+ACCEPT

Схема следование пакета в ядре/iptables.

По этой марке оно на «routing decision» через «ip ru» станет локальным трафиком без NAT-a в явном виде :).

iptables -t mangle -A PREROUTING -p tcp -d 10.192.0.0/10 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 9040

Это хитрый аналог DNAT/REDIRECT с доп. действием - ставил марку + отмечает пакет как бы локальным.

Правило срабатывает только для первого пакета соедиения.

По метке и «ip ru» оно попадет в локальный трафик после «routing decision»

На счет биндинга на INANY - у TPROXY можно указать не только порт, но и адрес через --on-ip. Проблема в том, что ip адрес редиректа через TPROXY выбирается по интерфейсу через который пришел пакет.

Порт 9040 нужно прибиндить к какому-нибудь локальному адресу ( но не 127.0.0.1), а в TPROXY указать его явно, токгда не будет неопределенностей.

C "-j REDIRECT" такая же фигня с ip :(

Исправление vel, :

iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT

Это проверяет отностся ли пакет к слушаемому/открытому локальному сокету.

В современных ядрах есть еще полезная опция --transparent (чтоб не срабатывало на нормальные локальные сокеты)

Это правило не срабатывает для первого пакета соедиения.

Отдельная цепочка divert нужна только из-за того, что MARK не умеет возвращать ACCEPT. А сделать нужно 2 действия MARK+ACCEPT

Схема следование пакета в ядре/iptables.

По этой марке оно на «routing decision» через «ip ru» станет локальным трафиком без NAT-a в явном виде :).

iptables -t mangle -A PREROUTING -p tcp -d 10.192.0.0/10 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 9040

Это хитрый аналог DNAT/REDIRECT с доп. действием - ставил марку + отмечает пакет как бы локальным.

Правило срабатывает только для первого пакета соедиения.

Маршрут через lo говорит, что это локальный тафик, т.е. он не попадет в forward после «routing decision»

На счет биндинга на INANY - у TPROXY можно указать не только порт, но и адрес через --on-ip. Проблема в том, что ip адрес редиректа через TPROXY выбирается по интерфейсу через который пришел пакет.

Порт 9040 нужно прибиндить к какому-нибудь локальному адресу ( но не 127.0.0.1), а в TPROXY указать его явно, токгда не будет неопределенностей.

C "-j REDIRECT" такая же фигня с ip :(

Исправление vel, :

iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT

Это проверяет отностся ли пакет к слушаемому/открытому локальному сокету.

В современных ядрах есть еще полезная опция --transparent (чтоб не срабатывало на нормальные локальные сокеты)

Это правило не срабатывает для первого пакета соедиения.

Отдельная цепочка divert нужна только из-за того, что MARK не умеет возвращать ACCEPT.

iptables -t mangle -A PREROUTING -p tcp -d 10.192.0.0/10 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 9040

Это хитрый аналог DNAT/REDIRECT с доп. действием - ставил марку + отмечает пакет как бы локальным.

Правило срабатывает только для первого пакета соедиения.

Схема следование пакета в ядре/iptables. Маршрут через lo говорит, что это локальный тафик, т.е. он не попадет в forward после «routing decision»

На счет биндинга на INANY - у TPROXY можно указать не только порт, но и адрес через --on-ip. Проблема в том, что ip адрес редиректа через TPROXY выбирается по интерфейсу через который пришел пакет.

Порт 9040 нужно прибиндить к какому-нибудь локальному адресу ( но не 127.0.0.1), а в TPROXY указать его явно, токгда не будет неопределенностей.

C "-j REDIRECT" такая же фигня с ip :(

Исходная версия vel, :

iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT

Это проверяет отностся ли пакет к слушаемому/открытому локальному сокету.

В современных ядрах есть еще полезная опция --transparent (чтоб не срабатывало на нормальные локальные сокеты)

Это правило не срабатывает для превого пакета соедиения.

Отдельная цепочка divert нужна только из-за того, что MARK не умеет возвращать ACCEPT.

iptables -t mangle -A PREROUTING -p tcp -d 10.192.0.0/10 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 9040

Это хитрый аналог DNAT/REDIRECT с доп. действием - ставил марку + отмечает пакет как бы локальным.

Правило срабатывает только для первого пакета соедиения.

Схема следование пакета в ядре/iptables. Маршрут через lo говорит, что это локальный тафик, т.е. он не попадет в forward после «routing decision»

На счет биндинга на INANY - у TPROXY можно указать не только порт, но и адрес через --on-ip. Проблема в том, что ip адрес редиректа через TPROXY выбирается по интерфейсу через который пришел пакет.

Порт 9040 нужно прибиндить к какому-нибудь локальному адресу ( но не 127.0.0.1), а в TPROXY указать его явно, токгда не будет неопределенностей.

C "-j REDIRECT" такая же фигня с ip :(