La mejor manera de configurar Ubuntu 20.04 Dekstop Host y Ubuntu 20.04 Server Guest para tener acceso a Internet, SSH y comunicación de host a invitado

La mejor manera de configurar Ubuntu 20.04 Dekstop Host y Ubuntu 20.04 Server Guest para tener acceso a Internet, SSH y comunicación de host a invitado

ACTUALIZAR
En cualquier caso, si alguien se topa con esta publicación. La solución a continuación, de hecho, funciona; los votos negativos para esta pregunta sin ningún comentario/crítica constructiva o identificación de errores parecen injustificados.

Meta

Necesito la mejor manera de configurar el servidor ubuntu vbox6.1 invitado para tener acceso a Internet y habilitar el host de escritorio ubuntu 20.04 para ingresar mediante ssh al cuadro.

Progreso / Investigación
Si bien es una solución muy común utilizar combinaciones de 2 adaptadores de red con servidores de virtualbox para establecer comunicaciones entre host e invitados y acceso a Internet para virtualbox, estos métodos comunes tienen ciertas advertencias.

Método combinado de adaptador puenteado y adaptador NAT: con mucho, el método más fácil y rápido, pero viene con la advertencia de que si usa un interruptor de apagado con su firewall/VPN UFW, muy a menudo tendrá que ajustar la configuración del firewall en función de qué wi-fi red a la que está conectado porque las direcciones de puerta de enlace cambian (problema común para quienes usan direcciones IP estáticas en vbox). Si eres muy bueno con las reglas del firewall, entonces este método es para ti.

Método combinado de adaptador NAT y adaptador solo de host: el adaptador nat proporciona fácil acceso a Internet dentro de la caja y el adaptador solo de host proporciona comunicaciones de host invitado para aplicaciones como apache. La advertencia aquí es que algunas aplicaciones se configuran según la dirección IP del adaptador principal durante la instalación (este es mi problema actual) y como la dirección IP NAT no puede comunicarse con el host, esto crea un problema.

La solución en la que estoy trabajando, que quizás sea un poco difícil de configurar inicialmente, es configurar un adaptador solo de host para tener acceso a Internet a través del adaptador de red principal del host.

SIGNIFICADO
UNOAdaptador vboxnet0 solo para host para proporcionar ssh, comunicación host-huésped y acceso externo a Internet para tantas vboxes como desee con ips estáticas o dinámicas... no más dolores de cabeza por conectividad de vbox.

Aquí están los pros y los contras junto con mis pasos de progreso.

Paso 1
Cree un adaptador de solo host para su máquina (vboxnet0). El mío tiene la dirección IP 192.168.51.1.

PRO:
tiene la opción de habilitar el servidor DHCP si planea tener múltiples vboxes en el mismo adaptador de solo host

Paso 2:
Cree una configuración de IP estática para su vbox (la mía es el servidor Ubuntu 20.04). Opcionalmente, puedes omitir este paso y simplemente usar una IP dinámica.

estoy 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
Con una IP estática en su máquina, puede SSH en la caja, sin el uso de un segundo adaptador NAT.

Paso tres

Cree una regla de firewall UFW sencilla y mínima para las comunicaciones entre el anfitrión y el huésped

Esto es todo lo que se necesita para configurar un adaptador de solo host para que funcione con UFW:

ufw allow allow in|out on vboxnet0

Pro

  • Con este método, puede crear instantáneamente comunicaciones host-invitado para múltiples vboxes usando una única regla de firewall siempre que cada cuadro esté en vboxnet0 (excelente si planea crear muchas vboxes que necesiten comunicación host-invitado)

Paso cuatro
Crearpermanenteacceso a Internet para vboxnet0 compartiendo el adaptador de red principal de la máquina host usando MASQUERADE

esta es mi actualPROBLEMA. Sólo puedo crear acceso temporal a Internet para vboxnet0 porque simplemente no estoy lo suficientemente familiarizado con las tablas de IP y MASQUERADE.

Como solución temporal, estoy usando estos 4 comandos dentro de un 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

Donde wg0 es el adaptador de red principal de mi máquina host.

En este punto, debería poder hacer ping a 8.8.8.8 desde dentro de vbox para asegurarse de que tenga acceso a Internet.

Obtuve los comandos anteriores de:
https://help.ubuntu.com/community/Internet/ConnectionSharing

¿Alguien puede terminar/pulir el método del adaptador de solo host para crear acceso a Internet para uno o varios vboxes?

Parece que esto podría ayudar a muchos usuarios de ubuntu. Con este método tus vboxes son "red portátil" y tener acceso a Internet con el mínimo esfuerzo después de la configuración inicial.

El únicocontrasEstos son: Configuración inicial difícil y otras máquinas en su LAN no pueden acceder a los vboxes, lo cual es insignificante si solo está realizando desarrollo web local.

Respuesta1

Esta solución está destinada a hacer la vida de los desarrolladores de Ubuntu mucho más cómoda y segura. Espero que un administrador y/u otras personas consideren oportuno votar y respaldar mi pregunta original, ya que es una pregunta bastante común para las personas que desean usar Ubuntu para el desarrollo web.

En cualquier caso, recientemente tuve el requisito de software para un adaptador de solo host para virtualbox con acceso a Internet. Lo que significa que el método de adaptador dual ampliamente utilizado no sería suficiente. Mientras resolvía este problema, básicamente me topé con un entorno de desarrollo ubuntu/virtualbox súper seguro, súper conveniente y súper eficiente. Publico todos mis pasos a continuación para ayudar a otros desarrolladores web que buscan un entorno de desarrollo web más eficiente.

En primer lugar, una descripción general rápida:

Método combinado de adaptador puenteado y adaptador NAT

Ventajas:

  • Fácil y rápido de configurar, si domina UFW

Contras:

  • requiere que se configuren 2 interfaces de red dentro del huésped
  • Los invitados con direcciones IP estáticas pueden tener problemas para cambiar las redes Wi-Fi debido a los valores de la puerta de enlace.
  • Requiere una configuración más avanzada del firewall.
  • fomenta el uso de /etc/hostspara resolver nombres de dominio locales (se vuelve engorroso con el tiempo)

Adaptador NAT y adaptador solo de host

Ventajas:

  • Fácil de configurar
  • Configuración mínima del cortafuegos

Contras:

  • requiere que se configuren 2 interfaces de red dentro del huésped
  • algunos paquetes de software utilizan IP predeterminada en la instalación, por lo que las direcciones predeterminadas 10.XXX no son adecuadas
    (en mi situación, crear una dirección NAT personalizada a través de las preferencias de virtualbox no ayudaría, ya que mi software solo se instala en la dirección NAT predeterminada y la dirección NAT no es enrutable, accesible al host)
  • Requiere una configuración más avanzada del firewall.
  • fomenta el uso de /etc/hostspara resolver nombres de dominio locales (se vuelve engorroso con el tiempo)

La solución más eficiente:
Adaptador de host único con acceso a Internet.

Adaptador solo de host w. método de acceso a internet

Ventajas:

  • Adaptador único para todos los invitados.
  • configuración de firewall simplificada
  • networking simplificado de invitados
  • Los invitados se comportan más como servidores de producción que generalmente tienen una única interfaz de red "eth0".
  • eliminación completa del /etc/hostsuso

Contras:

  • configuración inicial más difícil.

Una vez entendido lo anterior, comencemos:

Asumiré:

  1. tienes instalada la última versión de virtualbox
  2. usted tiene unCortafuegos UFW con VPN KillSwitchya configurado. (Preste atención a la sección IP Masquerade, la volveremos a visitar).
  3. Ya creó un servidor invitado en virtualbox y agregó una clave de publicación ssh para su usuario.
  4. Un proyecto web listo para el acceso web dentro de su invitado con un dominio que termina en ".test" (es decir www.ejemplo.prueba)

Paso 1

Encaja virtual>Archivos>Administrador de red de hostcree un adaptador de solo host para su máquina (es decir, vboxnet0). Para esta guía, la mía tendrá la dirección IP 192.168.51.1

Paso 2

EnVirtualbox > Configuración > Red, haga clic en "Habilitar adaptador" para Adaptador 1 y para "Adjunto a"seleccione el nombre de vboxnet0 que creó en "Paso 1"

Paso 3

Cree una configuración de IP estática para su servidor invitado (el mío es el servidor Ubuntu 20.04). Esto es necesario para ssh y la resolución de nombres de dominio, pero puede usar IP dinámica si no necesita ssh/dns.

Para Ubuntu Server, estoy usando:

network:
  version: 2
  renderer: networkd
  ethernets:
        enp0s3:
            addresses: ['192.168.51.47/24']
            gateway4: 192.168.51.1  #**NOTE** Your vboxnet0 ip address is the gateway for your static ip address.
            nameservers:
                addresses: [127.0.0.1, 192.168.51.1, 8.8.8.8]

Recordar
Ejecute #netplan applyy/o #netplan --debug generateencuentre sus errores tipográficos y.

Reinicie su invitado para asegurarse de que la configuración surta efecto.

Paso cuatro

Cree una regla de firewall UFW mínima y sencilla que permita las comunicaciones entre el anfitrión y el huésped. Esto es todo lo que se necesita para configurar un adaptador de solo host para que funcione con UFW:

$sudo ufw allow in on vboxnet0 && sudo ufw allow out on vboxnet0

En este punto, debe hacer ping a la IP estática de su invitado desde el host y conectarse mediante ssh al host.

Prueba con: ssh -p 22 -i ~/.ssh/id_rsa root@your-guest's-static-ip address

ping -c 5 your-guest's-static-ip address

Paso cinco

Cree acceso permanente a Internet para vboxnet0 compartiendo el adaptador de red principal de la máquina host usando MASQUERADE. Cuando configuró su interruptor de interrupción de VPN, tuvo que usar enmascaramiento de IP para la dirección de su VPN editando /etc/ufw/before.rules, editaremos este archivo nuevamente.

sudo nano /etc/ufw/before.rules

En esta sección del archivo:

#NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]

Agregar:

-A POSTROUTING -s 192.168.51.1/24 -j MASQUERADE#NOTAesta es la dirección IP de su adaptador exclusivo de host vboxnet0, que actúa como puerta de enlace para la dirección IP estática de su invitado.

Cerrar y guardar el archivo

Ahora todo el tráfico 192.168.51.1 se enviará a través de la interfaz de red principal del host incluso si cambia (es decir, wi-fi versus lan).

Puedes probar esto accediendo a tu invitado vbox y en la línea de comando, ejecutando:
ping -c 5 8.8.8.8

Si tiene éxito, su adaptador exclusivo de host ahora tendrá acceso a Internet.

Paso 6

Este es el paso final y, con diferencia, el más complejo. En este punto, lo único que debe hacerse para que su entorno de desarrollo web virtualbox esté listo para su uso es instalar y configurar dnsmasq para que los nombres de dominio de su servidor invitado puedan resolverse localmente.Barra lateralObviamente, dnsmasq se puede utilizar con los métodos combinados de adaptador de red mencionados anteriormente para eliminar el uso de /etc/hosts, pero cuando se utiliza un único adaptador de host único, se requiere dnsmasq para resolver los nombres de dominio locales.

  1. Deshabilitar y detener systemd resuelto

    $ sudo systemctl desactivar systemd-resuelto
    $ sudo systemctl detener systemd-resuelto

  2. Eliminar enlace simbólico /etc/resolv.confy eliminar el archivo

    $ ls -lh /etc/resolv.conf
    $ sudo rm /etc/resolv.conf

  3. Crea un nuevo / etc/resolv.concon los siguientes valores:

    $ sudo bash -c 'echo "nameserver 127.0.0.1" > /etc/resolv.conf' #(resolución de nombres de dominio en la máquina host)

    $ sudo bash -c 'echo "nameserver 208.67.222.222" >> /etc/resolv.conf' #(IP del servidor dns público OpenDNS para Internet externo)

    $ sudo bash -c 'echo "servidor de nombres dirección IP estática de su huésped" >> /etc/resolv.conf'

  4. Instalar dnsmasq

    $ sudo apto instalar dnsmasq

  5. Agregue .test al archivo de configuración dnsmasq:

    $ sudo bash -c 'echo "dirección=/.test/dirección IP estática de su huésped" >> /etc/dnsmasq.conf'

NOTA: Las personas que desarrollan sitios múltiples de WordPress que necesitan una resolución de dominio comodín pueden usar:

$ sudo bash -c 'echo "address=/example.test/your-guest's-static-ip address" >> /etc/dnsmasq.conf'
  1. Cree un solucionador de directorio para la dirección IP estática del invitado:

    $sudo mkdir -v /etc/resolver && sudo bash -c 'echo "servidor de nombres dirección IP estática de su huésped" > /etc/resolver/test'

  2. Reinicie dnsmasq y network-manager

    $ sudo systemctl reiniciar dnsmasq $ sudo systemctl reiniciar administrador de red

  3. Pruebe su configuración de dnsmasq

a.) abra su navegador y confirme que todavía tiene acceso externo a Internet

b.) ejecute, dig example.testdebería poder ver la dirección IP estática de su servidor invitado

c.) en el navegador de su máquina host, abra example.test

¡ESTALLIDO!Hecho.

Con este entorno de desarrollo web, puede cambiar las redes Wi-Fi a voluntad sin problemas con la dirección IP de ufw/invitado, solo tiene un adaptador de host exclusivo que puede utilizar en todos los invitados futuros que cree, conectar en red a los invitados más fácilmente y dejar de usarlos por completo. el /etc/hostsarchivo para resolver nombres de dominio locales para sus proyectos, ya que dnsmasq lo hace automáticamente.

Mis fuentes:
https://unix.stackexchange.com/questions/304050/how-to-avoid-conflicts-between-dnsmasq-and-systemd-resolved
https://brunopaz.dev/blog/configurar-un-servidor-dns-local-para-tus-proyectos-en-linux-con-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

información relacionada