[네트워크] 가상머신에 접속되지 않는 이유로 알아보는 네트워크 : NAT, Bridged의 이해
가상머신을 실행하고 개발 환경을 구성하는 도중, 로컬 컴퓨터에서 해당 가상머신에 접속이 되지 않는 현상을 경험했습니다. 이를 통해 NAT(Network Address Translation)과 Bridged Adapter의 차이를 실습과 함께 체감하게 되었고, 그 개념을 정확히 이해할 필요가 생겼습니다.
가상 머신으로 왜 접속이 안 되었지?
가상 머신 네트워크 설정이 NAT였을 때, 로컬에서 가상 머신으로의 연결이 실패했던 이유는 바로 NAT의 근본적인 동작 방식 때문입니다. NAT는 기본적으로 단방향 통신만 허용하기 때문에, 외부에서 내부로 들어오는 요청을 차단합니다.
- 로컬 컴퓨터는 가상 머신에게 ‘외부’ 입니다.
- 가상 머신은
10.0.2.x
와 같은 가상의 사설 IP를 가지며, 이 주소는 로컬 네트워크에서는 존재하지 않습니다.
따라서 로컬에서 가상 머신으로 접속을 시도하면, 그 요청은 가상 네트워크의 경계를 넘지 못하고 차단됩니다.
먼저 NAT에 대해 알아봅시다
NAT는 어떤 원리로 동작하나요?
- NAT (Network Address Translation)는 말 그대로 네트워크 주소 변환입니다. 하나의 공인 IP 주소를 여러 개의 사설 IP 주소가 공유할 수 있도록 하는 기술입니다. 공인 IP를 받은 공유기에는 NAT 테이블이 존재하여, 사설 IP 주소와 포트 번호를 공인 IP 주소와 포트 번호로 매핑한 정보를 기록합니다.
패킷 교환 과정 (내부 -> 외부)
가장 흔한 경우인, 내부 네트워크에 있는 기기가 외부 인터넷에 접속하는 과정을 단계별로 살펴보겠습니다.
- 요청 패킷 생성:
- 출발지: 내부 IP 주소:랜덤 포트 (예:
192.168.0.10:12345
) - 목적지: 웹 서버의 공인 IP:80 (예:
1.1.1.1:80
) - 내부 기기(PC, 가상 머신 등)가 웹 서버에 접속하기 위해 이런 패킷을 생성하여 공유기로 보냅니다.
- 출발지: 내부 IP 주소:랜덤 포트 (예:
- NAT 장비 도착 및 주소 변환:
- 패킷이 공유기(NAT 장비)에 도착합니다.
- 공유기는 이 패킷이 외부로 나가는 것을 감지하고, 패킷의 출발지 주소를 자신의 공인 IP 주소로 변경합니다.
- 새로운 출발지: 공유기의 공인 IP 주소:새로운 포트 (예:
203.230.1.5:54321
) - 목적지:
1.1.1.1:80
(변화 없음)
- NAT 테이블 기록:
- 공유기는 변환된 정보를 NAT 테이블에 기록합니다.
- 테이블 엔트리:
사설 출발지 (192.168.0.10:12345)
<->공인 출발지 (203.230.1.5:54321)
- 이 기록은 나중에 웹 서버의 응답 패킷을 다시 원래의 내부 기기로 돌려보내기 위해 사용됩니다.
- 외부로 패킷 전송:
- 변환된 패킷이 외부 인터넷으로 전송됩니다.
- 외부 웹 서버는 이 패킷이
203.230.1.5:54321
에서 온 것으로 인식합니다.
패킷 교환 과정 (외부 -> 내부)
이제 웹 서버가 요청에 대한 응답을 보내는 과정을 보겠습니다.
- 응답 패킷 생성:
- 출발지: 웹 서버의 공인 IP:80 (예:
1.1.1.1:80
) - 목적지: 공유기의 공인 IP 주소:새로운 포트 (예:
203.230.1.5:54321
) - 웹 서버는 요청을 보낸 주소(
203.230.1.5:54321
)로 응답 패킷을 보냅니다.
- 출발지: 웹 서버의 공인 IP:80 (예:
- NAT 장비 도착 및 역변환:
- 응답 패킷이 공유기(NAT 장비)에 도착합니다.
- 공유기는 패킷의 목적지 IP와 포트를 보고 NAT 테이블을 조회합니다.
- 테이블을 통해
203.230.1.5:54321
이192.168.0.10:12345
에 매핑되어 있다는 것을 확인합니다. - 공유기는 패킷의 목적지 주소를
192.168.0.10:12345
로 변경합니다. - 새로운 목적지:
192.168.0.10:12345
- 내부로 패킷 전달:
- 역변환된 패킷이 최종적으로 원래 요청을 보냈던 내부 기기에게 전달됩니다.
NAT는 왜 필요한가요?
IPv4 주소는 43억 개로 한정되어 있어 모든 기기에 고유한 공인 IP를 주는 것은 불가능합니다. 따라서 IP 주소를 절약하기 위해 하나의 공유기에 공인 IP 주소를 할당하고, 공유기에 연결된 수십 대의 기기들은 사설 IP를 사용합니다.
NAT의 장점
- 보안 강화: 외부에서 사설 IP를 가진 기기로 직접 접근할 수 없으므로, 내부 네트워크의 보안이 강화됩니다. 또한 외부 공격자가 내부 기기의 IP 주소를 파악하기 어렵게 됩니다.
해결책: 포트 포워딩(Port Forwarding)
NAT 모드에서 외부 접속을 가능하게 하려면 “포트 포워딩” 설정을 해야 합니다. 이는 특정 포트로 들어온 요청을 가상 머신의 특정 포트로 연결해주는 일종의 ‘통로’를 만들어주는 작업입니다.
- 호스트 포트: 외부에서 접속할 때 사용하는 포트
- 게스트 포트: 가상 머신 내부에서 서비스가 실행 중인 포트
NAT의 포트 테이블에 로컬 컴퓨터의 특정 포트를 가상 머신의 특정 포트에 연결하면 연결이 되었었던 것이다!
나의 해결책 : Bridged Adapter
Bridged Adapter 모드는 가상 머신을 독립적인 네트워크 장치로 만듭니다. 가상 머신은 호스트 컴퓨터의 물리적인 랜카드에 직접 연결됩니다.
동작 원리
- 직접 연결: 가상 머신이 호스트 컴퓨터의 물리적 네트워크 어댑터에 직접 연결된 것처럼 동작합니다.
- 독립적인 IP 할당: 가상 머신은 호스트 컴퓨터와 동일한 네트워크 대역에서 별도의 IP 주소(예:
192.168.0.101
)를 할당받습니다. 이는 공유기로부터 직접 받는 IP와 같습니다.
Bridged 모드를 사용하면 로컬 컴퓨터와 가상 머신이 동등한 위치에서 서로를 인식하고 직접 통신할 수 있어, 별도의 포트 포워딩 설정 없이도 모든 종류의 통신이 가능합니다. 이 덕분에 Ping도 정상적으로 성공하게 됩니다.