В общем, такая проблема, есть в системе RHEL 6.4 Server с парой сетевых интерфейсов, объединенных в один путем бондинга. Этот системный IP-адрес: 10.7.7.1
. Далее в системе запущено приложение, которому необходимо подключиться к MySQL-серверу 10.7.7.2
на порт 3306. Фактически MySQL работает на 10.7.7.3
. Настройки подключения в приложении жестко запрограммированы, поэтому не могут быть изменены. Это можно услышать через iptables сделать перевод адресов. Как сделать так, чтобы при попытке приложения 10.7.7.2:3306
iptables перехватывается и отправляет запрос на 10.7.7.3:3306
, и получил ответ, и скормить его приложению?
При условии, что
Вот что вам нужно добавить к .2:
-t nat -A PREROUTING -d 10.7.7.2 -p tcp --dport 3306 -j DNAT --to-destination 10.7.7.3
-t nat -A POSTROUTING -d 10.7.7.3 -p tcp --dport 3306 -j SNAT --to-source 10.7.7.2
ТЕМ НЕ МЕНИЕ...
Если по каким-то причинам вы не можете создать правила iptables на .2 и / или хотите перехватить трафик на .1, все, что вам нужно сделать на .1, это:
-t nat -A POSTROUTING -d 10.7.7.2 -p tcp --dport 3306 -j DNAT --to-destination 10.7.7.3
Это можно сделать с помощью правил NAT в iptables.
Если сервер MySQL находится на том же хосте, используйте правила REDIRECT. Перенаправляйте все подключения на порт 3306, а не на 10.7.7.3 на нужный адрес.
Если сервер MySQL не находится на том же хосте, используйте правило DNAT.