Estoy intentando usar VirtualBox para configurar una máquina virtual Ubuntu Linux para emular el servidor para el que estoy desarrollando. El servidor tiene tres interfaces de red.
En el servidor hay una página web alojada ng
y una instancia de Mosquitto. Queremos que estén disponibles desde una interfaz, la interfaz de administración, pero no desde las otras dos. Usamos un VRF para aislar la interfaz de administración.
Los adaptadores VirtualBox están configurados para:
- Adaptador 1: Adaptador solo de host (está destinado a ser la interfaz de administración). En la VM es ensp0s3 con dirección 192.168.56.104.
- Adaptador 2 - NAT. En la VM es enp0s8 con dirección 10.0.3.15.
- Adaptador 3 - NAT. En la VM es enp0s9 con dirección 10.0.4.15.
En la red de solo host, el host es 192.168.56.103.
En la máquina virtual no me importa el aislamiento, pero tengo un problema en el que no puedo acceder a la página web desde la computadora host.
La página web es atendida ng serve --host 0.0.0.0 --disable-host-check
y la configuración la coloca en el puerto 4200. Entiendo que 0.0.0.0 significa "todas las direcciones".
lsof
muestra:
$ sudo lsof | grep :4200
ng\x20ser 30802 root 20u IPv4 330718 0t0 TCP *:4200 (LISTEN)
ng\x20ser 30802 30803 node root 20u IPv4 330718 0t0 TCP *:4200 (LISTEN)
ng\x20ser 30802 30804 node root 20u IPv4 330718 0t0 TCP *:4200 (LISTEN)
ng\x20ser 30802 30805 node root 20u IPv4 330718 0t0 TCP *:4200 (LISTEN)
ng\x20ser 30802 30806 node root 20u IPv4 330718 0t0 TCP *:4200 (LISTEN)
ng\x20ser 30802 30807 node root 20u IPv4 330718 0t0 TCP *:4200 (LISTEN)
ng\x20ser 30802 30808 node root 20u IPv4 330718 0t0 TCP *:4200 (LISTEN)
ng\x20ser 30802 30916 ng\x20ser root 20u IPv4 330718 0t0 TCP *:4200 (LISTEN)
ng\x20ser 30802 30917 ng\x20ser root 20u IPv4 330718 0t0 TCP *:4200 (LISTEN)
ng\x20ser 30802 30918 ng\x20ser root 20u IPv4 330718 0t0 TCP *:4200 (LISTEN)
ng\x20ser 30802 30919 ng\x20ser root 20u IPv4 330718 0t0 TCP *:4200 (LISTEN)
netstat
y ss
mostrar enlaces abiertos similares:
$ sudo netstat -tln | grep :4200
tcp 0 0 0.0.0.0:4200 0.0.0.0:* LISTEN
$ sudo ss -tln | grep :4200
LISTEN 0 511 0.0.0.0:4200 0.0.0.0:*
Pero al intentar navegar http://192.168.56.104:4200
en un navegador en la computadora host aparece "conexión rechazada".
Sé que no es un problema con la accesibilidad de la red porque
- Puedo
ping
la VM desde el host - Puedo
ssh
ingresar a la VM desde el host - Si lo hago
watch -n 1 "ifconfig enp0s3"
en la VM, veo que los contadores incrementan algunos paquetes cada vez que actualizo el navegador.
En la VM, curl http://0.0.0.0:4200
y curl http://127.0.0.1:4200
ambos devuelven la página pero curl http://192.168.56.104
dice:
curl: (7) No se pudo conectar al puerto 192.168.56.104 4200: conexión rechazada
Parece que no estoy bloqueado en la VM porque sudo ufw status
dice "Estado: inactivo" y sudo iptables-save
dice:
# Generated by iptables-save v1.8.4 on Tue Nov 29 14:13:18 2022
*filter
:INPUT ACCEPT [160:15704]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [219:23422]
-A FORWARD -m physdev --physdev-in enp0s8 --physdev-out enp0S9 -j ACCEPT
-A FORWARD -m physdev --physdev-in enp0S9 --physdev-out enp0s8 -j ACCEPT
COMMIT
# Completed on Tue Nov 29 14:13:18 2022
Podría pensar que esto es algo extraño, ng
pero veo los mismos fallos con un broker MQTT en la VM.
Entonces, cuando estoy vinculado a 0.0.0.0, ¿por qué no puedo usar la dirección IP "real" de un navegador en el host o en curl
la VM?