LINUX.ORG.RU
ФорумAdmin

Iptables связь через 3-тий хост

 , , ,


0

1

Есть два внешних сервера. Необходимо с первого (1.1.1.1) подключиться к…. ну допустим Mysql на втором (2.2.2.2) Но связь между серверами 1.1.1.1 и 2.2.2.2 плохая по вине цепочки передачи данных к примеру. Есть некий 3-тий сервер 3.3.3.3 у которого хорошая связь как с 1.1.1.1 так и с 2.2.2.2. Как сделать так, чтобы 1.1.1.1 обращался на 3.3.3.3:9999 тот уже делал forward на 2.2.2.2:3306 ну и по той же цепочке вовращал результат 1.1.1.1. Наверное да бы не нарушить работу 3.3.3.3 данные пакеты надо будет маркировать…

Спасибо за помощь, или хотя бы конкретную подсказку а не 3 слова (POSTROUTING, PREROUTING, MASCARADE). От них что-то уже кавардак в голове.

<fat>socat TCP-LISTEN:9999,fork TCP:2222:3306</fat>

anonymous
()
Ответ на: комментарий от Anoxemian

На 3.3.3.3 iptables -t mangle -I PREROUTING -p tcp –dport 9999 -j MARK –set-mark 3 iptables -t nat -I PREROUTING -m mark –mark 3 -p tcp –dport 9999 -j DNAT –to-destination 2.2.2.2:3306

Дальше я должен его наверное замаскарадить…. iptables -t nat -I POSTROUTING -m mark –mark 3 -j MASQUERADE

Теперь как его правильно вернуть? iptables -t nat -I POSTROUTING -m mark –mark 3 -p tcp -d 2.2.2.2 –dport 3306 -j SNAT –to-source ?????? :( Или может надо использовать -j RAWDNAT/RAWSNAT, блин я запутался…, может надо лечь спать :/

akavjik
() автор топика
Ответ на: комментарий от akavjik

замаскируй соответсвенно mark и известному маршруту текущей точки проброса. короче все 1-в-1, как если бы ты строил тоннель между 2мя хостами

Anoxemian ★★★★★
()

На 3.3.3.3:

iptables -t mangle -I PREROUTING -s 1.1.1.1 -p tcp –dport 9999 -j MARK –set-mark 3
iptables -t nat -I PREROUTING -m mark --mark 3 -j DNAT –to-destination 2.2.2.2:3306
iptables -t nat -I POSTROUTING -m mark --mark 3 -j MASQUERADE (или -j SNAT --to-source 3.3.3.3)
iptables -I FORWARD -m conntrack --ctstate ESTABLISHED,RELATED,DNAT -j ACCEPT
> Теперь как его правильно вернуть?
Само вернётся, об этом можно не переживать.

spirit ★★★★★
()
Ответ на: комментарий от spirit

Спасибо. Я тоже уже разобрался. чуток по другому

iptables -t mangle -I PREROUTING -i eth0 -p tcp -s 1.1.1.1 -d 3.3.3.3 –dport 9999 -j MARK –set-mark 123
iptables -t mangle -I PREROUTING -i eth0 -p tcp -s 1.1.1.1 -d 3.3.3.3 –dport 9999 -j CONNMARK –save-mark
#надо ли это делать?
iptables -t nat -A PREROUTING -p tcp -m mark –mark 123 -j DNAT –to 2.2.2.2:3306
iptables -t nat -A POSTROUTING -m mark –mark 123 -p tcp -j SNAT –to-source 3.3.3.3 (ну или -j MASQUERADE)
iptables -A FORWARD -i eth0 -o eth0 -s 1.1.1.1/32 -d 2.2.2.2/32 -j MARK –set-mark 123 
iptables -A FORWARD -p tcp -m mark –mark 123 -j ACCEPT
  • -m conntrack –ctstate ESTABLISHED,RELATED,DNAT хорошее дополнение :)
  • кстати надо ли делать MARK для FORWARD или как говориться на ваше усмотрение.

Еще раз всем спасибо за подсказки.

akavjik
() автор топика
Ответ на: комментарий от akavjik

На самом деле никакие MARK, а тем более CONNMARK там не нужны.
Основная задача - сделать DNAT и SNAT первому пакету в соединении (последующие пакеты через *NAT не проходят) и не запрещать все пакеты соединения в FORWARD (что --ctstate DNAT и делает).

spirit ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.