Назад | Перейти на главную страницу

Как подменить IP-адрес для приложения, которому нужен именно этот IP-адрес?

В общем, такая проблема, есть в системе 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, и получил ответ, и скормить его приложению?

При условии, что

  • .1, .2 и .3 - разные машины
  • Вы не можете поменять местами IP-адреса .2 и .3
  • .2 работает под управлением Linux

Вот что вам нужно добавить к .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.