Dos o más servidores con la misma IP pública

Estaba escribiendo el post del nuevo servidor y me estaba enrollando demasiado explicando cómo hice para tener dos servidores funcionando con una única IP pública, así que he decidido hacer un post aparte y orientarlo más a un pequeño tutorial.

El caso es el siguiente: tenemos un servidor normal y corriente en nuestra red local, pero por lo que sea, queremos que otro ordenador de nuestra red sea también un servidor. En mi caso, el servidor normal se trataba de un netbook y el nuevo servidor era una máquina virtual en mi ordenador principal para pruebas con Ubuntu Server.

Al primero se accede a través de www.cbelena.es y al segundo quería que se accediese a través de test.cbelena.es. Ambas direcciones apuntan a cbelena.dyndns.org, que se auto-actualiza con la IP de mi ISP. Para conseguir esa diferenciación, podemos hacer lo siguiente.

Necesitamos configurar el Apache que está en el netbook añadiendo lo que se llama otro VirtualHost. Uno de ellos es el que siempre ha estado, y el nuevo que tenemos que añadir es el que permite redirigir las peticiones de test.cbelena.es al otro servidor de la red. No sé si lo que acabo de decir es técnicamente correcto, pero la siguiente imagen aclara un poco el funcionamiento:

Dos servidores con una IP

Gracias al módulo de Apache mod_proxy, es posible tener dos o más servidores en una red con una misma IP pública

Esos VirtualHost se modifican en el fichero /etc/apache2/sites-available/default. En mi caso quedaría algo así:

# Éste es el que ya teníamos:
<VirtualHost *:80>
# ...
</VirtualHost>
# Y éste es el que tenemos que añadir:
<VirtualHost *:80>
ServerName test.cbelena.es
ProxyPass / http://test.cbelena.es
ProxyPassReverse / http://test.cbelena.es
</VirtualHost>

Como has visto en la imagen, es necesario cargar un par de módulos de Apache que no vienen activados por defecto. Son proxy.load y proxy_http.load. Podemos cargarlos fácilmente haciendo:

a2enmod proxy proxy_http

También es necesario editar el fichero /etc/hosts añadiendo que test.cbelena.es se encuentra en 192.168.1.102, que en mi caso es la IP local de la máquina virtual:

127.0.0.1 	localhost
# ...
192.168.1.102	test.cbelena.es

Reiniciamos Apache…:

sudo /etc/init.d/apache2 restart

…y ya debería funcionar. Prueba poniendo en tu navegador una dirección y luego otra, y verás que cada una carga desde un servidor diferente.

Como apunte, VirtualBox por defecto crea las máquinas virtuales de forma que no hay que configurarlas para tener Internet en ellas, pero para este caso es necesario modificar un parámetro en Configuración > Red para que en vez de por NAT se conecte a “Adaptador puente”:

Adaptador puente VirtualBox

Y en “Nombre” te debería salir el nombre de la tarjeta de red de tu ordenador. Así ya podrás configurar la máquina virtual como si fuera otro ordenador más de tu red local, con IP 192.168.1.x o el rango que utilices.

Imagen | labloguera.net

Actualización 12/08/11: En el blog de Sakrow tienes otro tutorial complementario al que nos ocupa para tener dos páginas web pero con la diferencia de estar alojadas en el mismo servidor.

32 comentarios / Añade el tuyo debajo

  1. Hermanito lo felicito por ese experiencia que tiene y sobre todo en el gran sistema operativo linux ubuntu.

    Yo por lo general no he salido de windows 7 donde tengo en una sola maquina varios subdominios de no-ip redirigidos ha varias carpetas por medio de host virtual de httpd-vhosts.conf de xampp y el servidor smtp mercury mail que trae el mismo xampp configurado a gmail para que funcione mandar correos desde mi web hacia cualquier correo.

    El detalle esta en que no he migrado a linux porque la falta de experiencia con lo servidores smtp en linux con subdominios gratis me ha dejado limitado.

    Ojala pudieras aportar una opción para hacer esa funcion smtp en linux.

    Claro esta que con dominio pago hay mas opciones pero yo he logrado la mayoria de los servicios de un hosting en windows 7 de manera gratis saludos desde venezuela espero su respuesta.

  2. a una acotacion el otro problema es que en venezuela hay ip dinamica y no hay opcion a tener ip fija y eso hace mas dificil la funcion de un servidor casero disculpa el doble post pero me falto eso :S

    1. Hola,

      Tranquilo por el doble post ;). La verdad es que yo no soy ningún experto y mucho menos en Linux, pero este tutorial ha sido gracias a unas cuantas búsquedas en Internet, juntar varios datos de diferentes sitios y recopilarlos aquí, por si a alguien más le puede resultar útil. De todos modos, a ver si te puedo ayudar un poco porque yo en su día también pensé en hacer lo mismo que tú:

      En España generalmente los ISP tampoco dan una IP fija por defecto, aunque creo que se puede solicitar pagando un plus. Así que, en efecto, tener una IP dinámica no hace posible tener tu propio servidor de correo casero, porque normalmente los servidores de Internet rechazan los emails llegados desde esas IPs dinámicas. Por ejemplo, Windows Live Hotmail dice:

      Mail rejected by Windows Live Hotmail for policy reasons. We generally do not accept email from dynamic IP’s as they are not typically used to deliver unauthenticated SMTP e-mail to an Internet mail server. http://www.spamhaus.org maintains lists of dynamic and residential IP addresses. If you are not an email/network admin please contact your E-mail/Internet Service Provider for help. Email/network admins, please visit http://postmaster.live.com for email delivery information and support.

      Entonces lo que se puede hacer es, poder recibir correos instalando un servidor de email en Linux (lo hice hace mucho, y la verdad, no me acuerdo de los detalles) de los muchos que hay (sendmail, postfix, etc.) y luego configurar el envío por el SMTP de Gmail, tal y como tienes en Windows. Creo que así sí que se podría hacer, pero en detalles más técnicos no me puedo meter porque, como ya te digo, no soy ningún experto jaja

      Espero haberte ayudado algo; un saludo!! :)

  3. Que recuerdos,fue una de las practicas que hicimos en clase…tendré que volver al mundillo y hacer alguna chapucilla en cuanto acabe el verano jaja

    Felicidades por el curro.

    Un Saludo

    1. ¿Sí? Vaya casualidad!! Ojalá a mí me enseñaran este tipo de cosas en la universidad, pero de momento no he corrido esa suerte…

      Gracias y un saludo! :D

  4. Buenas Carlos.

    Recientemente estoy intentado hacer esto mismo, pero no consigo que funcione.

    ¿Hay que configurar algo en el otro servidor?

    Siempre me dice que no hay acceso a esa ruta.

    1. Hola de nuevo,

      Como te decía en Twitter, no soy ningún experto, pero te intentaré ayudar.
      Lo que describo en esta especie de tutorial es lo que me funcionó a mí, y que supongo que funcionará en otros casos.

      En el otro servidor (el que quieres añadir, para aclararnos) no recuerdo que tuviera que configurar nada en especial, tan solo lo básico del Apache. Toda esta configuración la hice en el servidor «principal» (el que aparece en el esquema como «Apache 2 + mod_proxy»). Lo que se me ocurre es que te diga eso por algún tipo de problemas de permisos y/o usuarios / grupos.

      Yo comprobaría en el servidor «secundario» que puedes acceder a la web que quieres alojar (escribiendo localhost mismo) y si es así, intentes acceder pero desde el servidor principal, poniendo la IP local del servidor secundario o directamente su URL, y así de paso comprobar que tienes bien el fichero hosts. Y si todo va bien, comprueba que tienes los módulos proxy.load y proxy_http.load cargados en el servidor principal (puedes mirarlo en /etc/apache2/mods-enabled/). Por último comprobaría a ver si está todo bien en el fichero /etc/apache2/sites-available/default (si es que es ese el que utilizas, puesto que puede llamarse de otra manera).

      Si todo está correcto, ahora mismo no se me ocurre qué puede estar pasando…
      No sé si te habré servido de algo, pero espero que lo soluciones!

      Saludos :)

  5. Ya lo he conseguido, pero en mi caso he necesitado usar esto:

    ServerName mi.dominio.com
    ServerAlias mi.dominio.com

    ProxyPreserveHost On
    ProxyRequests Off

    #Permitimos las conexiones a traves del proxy

    Order deny,allow
    Allow from all

    #Direccion IP del servidor destino

    ProxyPass / http://xxx.xxx.xxx.xxx/
    ProxyPassReverse / http://xxx.xxx.xxx.xxx

    Casualidad, encuentro tu blog cuando yo lo estaba probando también.

    Lo dejo aquí, también creare un post en mi blog comentándolo. Hago una referencia al tuyo, por si a alguien le sirve toda la información.

    Gracias por tu tiempo, ¡muy bien blog!

    1. Me alegro que finalmente lo hayas conseguido :D

      Gracias por tomarte la molestia de poner cómo lo has hecho, tal vez a alguien más le resulte útil.

      Un saludo!!

  6. Buenas de nuevo Carlos.

    Me gustaría comentarte que también estaría muy bien comentar la posibilidad de tener en un mismo servidor diferentes paginas web.

    Yo he creado este post antes del post del Server Proxy porque generalmente se suele tener primero esta opción ya que no se suelen tener los suficientes recursos como para tener dos servidores (salvo excepciones como la tuya de cambio de servidor)

    Aquí lo dejo, por si alguien lo necesita. Ya te comentare cuando cree el del Server Proxy para hacerte una referencia.

    Un atento saludo

    Como tener dos paginas web en el mismo servidor
    http://blog.sakrow.com/2011/08/12/dos-paginas-web-en-un-mismo-servidor-virtualhost

    1. Lo acabo de ver en tu blog ;)
      Muchas gracias, es posible que le sirva a alguien que llegue a este post buscando eso mismo. Lo he añadido al tutorial.

      Un saludo!

  7. Aquí te paso la pagina de la posible configuración alternativa.
    Yo estuve dando muchas vueltas hasta encontrarla, espero que los demas no tengan que adr tantas.

    ¡Un saludo!

    http://blog.sakrow.com/2011/08/15/dos-servidores-con-la-misma-ip-publica-proxy-server/

  8. Como comenta Carlos, para instalar un servidor smtp en linux, se puede usar cualquiera, exim4,posffix,sendmail. En mi caso yo instale exim4, pero como bien comenta carlos para que funcione y los servidores de correo no pongan tu ip como spam, hay que hacer un remailer atraves gmail,hotmail etc..

    Si quieres hacerlo con exim esta web te ayudara http://wiki.debian.org/GmailAndExim4
    Un saludo

  9. hola amigo pero la cosa es tener dos servidores
    pero para que se vea la web desde fuera
    tiene que abrir el puerto 80 en el router

    el router solo permite abrir un puerto 80 para una ip.
    entonces a la otra ip que puerto le pongo .
    para que se vea xxx.domino.com
    yo tambien uso dyndns

    1. Hola,

      No he entendido mucho tu comentario, pero sí, hay que tener el puerto 80 abierto en tu router. Como evidentemente no puedes abrirlo otra vez para otra IP, es el servidor que tiene el puerto abierto el que «redirige» las peticiones de tu otro servidor. Para ello, sigue las instrucciones del tutorial y lo conseguirás.

      Saludos!

  10. gracias aver voy a probar .
    tengo un servidor ke esta funcionando pero esta en windows XP con appserver.

    es esto lo puedes mirar http://www.peruinter.tk uso dyndns eso lo tengo corriendo.

    pero ahora lo que quiero hacer es instalr un servidor en centos pero bajo una maquina virtual wmware.

    tu cres ke se pueda si redirigo .
    o no creo ke se pueda.

    todo lo modificaria en el servidor centos o tambien tengo que tocar el host de windows xp

    se podra tener dos server en una ip dinamica

    1. Hola de nuevo,

      Ahí no te sabría ayudar, el tutorial está pensado para el servidor web Apache bajo el sistema operativo Linux. No sé cómo sería bajo otros sistemas como Windows XP, aunque imagino que si el servidor web sigue siendo Apache sí que se podría hacer de forma similar.

      Saludos.

Comentarios cerrados.