LINUX.ORG.RU

Сообщения jopka3

 

использование одного и тоже src-ip:src-port для accept и connect

Есть странное желание - иметь несколько сокетов, забинденных на одну и ту же src-ip:src-port пару. Только один из сокетов в listen и accept, все остальные в connect. В чем с точки зрения TCP принципиальная невозможность этого? Повторяю, не с точки зрения OS (и address already in use), а с точки зрения TCP. На мой взгляд это ограничение только OS, так как established соединения всегда будут иметь разные src-ip:src-port <=> dst-ip:dst-port. Конфликтов быть не должно.

 

jopka3
()

прозрачный прокси с tproxy

Привет.

Хочется добиться прозрачного проксирования с помощью Tproxy. Есть машина, на eth0 ip A.B.C.D. Есть приложение слушающее на A.B.C.D:port0. Есть приложение слушающиее на A.B.C.D:port1. С помощью Tproxy пакеты приходящие на A.B.C.D:port0 заворачиваются в A.B.C.D:port1. Далее, приложение, слушающее на A.B.C.D открывает сокет, делает setsockopt с IP_TRANSPARENT, делает bind с src-tuple сокета с A.B.C.D:port0 и делает коннект к A.B.C.D:port0. То есть в итоге, должна получиться схема, когда с помощью tproxy трафик заворачивается во второе приложение, там обрабатывается и проксируется снова в первое, с src ip и порт изначального коннекта. Чтобы было еще понятней - Exim cлушает на 25 порту. С помощью tproxy входящие коннекты заворачиваются на 26 порт (наша прокся), там происходит обработка и устанавливается коннект снова к Exim на 25 порт. Делается примерно так:

ip rule del fwmark 1 lookup 100
ip route del local 0.0.0.0/0 dev lo table 100
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t mangle -N DIVERT
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 1
iptables -t mangle -A DIVERT -j ACCEPT
iptables -t mangle -A PREROUTING -p tcp --dport 25 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 26
ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0/0 dev eth0 table 100
Пакеты доходят до моего приложения на 26 порт, но дальше, при connect() - они не доходят снова на 25 порт Exim - в tcpdump SYN не видно. Проблема, видимо, возникает из-за того, что есть два сокета с одинаковыми src-tuple и dst-tuple:
tcp        0      0 0.0.0.0:25           0.0.0.0:*               LISTEN      11951/nc        
tcp        0      1 10.4.0.52:60951         10.3.0.234:25        SYN_SENT    -               
tcp        0      0 10.3.0.234:25        10.4.0.52:60951         ESTABLISHED -    
Вопрос заключается в том, как сделать так, чтобы tproxy не считал второе соединение(из приложения к Exim) первым коннектом на внешний адрес и не заворачивал его снова в Tproxy?

 tproxy iptabltes

jopka3
()

RSS подписка на новые темы