Estou tentando usar o VirtualBox para configurar uma VM Ubuntu Linux para emular o servidor para o qual estou desenvolvendo. O servidor possui três interfaces de rede.
No servidor, há uma página web hospedada ng
e uma instância do Mosquitto. Queremos que eles estejam disponíveis em uma interface, a interface de gerenciamento, mas não nas outras duas. Usamos um VRF para isolar a interface de gerenciamento.
Os adaptadores VirtualBox estão configurados para:
- Adaptador 1 - Adaptador somente de host (destina-se a ser a interface de gerenciamento). Na VM é ensp0s3 com endereço 192.168.56.104.
- Adaptador 2 - NAT. Na VM é enp0s8 com endereço 10.0.3.15.
- Adaptador 3 - NAT. Na VM é enp0s9 com endereço 10.0.4.15.
Na rede somente host, o host é 192.168.56.103.
Na VM, não me importo com o isolamento, mas estou enfrentando um problema em que não consigo acessar a página da Web no computador host.
A página da web é atendida ng serve --host 0.0.0.0 --disable-host-check
e a configuração a coloca na porta 4200. Entendo que 0.0.0.0 significa "todos os endereços".
lsof
mostra:
$ 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
e ss
mostrar ligações abertas semelhantes:
$ 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:*
Mas tentar navegar http://192.168.56.104:4200
em um navegador no computador host dá "conexão recusada".
Eu sei que não é um problema de acessibilidade da rede porque
- Eu posso
ping
a VM do host - Posso
ssh
entrar na VM a partir do host - Se eu fizer isso
watch -n 1 "ifconfig enp0s3"
na VM, vejo os contadores incrementarem alguns pacotes cada vez que atualizo o navegador.
Na VM, curl http://0.0.0.0:4200
e curl http://127.0.0.1:4200
ambos retornam a página mas curl http://192.168.56.104
diz:
curl: (7) Falha ao conectar à porta 192.168.56.104 4200: Conexão recusada
Parece que não estou bloqueado na VM porque sudo ufw status
diz "Status: inativo" e sudo iptables-save
diz:
# 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
Posso pensar que isso foi algo estranho, ng
mas vejo as mesmas falhas com um corretor MQTT na VM.
Então, quando vinculado a 0.0.0.0, por que não posso usar o endereço IP "real" de um navegador no host ou curl
na VM?