인터페이스 IP 주소로 ng에 연결할 수 없는 이유는 무엇입니까?

인터페이스 IP 주소로 ng에 연결할 수 없는 이유는 무엇입니까?

VirtualBox를 사용하여 개발 중인 서버를 에뮬레이션하기 위한 Ubuntu Linux VM을 설정하려고 합니다. 서버에는 세 개의 네트워크 인터페이스가 있습니다.

서버에는 ngMosquitto가 호스팅하는 웹페이지와 인스턴스가 있습니다. 우리는 이러한 기능을 하나의 인터페이스인 관리 인터페이스에서만 사용할 수 있기를 원하지만 다른 두 인터페이스에서는 사용하지 않기를 원합니다. 우리는 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에서는 격리에 신경 쓰지 않지만 호스트 컴퓨터에서 웹 페이지에 연결할 수 없는 문제가 발생합니다.

웹 페이지는 포트 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호스트에서 VM을 사용할 수 있습니다.
  2. ssh호스트에서 VM에 들어갈 수 있습니다.
  3. watch -n 1 "ifconfig enp0s3"VM에서 그렇게 하면 브라우저를 새로 고칠 때마다 카운터가 몇 개의 패킷을 증가시키는 것을 볼 수 있습니다.

VM에서 curl http://0.0.0.0:4200curl http://127.0.0.1:4200다 페이지를 반환하지만 curl http://192.168.56.104다음과 같이 말합니다.

컬: (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 브로커에서도 동일한 오류가 발생합니다.

curl그렇다면 0.0.0.0에 바인딩된 경우 호스트 또는 VM의 브라우저에서 "실제" IP 주소를 사용할 수 없는 이유는 무엇입니까 ?

관련 정보