En general, este problema surge en un sistema de servidor RHEL 6.4 con un par de interfaces de red combinadas en una mediante vinculación. Esta dirección IP del sistema: 10.7.7.1
. A continuación, en el sistema se ejecuta una aplicación que necesita conectarse al servidor MySQL 10.7.7.2
en el puerto 3306. Y, de hecho, MySQL se ejecuta en 10.7.7.3
. La configuración de conexión en la aplicación está codificada, por lo tanto, no se puede cambiar. Eso se puede escuchar a travésiptableshacer traducción de direcciones. Cómo hacer para que cuando la aplicación intente10.7.7.2:3306
iptables¿Se intercepta y se le envía una solicitud 10.7.7.3:3306
, se obtiene una respuesta y se la envía a la aplicación?
Respuesta1
Esto se puede hacer con reglas NAT en iptables.
Si el servidor MySQL está en el mismo host, utilice reglas de REDIRECCIÓN. Redirija todas las conexiones al puerto 3306, no al 10.7.7.3, a la dirección requerida.
Si el servidor MySQL no está en el mismo host, utilice una regla DNAT.
Respuesta2
Asumiendo que
- .1, .2 y .3 son máquinas diferentes
- No puedes intercambiar las direcciones IP de .2 y .3
- .2 está ejecutando Linux
Esto es lo que necesita agregar en .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
SIN EMBARGO...
Si por alguna razón no puede crear reglas de iptables en .2 y/o desea interceptar el tráfico en .1, todo lo que necesita hacer en .1 es:
-t nat -A POSTROUTING -d 10.7.7.2 -p tcp --dport 3306 -j DNAT --to-destination 10.7.7.3