Redirección por dominio iptables

Les cuento.
Tengo un servidor dedicado contratado bajo Debian.
En este, estoy desarrollando una serie de proyectos que se basan en aplicaciones que responden a trabes de peticiones web.
Así mismo, tengo varios dominios contratados apuntando a mi ip.
Ahora, lo que quiero es que, según el dominio entrante, la petición se redirija a un puerto o otro, es decir, que si la perona pone:
Dominio1.com vaya a MYIP:80 (vamos, normal)
Pero si pone:
Dominio2.com vaya a MYIP:81
¿Me explico, no?
Es decir, que en función del dominio, y entrando siempre por el puerto 80, se redirija a un puerto o otro según solo el nombre del dominio.
He estado trameando con iptables, y he logrado algo que me gusta bastante, pero me cambia en el ultimo momento. El comando de IPTables es el siguiente:
Iptables -t nat -A PREROUTING -i eth0 -p TCP -d mydominio.com -j DNAT --to XX. XX. XX. XX:81
El problema de esta comanda, es que se guarda bien, pero, me redifije TODAS las peticiones al 81, no solo las de mydominio.com, así que al ver esto, entro a ver que regla ha añadido, y me encuentro que añade esta regla:
Chain PREROUTING (policy ACCEPT)
Target prot opt source destination
DNAT tcp -- anywhere nombremaquina.dominioHosting.com to:XX. XX. XX. XX:81
Donde "nombremaquina.dominioHosting.com" es la direccion que me dieron al dar de alta el servidor, que es el nombre tambien de mi maquina. Y, en consecuencia, me redirije todo lo que me llega
No se si me he explicado muy bien.

1 respuesta

Respuesta
1
Lo que te esta pasando es que iptables no opera a la altura de dominios si no de IP's. Iptables debe trabajar con IP's, no obstante los argumentos destino y fuente (-d y -s) admiten introducir un nombre de red o un nombre de máquina, pero esta petición DNS sólo se resuelve una vez y es cuando insertas la regla. Por eso, si pones "-d mydominio.com" iptables te lo resuelve cuando la insertas y al final ves que te ha insertado un nombre máquina o si pones el argumento -n al listarlas verás una IP, que es con lo que realmente trabaja iptables. Un ejemplo puedes tener con "marca.com" y "elmundo.com", comparten la misma ip pero tienen diferentes nombres de dominio, si pones una regla en iptables con "marca.com" luego verás que te ha escrito "elmundo.com", pero con lo que de verdad se ha quedado es con la ip única, que si escribes en un browser automáticamente te lleva a "elmundo.com". Nota que sería muy costoso estar resolviendo nombres de dominio en el tracking de los paquetes.
Con todo esto, a ti cuando te llega un paquete a iptables no sabes que dominio fue escrito cuando se envío, de ello se ha encargado el DNS de resolverlo, solo sabes la IP destino que tiene el paquete. Así que si quieres redirigir los paquetes en función del dominio que se escriba se debería hacer a la altura del DNS que resuelve ese dominio.
Espero haber entendido bien lo que quieres hacer y servirte de ayuda, seguramente he puesto muchas cosas que ya sabes pero lo dejo todo ahí para que quede claro. Si no estas conforme con lo que te he puesto o quieres preguntar más no dudes en volver a preguntar!
En primer lugar gracias por esto, ahora se al menos porque no va.
Pero lo que me falta, alguna forma de hacer lo que necesito, a malas acabare implementandome un programa para que lo haga, pero seguro que ya esta hecho y más optimo de como lo aria yo
Así de primeras, si he entendido bien lo que quieres hacer, algo sencillo que se me ocurre, es, utilizando apache, usar su virtual host. Primero tendras que cambiar apache al puerto 80 si quieres utilizar ese a la escucha: http://httpd.apache.org/docs/2.0/es/bind.html
Tras esto creas tu virtual host con dos configuraciones una para cada dominio(http://httpd.apache.org/docs/2.0/vhosts/name-based.html) con diferentes roots cada una. Dentro de cada root pones el código necesario para escuchar la petición web o si quieres redirigir al puerto 81 también puedes introducir el código necesario php,... como prefieras para redirigir al puerto 81 de tu host.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas