VirtualBox - "solo host" con internet

2

Ok amigos! ¡Realmente agradecería algo de ayuda esta vez! = |

Estoy usando el virtualizador VirtualBox y estoy tratando de hacer que mis máquinas invitadas tengan acceso a Internet utilizando SOLO una interfaz de red "solo de host" (VirtualBox).

De acuerdo con la documentación oficial en https://www.virtualbox.org/manual/ch06.html usando una interfaz de red "solo host", tengo los siguientes "modos de red" (accesos) ...

VM  <-> Host     | YES
VM1 <-> VM2      | YES
VM   -> Internet | NO

Sin embargo , hay MUCHAS documentaciones en Internet que le informan que puede acceder a Internet (usando solo la interfaz "solo host") desde una máquina invitada usando el siguiente "truco" / "solución" (ejemplo) en la máquina host ...

sudo iptables -A FORWARD -o <HOST_INTERFACE_WITH_INTERNET> -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A POSTROUTING -t nat -j MASQUERADE
sudo sysctl -w net.ipv4.ip_forward=1

Probé muchos y muchos ejemplos. El iptables.servicese ejecuta correctamente en mi máquina host. ¿QUÉ ESTOY HACIENDO MAL?

Mi host es un Linux Manjaro (basado en Linux Arch).

¡Muchas gracias!

A continuación hay algunas fuentes con información sobre el "truco" / "solución" que mencioné ...

http://archlinux.org.ru/forum/topic/2219/ http://nerdbynature.de/s9y/2015/06/09/VirtualBox-switching-to-Host-only-networking https://askubuntu.com / preguntas / 293816 / in-virtualbox-how-do-i-set-up-host-only-virtual-machines-that-can-access-the-in https://cuckoo.sh/docs/installation/host/ routing.html https://downloads.cuckoosandbox.org/docs/installation/guest/network.html https://github.com/cuckoosandbox/cuckoo/issues/1376 https://jackal777.wordpress.com/2012/02 / 13 / internet-access-in-virtualbox-host-only-networking / https://kyrofa.com/posts/virtualbox-internet-access-with-host-only-network https://precisionsec.com/virtualbox- host-only-network-cuckoo-sandbox-0-4-2 / Virtualbox NAT y conexión solo host https://unix.stackexchange.com/questions/74663/virtualbox-nat-host-only-adapter https://www.howtogeek.com/howto/4922/week-in-geek-the-fixing-slow-internet -en-virtualbox-xp-guest-edition / https://www.rffuste.com/tag/cuckoo/ https://www.virtualbox.org/manual/ch06.html

A continuación se presentan algunos de los MUCHOS ejemplos que probé ...

 > --------------------------------------------
sudo iptables -t nat -I POSTROUTING -s 192.168.56.0/24 -j MASQUERADE
sudo sysctl net.ipv4.ip_forward=1
sudo iptables -P FORWARD ACCEPT
sudo iptables -t nat -P POSTROUTING ACCEPT
 < --------------------------------------------
 > --------------------------------------------
sudo iptables -A FORWARD -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A POSTROUTING -t nat -j MASQUERADE
sudo sysctl -w net.ipv4.ip_forward=1
 < --------------------------------------------
 > --------------------------------------------
sudo iptables -A FORWARD -o <HOST_INTERFACE_WITH_INTERNET> -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A POSTROUTING -t nat -j MASQUERADE
sudo sysctl -w net.ipv4.ip_forward=1
 < --------------------------------------------
 > --------------------------------------------
sudo iptables -A FORWARD -o <HOST_INTERFACE_WITH_INTERNET> -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -F POSTROUTING
sudo iptables -t nat -A POSTROUTING -o <HOST_INTERFACE_WITH_INTERNET> -j MASQUERADE
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
 < --------------------------------------------
 > --------------------------------------------
sudo iptables -A FORWARD -o <HOST_INTERFACE_WITH_INTERNET> -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A POSTROUTING -t nat -j MASQUERADE
sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -w net.ipv4.conf.all.proxy_arp=1
 < --------------------------------------------
 > --------------------------------------------
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -F
sudo iptables -t nat -A POSTROUTING -o <HOST_INTERFACE_WITH_INTERNET> -j MASQUERADE
sudo iptables -A FORWARD -i <HOST_INTERFACE_WITH_INTERNET> -o vboxnet0 -j ACCEPT
sudo iptables -A FORWARD -i vboxnet0 -o <HOST_INTERFACE_WITH_INTERNET> -j ACCEPT
 < --------------------------------------------
 > --------------------------------------------
sudo iptables -A FORWARD -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A POSTROUTING -t nat -j MASQUERADE
sudo sysctl -w net.ipv4.ip_forward=1
 < --------------------------------------------
 > --------------------------------------------
sudo bash -c "printf \"net.ipv4.ip_forward = 1\nnet.ipv4.conf.all.proxy_arp = 1\n\" >> /etc/sysctl.conf"
sudo sysctl -p
sudo iptables -t filter -I FORWARD --in-interface vboxnet0 --out-interface <HOST_INTERFACE_WITH_INTERNET> --source 192.168.56.0/24 -j ACCEPT
sudo iptables -t filter -I FORWARD --in-interface <HOST_INTERFACE_WITH_INTERNET> --out-interface vboxnet0 --destination 192.168.56.0/24 -j ACCEPT
sudo iptables -t nat -I POSTROUTING -o <HOST_INTERFACE_WITH_INTERNET> -j MASQUERADE
 < --------------------------------------------
 > --------------------------------------------
sudo iptables -A POSTROUTING -o enp+ -t nat -j MASQUERADE
sudo iptables -A POSTROUTING -o wlp+ -t nat -j MASQUERADE
 < --------------------------------------------
 > --------------------------------------------
sudo iptables -A PREROUTING -t mangle -i vboxnet+ -j MARK --set-mark 1
sudo iptables -A POSTROUTING -o enp+ -t nat -m mark --mark 1 -j MASQUERADE
sudo iptables -A POSTROUTING -o wlp+ -t nat -m mark --mark 1 -j MASQUERADE
 < --------------------------------------------
 > --------------------------------------------
sudo iptables -t nat -A POSTROUTING -o <HOST_INTERFACE_WITH_INTERNET> -s 192.168.56.0/24 -j MASQUERADE
sudo iptables -P FORWARD DROP
sudo iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -s 192.168.56.0/24 -j ACCEPT
sudo iptables -A FORWARD -s 192.168.56.0/24 -d 192.168.56.0/24 -j ACCEPT
 < --------------------------------------------
 > --------------------------------------------
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -A FORWARD -o <HOST_INTERFACE_WITH_INTERNET> -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -A POSTROUTING -s 192.168.56.0/24 -o <HOST_INTERFACE_WITH_INTERNET> -j MASQUERADE
sudo iptables -I INPUT 1 -i vboxnet0 -j ACCEPT
 < --------------------------------------------
 > --------------------------------------------
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
sudo sysctl -p /etc/sysctl.conf
sudo iptables -I FORWARD -i vboxnet0 -d 192.168.56.0/255.255.255.0 -j DROP
sudo iptables -A FORWARD -i vboxnet0 -s 192.168.56.0/255.255.255.0 -j ACCEPT
sudo iptables -A FORWARD -i <HOST_INTERFACE_WITH_INTERNET> -d 192.168.56.0/255.255.255.0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o <HOST_INTERFACE_WITH_INTERNET> -j MASQUERADE
 < --------------------------------------------
Eduardo Lucio
fuente
1
askubuntu.com/questions/293816/… tiene la pista: 2 interfaces de red. 1 solo host y 1 NAT. NAT le permite el acceso a Internet, y el Host-Only ... bien haga lo que quiera con él. ¿O quiere tener una red exclusivamente de host y aún tener acceso a Internet?
Darius
@Darius "¿O quieres tener una red exclusivamente de host y aún tener acceso a internet?" -> ¡Sí! ¡Exactamente! ¡Gracias!
Eduardo Lucio

Respuestas:

2

INTRODUCCIÓN

Es una guía completa para tener los accesos "VM <-> Host", "VM1 <-> VM2" y "VM -> Internet" en los invitados utilizando una única interfaz de red ("solo host") en VirtualBox.

IMPORTANTE: Ejecute todos los comandos como "root".

EJECUTAR EN ANFITRIÓN

NOTA: Utilizamos un host Manjaro (basado en Arch) como plantilla. Es posible que necesite ajustes y cambios en otras distribuciones.

Necesita copiar el archivo de configuración de la plantilla de iptables ...

$ cp /etc/iptables/empty.rules /etc/iptables/iptables.rules

... para que pueda iniciar el "iptables.service".

Habilite e inicie "iptables.service" ...

$ systemctl enable --now iptables.service

Habilitar el reenvío de IP ...

$ sysctl -w net.ipv4.ip_forward=1
$ printf "net.ipv4.ip_forward=1\n" >> /etc/sysctl.d/30-ipforward.conf

Agregue las siguientes reglas de iptables. Esto reenviará los paquetes a través del host ("vboxnet0") y a Internet ...

PLANTILLA I
$ iptables -t filter -I FORWARD --in-interface vboxnet0 --out-interface <HOST_INTERFACE_WITH_INTERNET> --source 192.168.56.0/24 -j ACCEPT
$ iptables -t filter -I FORWARD --in-interface <HOST_INTERFACE_WITH_INTERNET> --out-interface vboxnet0 --destination 192.168.56.0/24 -j ACCEPT
$ iptables -t nat -I POSTROUTING -o <HOST_INTERFACE_WITH_INTERNET> -j MASQUERADE

... O agregue las siguientes reglas de iptables ...

PLANTILLA II
$ iptables -t nat -I POSTROUTING -s 192.168.56.0/24 -j MASQUERADE
$ iptables -P FORWARD ACCEPT
$ iptables -t nat -P POSTROUTING ACCEPT

NOTA: En la "PLANTILLA II" no necesita informar el nombre de la interfaz del host ( <HOST_INTERFACE_WITH_INTERNET>) y el nombre de la interfaz VirtualBox ( vboxnet0). De esa manera, cualquier interfaz de host que tenga Internet funcionará, es decir, no tengo que ajustar el nombre de la interfaz que tiene Internet cada vez que cambia. Un ejemplo de esto es cuando cambiamos de la interfaz con cable (por ejemplo: enp4s0f2) a la interfaz inalámbrica (por ejemplo: wlp3s0) y viceversa.

PREGUNTA ADICIONAL: presenté dos formas de configurar "iptables" porque no sé si hay alguna ventaja en usar la "PLANTILLA I". ¿Cualquier comentario?

SUGERENCIA: para averiguar el nombre de la interfaz de red ( <HOST_INTERFACE_WITH_INTERNET>) que tiene Internet, utilice el comando "ip a".

Guarde las reglas en la configuración de iptables y reinicie el servicio ...

$ iptables-save > /etc/iptables/iptables.rules
$ systemctl restart iptables.service

Habilite e inicie "dnsmasq" en el host ...

$ systemctl enable --now dnsmasq.service

NOTA: "dnsmasq" es un pequeño proxy DNS de almacenamiento en caché y un servidor DHCP / TFTP.

EJECUTAR EN INVITADO

NOTA: Usamos un invitado CentOS 7 como plantilla. Es posible que necesite ajustes y cambios en otras distribuciones.

Configure la interfaz de red según el modelo ...

NOTA: El archivo de configuración de red está en la ruta de la carpeta "/ etc / sysconfig / network-scripts /".

BOOTPROTO=static
DEVICE=<NETWORK_INTERFACE_NAME>
DNS1=<HOST-ONLY_HOST_IP>
GATEWAY=<HOST-ONLY_HOST_IP>
IPADDR=<HOST-ONLY_GUEST_IP>
IPV6INIT=NO
NETMASK=255.255.255.0
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Ethernet
USERCTL=NO
ZONE=

P.ej.:

BOOTPROTO=static
DEVICE=eno16777736
DNS1=192.168.56.1
GATEWAY=192.168.56.1
IPADDR=192.168.56.101
IPV6INIT=NO
NETMASK=255.255.255.0
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Ethernet
USERCTL=NO
ZONE=

Reiniciar el servicio de red ...

$ systemctl restart network.service

Probar...

$ curl http://www.google.com

REFERENCIA

Eduardo Lucio
fuente