インターフェース IP アドレスで ng にアクセスできないのはなぜですか?

インターフェース IP アドレスで ng にアクセスできないのはなぜですか?

私は、VirtualBox を使用して、開発対象のサーバーをエミュレートする Ubuntu Linux VM をセットアップしようとしています。サーバーには 3 つのネットワーク インターフェイスがあります。

サーバーには、Mosquitto によってホストされている Web ページngと、Mosquitto のインスタンスがあります。これらを 1 つのインターフェイス (管理インターフェイス) から利用できるようにし、他の 2 つのインターフェイスからは利用できないようにします。VRF を使用して管理インターフェイスを分離します。

VirtualBox アダプタは次のように構成されています。

  • アダプタ 1 - ホスト専用アダプタ (これは管理インターフェイスとして使用されます)。VM では、アドレス 192.168.56.104 の ensp0s3 です。
  • アダプタ 2 - NAT。VM では、アドレス 10.0.3.15 の enp0s8 です。
  • アダプタ 3 - NAT。VM では、アドレス 10.0.4.15 の enp0s9 です。

ホストオンリーネットワークでは、ホストは 192.168.56.103 です。

VM では分離は気にしませんが、ホスト コンピューターから Web ページにアクセスできないという問題が発生しています。

Web ページは によって提供され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ホストからVMを操作できる
  2. sshホストからVMに入ることができます
  3. watch -n 1 "ifconfig enp0s3"VM で実行すると、ブラウザを更新するたびにカウンターが数パケットずつ増加しているのがわかります。

VM では、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ため、VM 上でブロックされていないようです。

# 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 にバインドされている場合、ホスト上またはcurlVM 上のブラウザから「実際の」 IP アドレスを使用できないのはなぜでしょうか?

関連情報