Почему я не могу связаться с ng по IP-адресу интерфейса?

Почему я не могу связаться с ng по IP-адресу интерфейса?

Я пытаюсь использовать VirtualBox для настройки виртуальной машины Ubuntu Linux для эмуляции сервера, для которого я разрабатываю. На сервере есть три сетевых интерфейса.

На сервере есть веб-страница, размещенная ngи экземпляр Mosquitto. Мы хотим, чтобы они были доступны из одного интерфейса, интерфейса управления, но не из двух других. Мы используем VRF для изоляции интерфейса управления.

Адаптеры VirtualBox настроены для:

  • Адаптер 1 — Host-only Adapter (он предназначен для интерфейса управления). В виртуальной машине это ensp0s3 с адресом 192.168.56.104.
  • Адаптер 2 - NAT. В виртуальной машине это enp0s8 с адресом 10.0.3.15.
  • Адаптер 3 - NAT. В виртуальной машине это enp0s9 с адресом 10.0.4.15.

В сети, состоящей только из хоста, хост — 192.168.56.103.

В виртуальной машине мне не важна изоляция, но я сталкиваюсь с проблемой, когда не могу получить доступ к веб-странице с хост-компьютера.

Веб-страница обслуживается 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в браузере на хост-компьютере приводит к ошибке «подключение отклонено».

Я знаю, что это не проблема доступности сети, потому что

  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но я вижу те же самые сбои с брокером MQTT в виртуальной машине.

Итак, если я привязан к 0.0.0.0, почему я не могу использовать «реальный» IP-адрес из браузера на хосте или curlна виртуальной машине?

Связанный контент