공유기의 원리 개요
대부분의 가정집은 아래와 같은 구조로 네트워크가 구축되어 있을 것이다.
대부분의 집에는 보통 IP-TV라 불리는 셋탑 박스가 있는데, 이것이 바로 우리가 매달 인터넷 비용을 지불하며 인터넷에 연결할 수 있도록 해주는 장치이다. 인터넷 설치기사님이 셋탑 박스를 설치해주시면, 우리는 개인적으로 공유기를 구매하여 이를 셋탑박스와 유선 연결 한다. 그리고 인터넷 와이파이를 사용할 기기들(핸드폰, 노트북, 아이패드 등..)과는 공유기와 무선으로 연결하는 것이 일반적이다.
위 구조에서 공유기라는 장치는 NAT라는 기술이 적용된 장치이다. NAT(Network Address Translation) 기술은 IP 주소와 포트 번호를 변환하는 기술로, 자세한 내용은 이전 포스트에서 다루었다. 참고하길 바란다! 여기서는 NAT 구조의 종류에 대해 알아보려고 한다.
NAT 기술은 내부 망의 장치들에 대해 ‘외부 포트 지정’을 해주는 것이고, 이 때 어떤 단위로 외부 포트를 지정하느냐에 따라 NAT 종류가 나뉜다
- Symmetric NAT
- Conce NAT
- Full Cone NAT
- IP Restricted Cone NAT
- Port Restricted Cone NAT
Symmetric NAT
Symmetric NAT는 TCP 연결(세션)마다 외부 포트를 지정하는 NAT 구조이다. 동작 방식을 구체적으로 이해하기 위해 Symmetric NAT 에서의 Outbound 통신과 Inbound 통신 상황을 자세히 살펴보자. 참고로 이 역시 이전 포스팅에서 자세히 다루었다. 여기서는 복습 + 추가 내용을 다룬다고 생각하자!
- 아웃바운드(Outbound) 통신: 내부에서 (인터넷이 있는) 외부로의 통신
- 인바운드(Inbound) 통신: 외부에서 내부로의 통신
Symmetric NAT의 Outbound 통신
[PC 3 -> NAT GW -> Web Server] 통신 상황
[NAT GW -> web server] 순간 아웃바운드 통신 발생하고, 이를 트리거로 공유기는 해당 패킷에 대해 NAT를 수행한다.
NAT로 인해 패킷의 헤더 정보는 다음과 같이 변경된다.
- 출발지: PC 3의 Private IP 주소 & 포트 번호 -> 공유기의 Public IP 주소 & 포트 번호
- 도착지: 웹서버의 Public IP & 포트 번호 -> 변화 없음
Public IP 주소로 변경되었으니 인터넷으로의 접근이 가능해지고, 결국 웹서버로의 접근이 가능해진다.
NAT를 수행할 때는 공유기가 직접 External Port 번호를 지정한다. 이 포트 번호는 PC의 포트 번호와 바인딩된다고 이해하자. 그래서 PC는 공유기의 External Port를 통해 인터넷에 접근 가능해진다. 참고로 Symmetric NAT
에서 External Port 번호는 매번 랜덤으로 지정된다. 이러한 특성 덕분에 Symmetric NAT를 사용하는 네트워크는 보안성이 강화된다.
웹 서버 관점에서는 수신된 패킷을 확인해보면 자신에게 요청을 보낸 호스트가 PC 3이 아닌 공유기로 인지된다. 반대로, PC 3의 관점에서는 자신의 Private IP 주소와 포트 번호로 웹 서버와 연결되어 있다고 착각하게 된다. 실질적으로 웹 서버에 연결된 호스트는 PC가 아닌 이와 연결되어 있는 공유기인데도 말이다.
공유기는 NAT가 이루어질 때마다 해당 변환 이력들을 관리하는데, 이를 관리하기 위해 NAT 테이블
이라는 것을 이용한다. NAT 테이블은 공유기 메모리에 저장되어 있는 일종의 데이터베이스 같은 자료구조로, 이를 활용하여 NAT 이력을 관리한다.
공유기는 아웃바운드 통신이 발생할 때 공유기는 NAT 테이블에 변환 이력을 추가해 기록한다. 그리고 이 NAT 테이블은 아래에서 배울 인바운드 통신 때 활용된다.
공유기에 연결되어 있는 여러 PC를 통해 웹 서버에 한번씩 접속했을 때, 웹 서버는 서로 다른 컴퓨터에서 한 번씩 요청을 한 것이라고 인식할 수 있을까?
정답은 '없다'이다. 왜냐하면 PC 1,2가 서로 다른 Private IP 주소를 갖고 있을지라도 공유기인 NAT GW를 거치고 나면 모두 공유기의 Public IP 주소로 변환된 후 웹 서버에 요청되기 떄문이다. 즉, 웹 서버 입장에서는 같은 호스트가 여러 번 요청한 것으로 인지하게 된다.
Symmetric NAT의 Inbound 통신
반대로 [Web server -> NAT GW -> PC] 인바운드 통신 상황을 살펴보자.
웹 서버 입장에서 도착지는 PC가 아니라 NAT GW이므로, 공유기에 응답 패킷을 보낸다. 그리고 해당 패킷이 공유기에 도달하는 시점 즉, 인바운드 시점에 해당 패킷에 들어있는 출발지, 도착지 정보를 가지고 공유기 내의 NAT 테이블에서 Local 즉, 실질적인 도착지인 PC의 Private IP 주소와 Port 번호를 알아낸다.
공유기는 이렇게 알아낸 정보로 패킷 내의 출발지 & 도착지 주소에 반영하여 업데이트한다. 이렇게 하면 최종적으로 PC에 웹 서버에서 보낸 데이터를 전달할 수 있게 된다.
Full Cone NAT
Full Cone NAT
는 로컬 호스트의 IP 주소와 포트를 External Port와 1:1 매핑을 해서 NAT 테이블에 기록하는 NAT 구조이다.
[PC3 -> NAT GW -> PC A] 통신이 이루어진다고 할때, [PC3 -> PC A]로 아웃바운드 통신을 수행한다. 그럼 이를 트리거로 하여 NAT가 수행되고, 해당 변환 이력이 NAT 테이블에서 관리된다.
해당 변환 이력을 보면, Symmetric NAT
와 달리 Remote IP와 Remote Port 항목에 ‘Any’라는 키워드로 업데이트 한다. 이는 인바운드 통신이 일어날 때, 다른 호스트들도 PC 3으로의 접근을 가능하게 한다는 의미이다.
즉, PC 3이 PC A에게 아웃바운드 통신 이후에는, PC B, PC C 등 다른 호스트들도 ‘통신한 적이 없지만’ PC 3과의 통신이 가능‘하다.
그리고 Symmetric NAT
와 다른 점이 또 하나 있는데, NAT 테이블 속 External Port 항목에 공유기의 외부 포트(External Port)에 추가로 ‘고정’이라고 표시된다는 점이다. 인바운드 통신을 수행하기 위해서는 로컬 즉, PC 3과 바인딩 되어 있는 공유기의 External Port 번호를 알아야 하는데, 다른 호스트들도 통신이 가능하도록 하기 위해 이 External Port는 [PC 3 -> PC A] 통신 이후 고정된다. 이후, PC B 또는 PC C가 PC 3과 통신을 할 때는 이 고정된 포트를 사용한다.
이러한 이유 때문에 Full Cone NAT를 정의할 때 “로컬 호스트의 IP 주소와 포트를 External Port와 1:1 매핑”한다고 한 것이다.
IP Restricted Cone NAT
IP Restricted Cone NAT
구조를 알아보기 전에, Restricted Cone NAT
에 대해서 먼저 이해하자.
Full Cone NAT 구조에서는 한번 아웃바운드 통신이 일어난 이후에는, 통신한 적이 없는 다른 원격 호스트들도 로컬 호스트에 접근할 수 있도록 할 수 있었다. 하지만, 이러한 특성은 악의를 갖고 접근하는 호스트들도 접근할 수 있다는 취약점이 있다.
이를 막기 위해 원격 호스트들에 대해 일종의 제한(Restriction)을 두는 것인데, 이렇게 Full Cone NAT
구조에 ‘제한’을 추가한 것이 Restricted Cone NAT
구조이고, 제한을 두는 대상이 IP 주소만인인지, 아니면 IP 주소 + Port 번호인지에 따라 IP Restricted Cone NAT
와 Port Restricted Cone NAT
로 나뉜다. 이제 IP Restricted Cone NAT
를 살펴보자
[PC 3 -> PC A] 통신이 일어나면, NAT가 일어나고, NAT 테이블에 변환 이력이 추가될 것이다. 이 때, Full Cone NAT
때와는 달리 이번에는 Remote IP 값은 ‘고정’되고, Remote Port 값만 ‘Any’ 키워드가 할당된다.
이러면 IP 주소가 다른 외부 호스트는 NAT 테이블을 참조해서 매핑되는 Local IP 및 Local Port를 찾을 수 없기 때문에 접근이 불가능해진다. 즉, Remote IP가 동일한 외부 호스트만 인바운드 통신이 가능해진다. 포트는 ‘Any’이기 때문에 상관없다.
Port Restricted Cone NAT
IP 주소 뿐만 아니라 Port 번호까지 모두 제한으로 두어 다른 포트를 갖고 있는 호스트들의 접근을 막도록 하는 Port Restricted Cone NAT
를 알아보자.
이는 [PC 3 -> PC A]로의 아웃바운드 통신에 의해 NAT를 수행할 때, Remote IP 뿐만 아니라, Remote Port 번호까지 PC A의 값으로 지정된다. 즉, Remote IP와 Remote Port가 PC A로 한정되기 때문에 PC A와 다른 IP 혹은 다른 Port 번호를 사용하는 호스트에서의 인바운드 통신이 모두 불가능해진다.
다른 호스트에서의 인바운드 통신이 가능하게 하려면, 해당 호스트와 아웃바운드 통신을 최소 한번 수행해야 한다. 그러면 NAT 테이블에 이력이 추가되어 인바운드 통신 시 매핑 가능하다. 만약 PC B와도 인바운드 통신을 허용하고 싶다면, [PC 3 -> PC B]로의 아웃바인드 통신을 한번 수행하면 된다. 이 때, 주목할 점은 External Port 부분은 여전히 ‘고정’ 키워드가 함께 있다는 것이다. 즉, PC A와 PC B는 동일한 포트를 통해 PC 3에 함께 접근할 수 있다.
새로운 호스트 간의 통신이 추가되어도 똑같다. [PC 2 -> PC C] 통신이 새롭게 추가되더라도 External Port는 여전히 똑같은 포트 번호로 ‘고정’된다. 즉 새로운 연결이 추가되더라도 외부 포트는 변하지 않고 고정된다. 이처럼 Symmetric NAT
와 Port Restricted NAT
의 큰 차이점은 ‘External Port 번호가 고정되는지 여부’이다.
Port Restricted NAT
구조에서는 서로 다른 호스트 간 통신이 추가되더라도 External Port 번호가 고정되어 NAT 테이블에 추가된다. 하지만, Symmetric NAT
구조에서는 ‘TCP 연결을 수행할 때마다 ‘ 새로운 External Port 번호가 지정된다. 그래서 “Symmetric NAT 구조란, TCP 연결(세션)마다 외부 포트를 지정하는 구조”라고 설명하는 것이다.
포트 포워딩
우리집 노트북에서 웹서버를 띄웠다고 가정해보자. 해당 웹서버에 친구가 접속할 수 있도록 하기 위해 내 Private IP 주소와 웹서버에 개방한 포트 번호를 알려주었다. 접속이 가능할까?
-> 당연히 안된다.
친구가 접속하려는 IP 주소는 Private IP 주소인데, 이는 인터넷에서는 인식할 수 없다..
이를 해결하기 위해서 포트 포워딩(Port Forwarding)
을 사용할 수 있다.
공유기 설정 페이즈에서 포트 포워드 설정을 추가할 수 있는데, 여기서 ‘내부 IP’, ‘내부 포트’, ‘외부 포트’ 값을 각각 지정 해주면 된다.
- 내부 IP: Local IP(Private IP)를 의미하며 이는 내가 띄운 웹서버 호스트의 Private IP 주소를 입력
- 내부 포트: Local Port 번호를 의미한며, 내가 띄운 웹 서버 호스트의 포트 번호를 입력
- 외부 포트: External Port(공유기의 Port 번호)를 의미하며, 웹 서버 호스트와 연결되어 있는 공유기(NAT GW)의 포트 번호인 External Port 번호를 입력
이렇게 3가지 항목을 사용자가 수동으로 추가한 뒤, 내 공유기의 Public IP 주소와 External Port 번호를 다른 사람에게 알려주면 다른 사람은 그 정보로 나의 웹서버에 접근이 가능하다.
UPnP(Universal Plugin and Play)
포트 포워딩 규칙을 직접 추가해서 NAT 테이블을 변경함으로써 P2P 통신이 가능했다. 하지만, 이런 방법을 활용해서 P2P 통신을 하기 위해서는 통신하려는 상대의 공유기에 대한 IP 주소와 외부 포트 번호를 반드시 알아내야 한다는 한계점이 존재한다.. 만약 통신하는 상대방이 일관적이지 않고 계속해서 바뀌는 경우라면 포트 포워딩은 적절하지 못하다. 계속 변하는 상대에게 데이터를 전달하기 위해 IP와 포트 번호를 계속 물어볼 수는 없다.
이를 해결하기 위해서 UPnP
의 NAT Traversal
기능을 사용할 수 있다. 먼저 UPnP에 대해 알아보자. UPnP
는 자동으로 포트를 구성하는 프로토콜로, 포트 포워딩을 자동으로 설정해 네트워크 내 응용 프로그램과 장치들을 서로 연결할 수 있도록 한다. 우리가 흔히 사용하는 ipTIME 공유기에서는 UPnP가 기본으로 설정되어 있어서 응용 프로그램을 바로 사용할 수 있다.
프린터기와 같은 스마트홈 장치들을 내 PC에서 연결하는 경우, UPnP를 사용하지 않는다면 장치를 하나씩 직접 연결하고 설정해야 하지만, UPnP는 이 과정을 자동화해주기 때문에 편리하게 장치를 연결하고 네트워크를 빠르고 쉽게 구성할 수 있게 된다. (= 네트워크 내부 통신 자동 설정)
이처럼 UPnP의 기본 목적은 동일한 내부 네트워크에서 장치 간 자동 탐색 및 제어이다. 이런 경우, UPnP는 라우터를 통하지 않고 내부 네트워크 내에서 통신을 간소화하는 역할을 한다.
UPnP - NAT Traversal
UPnP는 주로 네트워크 내부 통신을 위한 기술이지만, 인바운드 통신을 지원하는 기능(NAT Traversal
) 도 포함하고 있다. NAT Traversal은 외부에서 내부 네트워크의 특정 장치로 접근할 수 있도록 포트를 자동으로 열어주는 기능으로, 라우터의 NAT(Network Address Translation) 기능 때문에 내부 IP 주소로 외부에서 직접 접근할 수 없지만, NAT Traversal은 NAT 환경에서도 통신이 이루어질 수 있도록 해준다. 예를 들면, 게임 콘솔, IP 카메라, P2P 파일 공유 애플리케이션 등이 외부 서버나 사용자가 내부 네트워크에 접근하도록 포트 포워딩을 자동으로 설정한다.
여기서 중요한 점은 자동으로 모든 장치에 대해 포트 포워딩을 수행하는 것이 아니라, 자동 포트 포워딩을 ‘요청’한 장치에만 적용한다는 것이다. 그리고 이 요청은 장치 또는 애플리케이션이 필요한 경우 자동으로 보낸다.
UPnP NAT Traversal의 충족 요건은 다음과 같다.
- 라우터에서 UPnP가 활성화되어 있어야 함.
- 대부분의 가정용 라우터는 UPnP를 지원하며, 기본값으로 활성화된 경우가 많다.
- 일부 보안 중심의 라우터에서는 기본적으로 비활성화되어 있을 수 있다.
- 장치 또는 애플리케이션이 UPnP 요청을 보내야 함.
- UPnP는 라우터가 모든 포트를 자동으로 열어주는 것이 아니라, 장치(또는 애플리케이션)가 명시적으로 요청한 포트만 열어준다.
- 예: 게임 콘솔, 비디오 스트리밍 앱, P2P 소프트웨어 등.
노트북에서 공유기에 무선으로 연결되어 있고 게임을 하는 상황을 예시로 들어보자. UPnP를 활용하지 않는다면 노트북에서 게임 서버로 나가는 트래픽은 문제가 없으나 게임 서버에서 Private IP를 사용 중인 내 노트북으로는 접근할 수 없으니(NAT 테이블에 매핑되는 정보가 없어서) 수동으로 포트 포워딩을 수행하고 설정해야 할 것이다. 하지만, UPnP를 사용한다면, 그 중 NAT Traversal 기능을 사용한다면 자동으로 포트 포워딩을 수행할 수 있다.
노트북이 게임을 실행하면, 게임은 UPnP를 통해 공융기에 포트 포워딩 요청을 보낼 것이며, 공유기는 해당 요청을 처리하고 외부에서 접근 가능하도록 포트를 열어줄 것이다. 물론, UPnP는 활성화 되어 있어야 한다.
보안 위험
UPnP를 활성화해두면 편리하지만, 보안 위협이 발생할 가능성도 있다.
- 악성 소프트웨어가 포트를 열 수 있음:
- 만약 노트북에 악성 코드가 실행된다면, 이 코드가 라우터에 UPnP 요청을 보내 특정 포트를 열고, 공격자가 내부 네트워크에 접근하도록 할 수 있다.
- 모니터링의 어려움:
- 포트가 열리는 과정이 자동화되어 있기 때문에, 사용자가 어떤 포트가 열려 있는지 확인하지 않으면 보안 취약점을 알기 어렵다.
UPnP는 위와 같은 보안 취약점을 초래할 수 있으므로, 필요하지 않다면 비활성화하는 것이 권장된다.
정리
공유기의 역할과 NAT
- 공유기는 내부 네트워크(IPTV, PC, 모바일 기기 등)와 외부 네트워크(인터넷)를 연결하는 장치로
NAT(Network Address Translation)
기술을 통해 Private IP 주소를 Public IP 주소로 변환한다. - NAT의 동작
- 아웃바운드(Outbound) 시: 내부 장치가 외부 서버로 데이터를 전송할 때 출발지 주소가 Public IP로 변환됨
- 인바운드(Inbound) 시: 외부 서버가 보내는 데이터를 NAT 테이블을 참조하여 적절한 내부 장치로 전달
NAT 유형
Symmetric NAT
- TCP 연결마다 고유한 외부 포트를 랜덤하게 생성
- 높은 보안성을 제공하지만, P2P 연결에는 제약이 있을 수 있음
Full Cone NAT
- 특정 IP와 포트를 1:1로 고정 매핑
- 한 번 외부와 연결되면 모든 다른 호스트도 접근 가능
- 보안성은 낮지만, P2P 통신이 용이
IP Restricted Cone NAT
- IP 주소를 기준으로 접근을 제한
- 동일한 IP의 호스트만 통신 가능
Port Restricted Cone NAT
- IP + Port 모두를 기준으로 접근 제한
- 보안성이 높지만, 외부 통신을 위해 초기 아웃바운드가 필요
포트포워딩
- NAT를 사용하면 외부에서 내부 네트워크의 장치에 직접 접근이 불가능 = 아웃바운드 없이 인바운드 불가능
- 포트 포워딩
- 내부 장치의 IP 및 포트를 외부 네트워크와 매핑
- 이를 통해 외부에서 특정 장치로의 통신 가능
- 예: 내부 웹서버를 외부 사용자에게 공개
UPnP와 NAT Traversal
- UPnP는 내부 네트워크 장치 간의 연결을 자동화하고 외부 연결을 지원하는 기술
- NAT Traversal
- 외부 네트워크에서 요청이 있을 때, 필요한 포트를 자동으로 열어줌
- 주로 게임, 스트리밍, P2P 애플리케이션에서 사용
- 라우터의 보안 설정에 따라 기본 비활성화일 수도 있음
- 보안상 취약점 우려(자동화로 인해)
'Network' 카테고리의 다른 글
[Network] TCP 흐름/혼잡/오류 제어 (0) | 2024.11.23 |
---|---|
[Network] L4 스위치(LoadBalancer) 원리 (2) | 2024.11.22 |
[Network] 네트워크의 3가지 구조(Inline, Out of Path, Proxy) (1) | 2024.11.20 |
[Network] 규모에 따른 네트워크 종류와 구성 (3) | 2024.11.18 |
[Network] Application Layer Protocol (1) | 2024.11.18 |