VirtualBox를 사용하여 개발 중인 서버를 에뮬레이션하기 위한 Ubuntu Linux VM을 설정하려고 합니다. 서버에는 세 개의 네트워크 인터페이스가 있습니다.
서버에는 ng
Mosquitto가 호스팅하는 웹페이지와 인스턴스가 있습니다. 우리는 이러한 기능을 하나의 인터페이스인 관리 인터페이스에서만 사용할 수 있기를 원하지만 다른 두 인터페이스에서는 사용하지 않기를 원합니다. 우리는 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)
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
다음과 같이 말합니다.
컬: (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 주소를 사용할 수 없는 이유는 무엇입니까 ?