ATUALIZAÇÃO
Em qualquer caso, alguém deve tropeçar neste post. A solução abaixo, de fato, funciona, votar para baixo para esta questão sem qualquer feedback / crítica construtiva ou identificação de erros parece injustificado.
Meta
Eu preciso da melhor maneira de configurar o convidado vbox6.1 do servidor ubuntu para ter acesso à Internet e habilitar o host de desktop ubuntu 20.04 para ssh na caixa.
Progresso / Pesquisa
Embora seja uma solução muito comum usar 2 combinações de adaptadores de rede com servidores de caixa virtual para estabelecer comunicações host-hóspede e acesso à Internet para a caixa virtual, esses métodos comuns têm algumas ressalvas.
método de combinação de adaptador em ponte e adaptador NAT - de longe o método mais fácil e rápido, mas vem com a ressalva de que, se você usar um killswitch com seu firewall / VPN UFW, muitas vezes precisará ajustar as configurações do firewall com base em qual wi-fi rede à qual você está conectado porque os endereços do gateway mudam (problema comum para aqueles que usam endereços IP estáticos no vbox). Se você é muito bom com regras de firewall, então este método é para você.
Método de combinação de adaptador NAT e adaptador somente host - O adaptador nat fornece acesso fácil à Internet dentro da caixa e o adaptador somente host fornece comunicações de host convidado para aplicativos como o apache. A ressalva aqui é que alguns aplicativos se configuram com base no endereço IP do adaptador primário na instalação ( esse é meu problema atual ) e como o endereço IP NAT não pode se comunicar com o host, isso cria um problema.
A solução em que estou trabalhando, que talvez seja um pouco difícil de configurar inicialmente, é configurar um adaptador somente de host para ter acesso à Internet por meio do adaptador de rede principal do host.
SIGNIFICADO
UM adaptador somente host vboxnet0 para fornecer ssh, comunicação host-convidado e acesso externo à Internet para quantas vboxes você quiser com ips estáticos ou dinâmicos... sem mais dores de cabeça de conectividade vbox.
Aqui estão os prós e contras junto com minhas etapas de progresso.
Step1
Crie um adaptador somente host para sua máquina (vboxnet0) O meu tem o endereço IP de 192.168.51.1
PRO:
você tem a opção de habilitar o servidor DHCP se planeja ter várias vboxes no mesmo adaptador somente host
Etapa 2:
crie uma configuração de ip estático para o seu vbox (o meu é o servidor Ubuntu 20.04). Você pode, opcionalmente, pular esta etapa e usar apenas um ip dinâmico
estou usando
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
addresses: ['192.168.51.47/24']
gateway4: 192.168.51.1
nameservers:
addresses: [127.0.0.1, 192.168.51.1, 8.8.8.8]
Pro
Com um ip estático em sua máquina você pode fazer SSH na caixa, sem o uso de um segundo adaptador NAT.
Passo três
Crie uma regra de firewall UFW fácil e mínima para comunicações host-convidado
Isso é tudo o que é necessário para configurar um adaptador somente host para funcionar com o UFW:
ufw allow allow in|out on vboxnet0
Pró
- Usando esse método, você pode criar instantaneamente comunicações host-convidado para várias vboxes usando uma única regra de firewall, desde que cada caixa esteja em vboxnet0 (ótimo se você planeja fazer muitas vboxes que precisam de comunicação host-convidado)
Etapa quatro
Criar acesso permanente à Internet para vboxnet0 compartilhando o adaptador de rede principal da máquina host usando MASQUERADE
Este é o meu PROBLEMA atual . Só posso criar acesso temporário à Internet para vboxnet0 porque não estou familiarizado o suficiente com tabelas de ip e MASQUERADE.
Como solução temporária, estou usando esses 4 comandos dentro de um script bash:
sudo iptables -A FORWARD -o wg0 -i vboxnet0 -s 192.168.51.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 wg0 -j MASQUERADE
Onde wg0 é o adaptador de rede principal da minha máquina host.
Neste ponto, você deve ser capaz de executar ping 8.8.8.8 de dentro do vbox para ter certeza de que ele tem acesso à Internet.
Eu recebi os comandos acima de:
https://help.ubuntu.com/community/Internet/ConnectionSharing
Alguém pode terminar / polir o método do adaptador somente host para criar acesso à Internet para um ou vários vboxes?
Parece que isso pode ajudar muitos usuários do Ubuntu. Com este método suas vboxes são " portáteis de rede " e têm acesso à internet com o mínimo de esforço após a configuração inicial.
Os únicos contras aqui são: Configuração inicial difícil e vboxes não são acessíveis a outras máquinas em sua LAN, o que é insignificante se você estiver apenas desenvolvendo web local.
Esta solução destina-se a tornar a vida dos desenvolvedores do Ubuntu muito mais conveniente e segura. Espero que um administrador e/ou outros considerem adequado votar na minha pergunta original de volta, pois é uma pergunta bastante comum para pessoas que desejam usar o Ubuntu para desenvolvimento web.
De qualquer forma, recentemente tive o requisito de software para um adaptador somente host para caixa virtual com acesso à Internet. O que significa que o método de adaptador duplo amplamente utilizado não seria suficiente. Ao resolver esse problema, essencialmente me deparei com um ambiente de desenvolvimento ubuntu/virtualbox super seguro, super conveniente e super eficiente. Estou postando todos os meus passos abaixo para ajudar outros desenvolvedores web que estão buscando um ambiente de desenvolvimento web mais eficiente.
Antes de mais nada, uma rápida visão geral:
Método de combinação de adaptador em ponte e adaptador NAT
Prós:
Contras:
/etc/hosts
para resolver nomes de domínio locais (fica complicado com o tempo)Adaptador NAT e adaptador somente host
Prós:
Contras:
(na minha situação, criar um endereço NAT personalizado através das preferências do virtualbox não ajudaria, pois meu software é instalado apenas no endereço NAT padrão e o endereço NAT não é roteável, acessível ao host)
/etc/hosts
para resolver nomes de domínio locais (fica complicado com o tempo)A Solução Mais Eficiente:
Adaptador de host único com acesso à Internet.
adaptador somente host w. método de acesso à internet
Prós:
/etc/hosts
usoContras:
Com o acima entendido, vamos começar:
vou assumir:
Passo 1
Em Virtualbox > Files > Host Network Manager, crie um adaptador somente host para sua máquina (ou seja, vboxnet0) Para este guia, o meu terá o endereço IP de 192.168.51.1
Passo 2
Em Virtualbox > Configurações > Rede , clique em " Ativar adaptador " para o Adaptador 1 e para " Anexado a " selecione o nome vboxnet0 que você criou na " Etapa 1 "
etapa 3
Crie uma configuração de ip estático para o seu servidor convidado (o meu é o servidor Ubuntu 20.04). Isso é necessário para ssh e resolução de nomes de domínio, mas você pode usar ip dinâmico se não precisar de ssh/dns.
Para o Ubuntu Server, estou usando:
Lembre
-se de Executar
#netplan apply
e/ou#netplan --debug generate
para encontrar seus erros de digitação e erros.Reinicie seu convidado para garantir que as configurações tenham efeito.
Passo Quatro
Crie uma regra de firewall UFW fácil e mínima para permitir comunicações host-convidado. Isso é tudo o que é necessário para configurar um adaptador somente host para funcionar com o UFW:
$sudo ufw allow in on vboxnet0 && sudo ufw allow out on vboxnet0
Neste ponto, você deve pingar o ip estático do seu convidado do host e ssh no host.
Teste com:
ssh -p 22 -i ~/.ssh/id_rsa root@your-guest's-static-ip address
ping -c 5 your-guest's-static-ip address
Quinto Passo
Crie acesso permanente à Internet para vboxnet0 compartilhando o adaptador de rede principal da máquina host usando MASQUERADE. Quando você configurou seu vpn killswitch, você teve que usar o mascaramento de ip para o endereço da sua vpn editando
/etc/ufw/before.rules
, editaremos este arquivo novamente.sudo nano /etc/ufw/before.rules
Nesta seção do arquivo:
Adicionar:
-A POSTROUTING -s 192.168.51.1/24 -j MASQUERADE
# OBSERVE este é o endereço IP do seu adaptador somente host vboxnet0, que atua como gateway para o endereço IP estático do seu convidado.Fechar e salvar o arquivo
Agora todo o tráfego 192.168.51.1 será enviado através da interface de rede primária do host, mesmo que mude (ou seja, wi-fi vs lan)
Você pode testar isso acessando seu convidado vbox e na linha de comando, executando:
ping -c 5 8.8.8.8
Se for bem-sucedido, seu adaptador somente de host agora terá acesso à Internet.
Etapa 6
Este é o passo final e de longe o mais complexo. Neste ponto, a única coisa que precisa ser feita para que seu ambiente de desenvolvimento web do virtualbox esteja pronto para uso é instalar e configurar o dnsmasq para que os nomes de domínio do seu servidor convidado possam ser resolvidos localmente. O dnsmasq da barra lateral obviamente pode ser usado com os métodos de adaptador de rede combinados mencionados acima para eliminar o uso de ,
/etc/hosts
mas ao usar um único adaptador somente de host, o dnsmasq é necessário para resolver nomes de domínio locais.Desativar e parar o systemd resolvido
$ sudo systemctl disable systemd-resolved
$ sudo systemctl stop systemd-resolved
Remova o link simbólico
/etc/resolv.conf
e remova o arquivo$ ls -lh /etc/resolv.conf
$ sudo rm /etc/resolv.conf
Crie um novo /
etc/resolv.con
com os seguintes valores:$ sudo bash -c 'echo "nameserver 127.0.0.1" > /etc/resolv.conf' #(resolução da máquina host de nomes de domínio)
$ sudo bash -c 'echo "nameserver 208.67.222.222" >> /etc/resolv.conf' #(IP do servidor DNS público OpenDNS para internet externa)
$ sudo bash -c 'echo "nameserver your-guest's-static-ip address" >> /etc/resolv.conf'
Instalar dnsmasq
$ sudo apt instalar dnsmasq
Adicione .test ao arquivo de configuração dnsmasq:
$ sudo bash -c 'echo "address=/.test/your-guest's-static-ip address" >> /etc/dnsmasq.conf'
NOTA : As pessoas que desenvolvem multisites wordpress que precisam de resolução de domínio curinga podem usar:
Crie um resolvedor de diretório para o endereço IP estático do convidado:
$ sudo mkdir -v /etc/resolver && sudo bash -c 'echo "nameserver your-guest's-static-ip address" > /etc/resolver/test'
Reinicie o dnsmasq e o gerenciador de rede
$ sudo systemctl restart dnsmasq $ sudo systemctl restart network-manager
Teste sua configuração de dnsmasq
a.) abra seu navegador e confirme que você ainda tem acesso externo à internet
b.) execute
dig example.test
, você poderá ver o endereço IP estático do seu servidor convidadoc.) no navegador da sua máquina host, abra example.test
BANG! Feito.
Com este ambiente de desenvolvimento web, você pode alterar as redes wi-fi à vontade, sem problemas de endereço IP ufw/guest, você tem apenas um adaptador somente host que você usa em todos os futuros convidados que você cria, mais facilmente os convidados da rede juntos e pare completamente de usar o
/etc/hosts
arquivo para resolver nomes de domínio locais para seus projetos, pois isso é feito automaticamente pelo dnsmasq.Minhas fontes:
https://unix.stackexchange.com/questions/304050/how-to-avoid-conflicts-between-dnsmasq-and-systemd-resolved
https://brunopaz.dev/blog/setup-a-local- dns-server-for-your-projects-on-linux-with-dnsmasq/
https://www.stevenrombauts.be/2018/01/use-dnsmasq-instead-of-etc-hosts/#configure-dnsmasq
https: //linuxize.com/post/how-to-setup-a-firewall-with-ufw-on-ubuntu-20-04/
https://superuser.com/questions/1237463/virtualbox-host-only-with- internet
https://www.stevenrombauts.be/2018/01/use-dnsmasq-instead-of-etc-hosts/#configure-dnsmasq https://medium.com/soulweb-academy/docker-local-dev-stack -with-traefik-https-dnsmasq-locally-trusted-certificate-for-ubuntu-20-04-5f036c9af83d