为什么我无法通过接口 IP 地址访问 ng?

为什么我无法通过接口 IP 地址访问 ng?

我正在尝试使用 VirtualBox 设置 Ubuntu Linux VM 来模拟我正在开发的服务器。该服务器有三个网络接口。

在服务器上,有一个由 Mosquitto 托管的网页ng和一个实例。我们希望这些可以从一个接口(管理接口)访问,但不能从其他两个接口访问。我们使用 VRF 来隔离管理接口。

VirtualBox 适配器配置为:

  • 适配器 1 - 仅主机适配器(旨在用作管理接口)。在虚拟机中,它是 ensp0s3,地址为 192.168.56.104。
  • 适配器 2 - NAT。在 VM 中,它是 enp0s8,地址为 10.0.3.15。
  • 适配器 3 - NAT。在 VM 中,它是 enp0s9,地址为 10.0.4.15。

在仅主机网络上,主机是 192.168.56.103。

在虚拟机中我不关心隔离,但我遇到了无法从主机访问网页的问题。

该网页由端口 4200 提供服务ng serve --host 0.0.0.0 --disable-host-check,配置将其放在端口 4200 上。我理解 0.0.0.0 的意思是“所有地址”。

lsof显示:

$ 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)

netstatss显示类似的开放绑定:

$ 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:*

http://192.168.56.104:4200但尝试在主机浏览器中导航时会出现“连接被拒绝”的情况。

我知道这不是网络可达性的问题,因为

  1. 我可以ping从主机访问虚拟机
  2. 我可以ssh从主机进入虚拟机
  3. 如果我watch -n 1 "ifconfig enp0s3"在虚拟机中执行此操作,我会看到每次刷新浏览器时计数器都会增加几个数据包。

在虚拟机中,curl http://0.0.0.0:4200两者curl http://127.0.0.1:4200都返回页面,但curl http://192.168.56.104显示:

curl:(7)无法连接到 192.168.56.104 端口 4200:连接被拒绝

我似乎没有在虚拟机上被阻止,因为sudo ufw status它显示“状态:不活动”并且sudo iptables-save显示:

# 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

我可能认为这是一件奇怪的ng事情,但我发现 VM 中的 MQTT 代理也出现了同样的故障。

那么,当绑定到 0.0.0.0 时,为什么我不能使用主机或curl虚拟机上的浏览器中的“真实” IP 地址?

相关内容