VirtualBox - “somente host” com internet

2

Ok, amigos! Eu realmente aprecio alguma ajuda desta vez! = |

Estou usando o virtualizador VirtualBox e estou tentando fazer com que minhas máquinas convidadas tenham acesso à Internet usando SOMENTE uma interface de rede "somente host" (VirtualBox ).

De acordo com a documentação oficial no link usando uma interface de rede "somente host", tenho o seguinte " modos de rede "(acessos) ...

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

No entanto , existem MUITAS de documentações na internet que informam que você pode acessar a internet (usando apenas a interface "somente host") de uma máquina convidada usando o seguinte "truque" / "solução alternativa" (exemplo) na 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

Eu testei muitos e muitos exemplos. O iptables.service está sendo executado corretamente na minha máquina host. O QUE ESTOU FAZENDO ERRADO?

Meu host é um Linux Manjaro (baseado em Linux Arch).

Muito obrigado!

Abaixo estão algumas fontes com informações sobre o "truque" / "solução" que eu mencionei ...

http://archlinux.org.ru/forum/topic/2219/ http://nerdbynature.de/s9y/2015/06/09/VirtualBox-switching-to-Host-only-networking https://sobrelinux.info/questions/812/in-virtualbox-how-do-i-set-up-host-only-virtual-machines-that-can-access-the-in"https://cuckoo.sh/docs/installation/host/routing.html" rel="nofollow noreferrer">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 and host-only connection https://unix.stackexchange.com/questions/74663/virtualbox-nat-host-only-adapter https://www.howtogeek.com/howto/4922/week-in-geek-the-fixing-slow-internet-in-virtualbox-xp-guest-edition/ https://www.rffuste.com/tag/cuckoo/ https://www.virtualbox.org/manual/ch06.html

Abaixo estão alguns dos MUITOS exemplos que testei ...

 > --------------------------------------------
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
 < --------------------------------------------
    
por Eduardo Lucio 04.08.2017 / 00:34

1 resposta

2

INTRODUÇÃO

É um guia completo para ter os acessos "VM < - > Host", "VM1 < - > VM2" e "VM - > Internet" nos convidados usando uma única interface de rede ("host -only ") no VirtualBox.

IMPORTANTE: Execute todos os comandos como "root".

EXECUTAR EM HOST

NOTA: Nós usamos um host Manjaro (baseado em Arch) como modelo. Você pode precisar de ajustes e alterações em outras distros.

Você precisa copiar o arquivo de configuração do modelo iptables ...

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

... então você pode iniciar o "iptables.service".

Ativar e iniciar "iptables.service" ...

$ systemctl enable --now iptables.service

Ativar o encaminhamento de IP ...

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

Adicione as seguintes regras do iptables. Isso encaminhará pacotes através do host ("vboxnet0") e para a internet ...

MODELO 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

... OU adicione as seguintes regras do iptables ...

MODELO 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: No "TEMPLATE II" você não precisa informar o nome da interface do host ( <HOST_INTERFACE_WITH_INTERNET> ) e o nome da interface do VirtualBox ( vboxnet0 ). Dessa forma, qualquer interface de host que tenha internet funcionará, isto é, não preciso ajustar o nome da interface que tem internet sempre que ela for alterada. Um exemplo disso é quando mudamos da interface com fio (por exemplo: enp4s0f2) para a interface sem fio (por exemplo: wlp3s0) e vice-versa.

OUTRAS PERGUNTAS: Eu apresentei duas maneiras de configurar o "iptables" porque eu não sei se há alguma vantagem em usar o "TEMPLATE I". Algum comentário?

DICA: Para descobrir o nome da interface de rede ( <HOST_INTERFACE_WITH_INTERNET> ) que tem internet, use o comando "ip a".

Salve regras na configuração do iptables e reinicie o serviço ...

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

Ativar e iniciar o "dnsmasq" no host ...

$ systemctl enable --now dnsmasq.service

NOTA: "dnsmasq" é um proxy DNS de cache pequeno e um servidor DHCP / TFTP.

EXECUTAR EM CONVIDADO

NOTA: Nós usamos um convidado do CentOS 7 como modelo. Você pode precisar de ajustes e alterações em outras distros.

Configure a interface de rede de acordo com o modelo ...

NOTA: O arquivo de configuração de rede está no caminho da pasta "/ 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=

Por exemplo:

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=

Reinicie o serviço de rede ...

$ systemctl restart network.service

Para testar ...

$ curl http://www.google.com

REFERÊNCIA

por 05.08.2017 / 22:01