私は、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)
netstat
ss
同様のオープンバインディングを表示します。
$ 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
しかし、ホスト コンピューターのブラウザーで移動しようとすると、 「接続が拒否されました」というメッセージが表示されます。
ネットワークの到達可能性の問題ではないことは分かっています。
ping
ホストからVMを操作できるssh
ホストからVMに入ることができます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 にバインドされている場合、ホスト上またはcurl
VM 上のブラウザから「実際の」 IP アドレスを使用できないのはなぜでしょうか?