Tengo un servidor que entre muchas cosas hace de router/firewall, apache, php, BIND9, etc y un par de paginas web corriendo, alrededor de 4 dominios, todo eso funcionando ok. El tema es que tengo 1 ip publica disponible y necesito ver desde internet un segundo servidor, el cual tiene otras aplicaciones sobre tomcat que no quiero mezclar con el servidor anteriormente detallado y pensé que configurando un subdominio podía verlo desde afuera, la configuración fue del tipo:
srv2.midominio.cl. IN A 192.168.1.2
Donde 192.168.1.2 es mi segundo servidor que está en mi lan y el cual quiero ver desde internet.
¿Cómo es posible lograr esta configuración?
Actualmente hago nslookup a la dirección y me responde 192.168.1.2, la cual es una ip privada.
¿Hay alguna manera de solucionar esto con dns?
De antemano gracias
2011/3/2 Soporte soporte@mki.cl:
Tengo un servidor que entre muchas cosas hace de router/firewall, apache, php, BIND9, etc… y un par de paginas web corriendo, alrededor de 4 dominios, todo eso funcionando ok. El tema es que tengo 1 ip publica disponible y necesito ver desde internet un segundo servidor, el cual tiene otras aplicaciones sobre tomcat que no quiero mezclar con el servidor
La manera preferible -en mi opinión- para el caso en que tu segundo servidor sólo necesite dar servicio de HTTP, es colocar un reverse proxy HTTP en el gateway. Este reverse proxy recibe todos los pedidos de HTTP dirigidos a la IP pública y los redirige a diferentes servidores internos según el NOMBRE con el que accedes al servicio. Yo lo hago con Apache de esta manera, pero puede haber otras soluciones (lighttpd o nginx pueden ser más fáciles de configurar y son definitivamente más livianos):
<VirtualHost TU_DIRECCION_IP_PUBLICA> ServerName TU_NOMBRE_DE_SERVIDOR_1 TransferLog "/var/log/httpd/servidor1.log" ErrorLog "/var/log/httpd/servidor1.log" ProxyRequests off ProxyPreserveHost On Proxypass / http://192.168.1.1/ ProxyPassReverse / http://192.168.1.1/ </VirtualHost> <VirtualHost TU_DIRECCION_IP_PUBLICA> ServerName TU_NOMBRE_DE_SERVIDOR_2 TransferLog "/var/log/httpd/servidor2.log" ErrorLog "/var/log/httpd/servidor2.log" ProxyRequests off ProxyPreserveHost On Proxypass / http://192.168.1.2/ ProxyPassReverse / http://192.168.1.2/ </VirtualHost>
Como ves, la parte interesante es TU_NOMBRE_DE_SERVIDOR_X en los hosts virtuales, lo que permite separar los servicios. Además es posible que esta clase de trucos te permitan resolver balance de carga si lo necesitas. La herramienta para lograr esto es únicamente la configuración de Apache (u otro web server).
Una segunda manera es cuando en el gateway que tiene la dirección pública estableces port forwarding hacia el segundo servidor. Tendrás que dedicar un port diferente del default 80 para ese segundo servidor (por ejemplo, el 81) y en ese caso tus clientes deberán dirigirse a "http://TU_NOMBRE_DE_SERVIDOR:81". El nombre publicado por DNS puede ser el mismo u otro, pero siempre quedarán mapeados a la única IP pública disponible. La desventaja en este segundo caso es que debido al NAT pierdes la referencia de quién es el host que hace el pedido, y eso dificulta manejar estadísticas, debugging, seguridad, etc. La herramienta para esta segunda forma es iptables.
Eventualmente puedes combinar ambas maneras si tienes necesidad de acceder al servidor interno por SSH (u otro protocolo cualquiera).
Actualmente hago nslookup a la dirección y me responde 192.168.1.2, la cual es una ip privada.
¿Hay alguna manera de solucionar esto con dns?
El rol que juega el DNS en esto es que debería servir los diferentes nombres para los diferentes servicios, basados en los hosts virtuales. Todos, mapeados a la misma dirección IP pública. No tiene sentido que publiques una dirección privada por DNS salvo que únicamente pretendas accederla por tu red local.