VirtualBox Network
VirtualBox로 가상 머신을 생성하게 되면 기본적으로 NAT 모드로 설정되어 있으며 아래와 같이 다른 설정들도 존재합니다.
- 어댑터에 브리지
- 내부 네트워크
- 호스트 전용 어댑터
- 일반 드라이버
- NAT 네트워크
- Cloud Network
- 연결되지 않음
연결되지 않음
- 해당 모드는 네트워크 카드는 존재하지만 마치 케이블을 꼽지 않은 것과 같이 연결하지 않은 것과 같습니다.
NAT (Network Address Translation)
- 가상머신 내부 네트워크 -> Host PC 외부 네트워크 단방향 통신 가능
- Host PC 내의 가상 머신 간의 통신 불가능
해당 모드는 기본 선택사항으로 가상 머신 내에서 단 순히 인터넷 사용이나 파일 다운로드와 같은 용도로만 사용할 경우 설정이 가능하다. 가상 머신 내에서는 자체 사설 IP 주소를 사용하지만 실제 외부로 나갈 때는 Host PC가 가진 IP 주소를 바꿔 달고 나가게 된다. Host PC의 외부 네트워크에서는 내부의 가상 머신에 접근 불가능합니다.
즉, 아래 그림과 같이 NAT 모드일 경우 192.168.0.1의 주소를 사용하는 가상 머신은 외부 네트워크와 통신할 때 123.123.123.x 주소를 달고 외부와 통신하게 됩니다. 반면 192.168.0.x의 주소를 가진 다른 가상 머신들과는 통신이 불가능합니다.
NAT Network
- 가상머신 내부 네트워크 -> Host PC 외부 네트워크 단방향 통신 가능
- Host PC 내의 가상 머신 간의 통신 가능
해당 모드는 NAT와 거의 동일하지만 Host PC 내의 가상 머신끼리 통신이 가능하다는 점이 다르다. 가상 머신간에 상호 통신이 필요한 작업이 있다면 해당 모드를 사용해야 한다.
Nat Network의 경우는 아래 그림과 같이 NAT와 동일하지만 192.168.0.x의 주소를 가진 다른 가상 머신들과도 통신이 가능하다는 점이 다르다.
브리지 어댑터 (Bridged Adapter)
- Host PC와 동등한 수준의 네트워크 구성
- 추가 아이피 할당 필요
해당 모드는 가상 머신의 네트워크를 Host PC와 동등 수준으로 구성할 수 있게 해준다. 즉, Host PC의 네트워크가 192.168.0.2로 설정이 되어 있다면 가상 머신의 네트워크 또한 192.168.0.4 정도로 같은 네트워크로 설정할 수 있는 것이다.
실제 물리적인 네트워크 인터페이스는 Host PC의 Ethernet 카드 하나밖에 없지만 어떻게 Host PC와 가상 머신의 네트워크를 구분할까?
VirtualBox의 Manual에 따르면 소위 "net filter"라 불리는 Host PC의 network device driver를 사용하여 구분해 낸다고 한다. 해당 net filter를 통해 가상 머신은 자신의 데이터를 Host PC의 네트워크 카드로부터 분리해내고 삽입하기도 한다.
브리지 어댑터의 경우 아래 그림과 같이 물리적으 로 Host PC내에 존재하지만 Host PC의 주소와 동등한 수준의 별도 주소를 가지고 외부와 통신한다.
내부 네트워크 (Internal Network)
- Host PC와 독립적인 내부 네트워크
- 같은 Host PC 내의 가상 머신 간 연결 가능
해당 모드는 브리지 어댑터와 많은 부분에서 유사하지만 가장 큰 차이점으로 외부와 통신이 되지 않는다는 점이다. Host PC의 네트워크와 분리되어 있고 Host PC내 가상 머신 간에만 상호 연결하여 통신이 가능하며 Host PC의 물리적인 네트워크 인터페이스와 연결되어 있지 않다.
호스트 전용 어댑터 (Host-only Adapter)
- Host PC를 포함한 내부 네트워크 (외부 네트워크와는 단절)
- 같은 Host PC 내의 가상 머신 간 연결 가능
해당 모드는 "브리지 어댑터" 모드와 같이 Host PC와 내부 가상 머신들과 통신이 가능하고 "내부 네트워크" 모드와 같이 외부 네트워크와는 통신이 불가능하다. Host PC의 물리 네트워크 어댑터 외에 별도의 Loopback 어댑터를 생성하여 해당 어댑터를 통해 통신한다.
호스트 전용 어댑터의 경우 아래 그림과 같이 외부 네트워크와는 단절되어 있다.
일반 드라이버 (Generic Driver)
- 거의 사용되지 않는 모드
- UDP Tunnel networking과 VDE(Virtual Distributed Ethernet) 지원
- 호스트의 80번 포트와 컨테이너의 80번 포트로 바인딩하여 컨테이너 생성
docker run -itd -p 80:80 --name port-bindings nginx
- 호스트 로컬에서 웹서버 GET 호출
curl localhost:80
...
curl: (7) Failed to connect to localhost port 80 after 0 ms: Connection refused
원인: 호스트와 컨테이너의 포트는 바인딩되었지만 virtualbox에서 포트 바인딩 설정이 되지 않아 에러 발생 해결: VirtualBox 포트 바인딩 설정
가상머신 접속
minikube ssh
IP 조회
ifconfig
- eth0 inet addr (Guest IP):
10.0.2.15
- VirtualBox의 로컬 주소:
172.17.0.1
- VirtualBox -> 설정 -> 네트워크 -> 고급 -> 포트 포워딩에서 HTTP 설정 추가