NAT와 NAPT 차이: IP 변환·포트 변환·포트 포워딩 구분

반응형

NAT는 packet의 IP address를 다른 address로 바꾸는 기술의 넓은 이름이다. NAPT는 IP address뿐 아니라 TCP·UDP port 같은 transport identifier까지 함께 바꾼다. 가정용 router에서 여러 device가 public IPv4 하나를 공유할 때 흔히 NAT라고 부르는 기능은 대부분 NAPT에 가깝다.

PAT(Port Address Translation)라는 이름도 자주 보이지만 RFC 2663의 용어는 NAPT(Network Address Port Translation)다.

NAT와 NAPT를 한 표로 비교하기

구분 변환 기준 대표적인 mapping 일반적인 용도
Basic NAT IP address 10.0.0.10 ↔ 198.51.100.10 private·public address의 1:1 또는 pool 변환
NAPT IP address + transport identifier 192.168.1.10:51514 ↔ 203.0.113.7:40001 여러 host가 public address 하나를 공유
Port forwarding 미리 정한 inbound mapping 203.0.113.7:8443 → 192.168.1.20:443 외부 connection을 내부 service로 전달

표의 public address는 실제 운영망과 겹치지 않도록 RFC 5737의 문서용 address block을 사용했다.

Basic NAT는 address를 바꾼다

Basic NAT는 한 address realm의 IP를 다른 realm의 IP로 mapping한다. 대표적인 형태는 다음과 같다.

  • Static NAT: 내부 address와 외부 address의 고정된 1:1 mapping
  • Dynamic NAT: 사용 가능한 외부 address pool에서 필요할 때 mapping 할당

packet이 경계를 지날 때 NAT device는 source 또는 destination IP와 관련 checksum을 수정하고, 반대 방향 packet에는 역변환을 적용한다.

외부 address가 하나뿐인데 여러 내부 host가 동시에 connection을 만들면 address만으로 flow를 구분하기 어렵다. 이때 port까지 함께 쓰는 NAPT가 필요하다.

NAPT는 address와 port를 함께 바꾼다

내부 client 두 대가 같은 web server의 443 port에 접속한다고 하자.

192.168.1.10:51514 ─┐
                    ├─ 203.0.113.7:40001 → 198.51.100.80:443
192.168.1.11:51514 ─┘  203.0.113.7:40002 → 198.51.100.80:443

NAPT device는 각 flow에 서로 다른 external port를 배정하고 mapping state를 저장한다. response가 203.0.113.7:40001로 오면 첫 번째 host로, :40002로 오면 두 번째 host로 돌려보낸다.

실제 mapping key와 filtering behavior는 구현과 protocol에 따라 달라질 수 있다. 단순히 “private IP 하나당 port 하나”로 저장한다고 가정하면 troubleshooting에서 놓치는 경우가 생긴다.

Port forwarding은 inbound rule이다

일반적인 outbound NAPT에서는 내부 host가 먼저 connection을 시작하면서 mapping이 만들어진다. 외부 client가 임의의 port로 먼저 접근하면 대응하는 state가 없어 전달되지 않는 경우가 많다.

내부 web server를 외부에 열려면 정해진 destination address와 port를 내부 endpoint로 보내는 static mapping, 즉 port forwarding을 설정한다.

203.0.113.7:8443 → 192.168.1.20:443

이 rule이 있다고 access control이 끝난 것은 아니다. 노출할 port, firewall policy, TLS, authentication과 service patch 상태를 별도로 점검해야 한다.

NAT는 firewall과 같은 말이 아니다

NAT가 내부 address를 감추고 unsolicited inbound packet이 mapping을 찾지 못하게 하는 효과는 있을 수 있다. 하지만 이것을 곧바로 security policy라고 볼 수는 없다.

  • NAT의 주목적은 address와 identifier 변환이다.
  • firewall은 source, destination, protocol, connection state와 policy에 따라 허용·차단한다.
  • Static mapping이나 잘못된 forwarding rule은 내부 service를 그대로 노출할 수 있다.
  • IPv6처럼 NAT 없이도 stateful firewall로 inbound policy를 적용할 수 있다.

주소 변환 유무와 traffic 허용 정책을 서로 다른 layer로 관리해야 한다.

NAPT에서 생기는 운영 한계

Port 자원 고갈

하나의 public address에서 사용할 수 있는 source port 범위는 유한하다. 많은 client와 connection을 한 address로 모으면 port allocation이 부족해질 수 있다. CGN(Carrier-Grade NAT) 환경에서는 subscriber별 quota와 mapping timeout도 함께 봐야 한다.

End-to-end 정보 손실

server log에는 실제 client address 대신 NAT address가 보일 수 있다. 여러 단의 NAT가 있으면 connection을 원래 endpoint까지 추적하기 어려워진다.

Protocol 호환성

일부 protocol은 payload 안에 IP address나 port를 넣는다. header만 변환해서는 통신이 이어지지 않을 수 있어 별도 traversal 방식이나 application-level 처리가 필요하다.

Inbound 접근과 P2P

외부에서 먼저 연결해야 하는 service는 port forwarding, relay 또는 NAT traversal이 필요할 수 있다. 모든 NAT가 같은 mapping·filtering behavior를 보장하지 않으므로 환경을 측정해야 한다.

Kubernetes와 cloud 환경에서 Pod address 변환을 추적할 때는 EKS conntrack과 Pod NAT, packet의 다음 hop을 판단하는 과정은 Routing 동작 원리에서 이어서 볼 수 있다.

자주 묻는 질문

공유기에 적힌 NAT는 NAPT인가?

여러 private host가 public IPv4 하나로 동시에 인터넷에 접속하고 source port가 함께 바뀐다면 동작은 NAPT에 해당한다. 제품 UI에서는 넓은 관용 표현으로 NAT라고 표시하는 경우가 많다.

NAT를 쓰면 private IP가 암호화되나?

아니다. address가 변환될 뿐 payload가 암호화되는 것은 아니다. confidentiality가 필요하면 TLS, IPsec 같은 별도 보안 protocol이 필요하다.

Port forwarding과 NAPT는 반대 개념인가?

반대라기보다 mapping을 만드는 방식과 방향이 다르다. outbound NAPT는 flow가 시작될 때 동적 mapping을 만들고, port forwarding은 inbound traffic을 위해 미리 정한 static mapping이다.

참고 자료

반응형
KEEP READING
카테고리 전체 보기 →

댓글