WAN에서 내 컴퓨터로 요청을 보낼 때는 내 컴퓨터가 사용하는 공유기의 Public IP로 접근하게 된다.
여기서 궁금증이 들었다. 만약 공유기 내에 있는 여러 머신들이 같은 포트의 애플리케이션을 열어놓게 된다면, 공유기에서는 내 컴퓨터가 외부에서 요청한 서버인 것을 어떻게 알아차릴 수 있을까?
답은 포트 포워딩(Port Forwarding)이다. 공유기는 사실 모든 머신들의 포트를 외부로 열어주지 않는다. 포트 포워딩이라는 설정이 되어야만 private network에 존재하는 특정 호스트의 특정 애플리케이션을 열어준다.
즉, 외부에서 어디로 접속하면 어떤 머신의 어떤 포트로 연결할지 매핑해 주는 역할이라고 볼 수 있다. private ip의 경우 외부에서 접근할 수 없기 때문에 외부에서 접근하려면 이러한 장치가 필요한 것이다.
머신A, 머신B에 각각 8080포트로 WAS를 열었다고 가정하자. 이때 공유기에서 80포트는 머신A의 8080포트를, 443포트는 머신 B의 8080포트를 포워딩하도록 설정해 놓는다면, 외부에서 80번으로 요청했을 때 A의 WAS에 접속하고 443으로 요청했을 때 B의 WAS에 접속하는 것이다.
이와 관련된 키워드로는 가상 네트워크 모드가 있다. 가장 보편적인 3가지 NAT, Bridge, Host-Only가 있는데 이 개념들도 알아두면 docker 등 나중에 네트워크 설정할 때 쓸모가 있다.
Bridge : 가상머신이 Host와 같은 네트워크에 존재하게 하고 싶은 경우에 사용하게 된다. 가상 NIC가 호스트의 Physical NIC에 연결되기 때문에 외부와 바로 연결될 수 있다.
NAT(Network Address Translation) : 가상머신 프로그램이 빌트인 DHCP 서버를 띄우고, 이 서버를 통해 외부 네트워크와 통신이 가능하다.