서버를 공부하려면 절대 빼놓을 수 없는 개념인 포트 포워딩에 대한 내용을 정리해봤다. 정말 중요한 개념이니 부정확하거나 모호한 내용이 있다면 계속 수정해서 100% 익힐 것이다.
포트 포워딩이 필요한 이유
기존에 스프링 부트나 MySQL을 통해 실행하던 서버는 모두 내부 네트워크에서 사설 IP 주소를 사용하므로 외부에서 접근할 수 없다. 외부에서 접근하려면, 공인 IP 주소를 통해 특정 포트로 들어오는 요청을 내부 네트워크의 특정 장치 1의 특정 애플리케이션으로 전달해야 한다. 이를 위해 필요한 작업이 포트 포워딩이다. 포트 포워딩은 외부의 공인 IP 주소와 포트 번호로 들어오는 트래픽을 내부 네트워크의 특정 장치나 서비스가 사용하는 사설 IP 주소와 포트로 전달하는 방식이다. 2
내부 네트워크와 외부 네트워크의 차이
어릴 때 하마치를 통해 친구들과 LAN으로 마인크래프트를 즐긴 경험이 있는가? LAN은 근거리 통신망이란 뜻으로 이것도 내부 네트워크의 한 종류다. 내부 네트워크는 같은 통신장비[footnote]ex) 공유기, 라우터[footnote]를 통해 이어진 내부 통신망으로 원래는 외부 인터넷과 연결할 수 없다. 하지만 하마치는 VPN과 중계 서버를 통해 사용자들이 가상의 사설 네트워크를 사용하는 것처럼 이어준다. 그래서 가상의 사설 IP 주소를 입력해서 친구의 사설 서버에 접속할 수 있었던 것이다. 이처럼 인터넷과 격리되어 그룹 내에서 사설 IP 주소를 통해 내부에서만 통신하는 네트워크를 내부 네트워크라고 부른다. 외부 네트워크는 이와 반대로 공인 IP를 통해 외부와 통신이 가능한 네트워크다.
NAT에 대해
NAT(Network Address Translation)는 하나의 공인 IP 주소를 사용하여 여러 개의 사설 IP 주소로 트래픽을 전달할 수 있게 해주는 기술이다. 인터넷에 접속하는 각 장치가 공인 IP를 필요로 하지 않고, 통신 장비의 공인 IP 하나로 모든 사설 네트워크 장치의 통신을 중계한다. 그러므로 외부에서 특정 사설 IP로 트래픽을 보내려면 어느 사설 IP로 전달할지 알아야 하므로 이때 포트 포워딩이 필요하다.
이해를 돕기 위해 NAT 기술과 포트 포워딩을 사용하는 상황을 예로 들어보자. 서버 컴퓨터 A의 사설 IP는 '123.456.7.890', 서버 컴퓨터가 연결된 라우터의 공인 IP는 '111.111.1.111'이며 수많은 서버 컴퓨터가 이 라우터에 연결되어 있다고 가정해보겠다. 그럼 외부에서 '111.111.1.111'로 어떤 요청을 보낸다면, 이게 무슨 서버로 보낸 요청인지 라우터는 알 방법이 없다. 그러므로 "1234 포트로 요청이 오면, 서버 컴퓨터 A의 4321 포트로 전송한다."라는 약속을 미리 정해둔 다음, '111.111.1.111:1234'로 어떤 요청이 왔을 때 미리 약속한 서버 컴퓨터 A의 4321 포트에 요청을 보내는 것이다. 이때 마찬가지로 요청을 받은 서버 컴퓨터 A도 미리 "4321 포트로 요청이 오면, MySQL 애플리케이션으로 전송한다."와 같은 약속을 정해놓고 약속대로 전송한다.
참고로 이때, 서버 컴퓨터 A가 "4321 포트로 요청이 오면 특정 애플리케이션으로 전송한다."와 같이 특정 애플리케이션이 요청을 처리하도록 한 것은 포트 포워딩이 아니라 포트 바인딩(Binding)이라는 별개의 표현을 사용한다.
결과적으로, 외부에서 온 요청을 서버에서 처리하는 순서는 아래와 같다고 볼 수 있다.
외부에서 공인 IP 주소와 포트를 통한 요청 전송 => 미리 약속한 사설 IP 주소와 포트에 요청 전달 => 미리 약속한 애플리케이션에 요청 전달 => 애플리케이션에서 요청 처리 => 요청을 전송한 출발지로 처리 결과를 전송
포트 포워딩을 더 잘 이해하기 위해 필요한 개념인 방화벽, 포트 구분, DMZ, DNS 등은 다음번에 다루도록 하자.
'Server > Networking' 카테고리의 다른 글
홈 서버 구축을 위한 준비 1. 이론적 배경 (2) | 2024.11.18 |
---|