2012-07-09 22 views
17

He leído la guía de reenvío de puertos de VirtualBox, tengo preguntas similares en este sitio y en otros sitios, pero no he podido encontrar una solución.El reenvío de puertos desde el puerto 80 al puerto 80 de VirtualBox no funciona

UFW está habilitado en el sistema operativo invitado (Ubuntu), los puertos 80 y 22 están abiertos. Puedo enviar ssh desde el host a ubuntu y puedo acceder al sitio de ubuntu desde el navegador del host.

En Guest, configuro adaptadores Nat y hostonly (vboxnet3). también abrió puerto del router 80 (192.168.1.90) IP de visitantes es 192.168.70.10

Así En configuración de invitados> Nat> reenvío de puertos pongo:

host TCP-IP: 192.168.1.90 anfitrión puertos: 80 guest-ip: 192.168.70.10 guestost-port: 80

Sin embargo, esta configuración no funciona. Aprecio si me diriges al camino correcto.

+0

También estoy enfrentando el mismo problema, sin embargo, el puerto más de 1024 en la máquina host a la máquina huésped 80 funciona pero el puerto 80 de la máquina host a cualquier puerto en máquina invitada no funciona ... Estoy usando la caja virtual en Mac. Por favor, avíseme si encuentra alguna solución a su problema. –

Respuesta

5

Según http://www.virtualbox.org/manual/ch06.html#natforward

puertos host de reenvío < 1.024 imposible:

En los hosts basados ​​en Unix (por ejemplo, Linux, Solaris, Mac OS X) no es posible obligar a los puertos por debajo de 1024 de aplicaciones que no son ejecutadas por root Como resultado, si intenta configurar dicho reenvío de puertos, la VM se negará a iniciar.

Es posible ejecutar VirtualBox como root, que -will- le permite reenviar los puertos de host < 1024, por lo que si usted está convencido de hacer esto con VirtualBox, puede convertirse en root y ejecutar VirtualBox esta manera:

$ sudo su - 
# VirtualBox 
8

Aquí hay otro enfoque que podría funcionar si no se siente cómodo ejecutando VirtualBox como usuario root. Puede usar SSH para configurar el reenvío de puertos desde el puerto de host 80 a algún puerto no restringido (en el ejemplo a continuación, utilizo el puerto 8080), que a su vez será reenviado al puerto invitado 80. Enrevesado, pero funciona.

  1. adelante desde el puerto de host 8080 al puerto de invitados 80. Asegúrese de que está funcionando al señalar un navegador en el puerto 8080 en la máquina host.
  2. Asegúrese de que sshd se esté ejecutando en su host. En Mac OS X, vaya al System Preferences -> Internet & Wireless -> Sharing y asegúrese de que Remote Login esté marcado.
  3. a root en el host

    $ sudo su - 
    
  4. puerto Forward base 80 para albergar el puerto 8080 a través de SSH (la dirección se unen \* hace que el puerto disponible en todas las interfaces).

    # ssh [email protected] -L \*:80::8080 
    

Tenga en cuenta que se le pedirá que inicie sesión con cualesquiera que sean las credenciales que utiliza para sunombredeusuario, por lo que es muy probable que pedirá su contraseña y cuando se tiene éxito, en realidad haya iniciado sesión.

Ahora debería poder acceder al puerto 80 en su equipo host y ver el mismo servicio que al llegar al puerto 8080 en su equipo host, también conocido como puerto 80 en su sistema operativo invitado.

Si no desea que otros en su red puedan acceder al puerto 80 en esa máquina, pero aún así desean acceder a ella desde un navegador en su sistema host, vincule el puerto al localhost:

# ssh [email protected] -L localhost:80::8080 
22

Como mencionó William, un sistema operativo Linux/Unix no permitirá que un proceso escuche en los puertos < 1024 a menos que se ejecuten como root. Podrías ejecutar VirtualBox como root, aunque he leído terribles advertencias al hacerlo. Probablemente sea terriblemente inseguro. En su lugar, configure Apache2 en el sistema host para escuchar en el puerto 80 (debe estar configurado para eso), pero en lugar de servir un sitio web en el equipo host, haga que el proxy transmita a un puerto superior. , 8080 - en el host.

A continuación, se VirtualBox hacia adelante que un mayor puerto al puerto de invitados OS 80.

La configuración de Apache sería algo como esto:

  1. Instalar el módulo proxy HTTP

    a2enmod proxy_http

  2. Asegúrate de que /etc/apache2/ports.conf tiene una directiva Listen 80 en ella

  3. Añadir otro sitio en /etc/apache2/sites-available o modificar el sitio predeterminado (o simplemente una palmada a esto en ports.conf)

     
    <VirtualHost *:80> 
        ProxyPreserveHost On 
        ProxyRequests Off 
        ProxyPass/http://localhost:8080/ 
        ProxyPassReverse/http://localhost:8080/ 
    </VirtualHost> 
    
  4. rebote Apache

    service apache2 restart

La configuración de VirtualBox sería host port: 8080, guest port: 80.

tráfico iría:

client --> host:80 --> Apache --> host:8080 ---> vbox NAT ----> guest:80 

Esto es similar al túnel SSH de William, pero no requiere intervención manual (re-introducción de una contraseña) cada vez que se reinicia el host.

+3

Si su sistema operativo host es un sistema operativo * nix, puede usar [iptables] (http://www.catonmat.net/blog/unprivileged-programs-privileged-ports/) para redirigir el tráfico del puerto 80 a un puerto superior en el sistema operativo host. Suena mucho mejor que involucrar túneles Apache o SSL. – Peter

+1

¿Es tan simple reenviar solicitudes de SSL utilizando el módulo proxy? es decir, '' o ¿hay pasos adicionales? –

Cuestiones relacionadas