NAT와 PAT, 주소 변환 추적
정적 NAT·동적 풀·PAT·포트 포워딩을 실제 변환 전후 튜플과 IOS 설정으로 풀어 읽는다. inside/outside의 의미, 처리 순서, 풀·포트 고갈과 반환 경로를 구분한다.
개념부터 찾아보기
정의·역할·동작 원리를 독립 페이지에서 확인하세요. 본문의 밑줄 용어에도 설명이 있습니다.
이 노트에서 설명할 수 있게 되는 것
- 변환 전후 주소·포트를 한 흐름으로 대응시킨다.
- NAT 변환 상태와 라우팅·정책을 분리한다.
- 단방향 실패·풀 고갈·시간 만료를 구분한다.
01주소 부족을 변환으로 연결하는 방식
- 주소 변환는 경계에서 IP 주소 표현을 바꾸고, 또는 PAT는 전송 식별자까지 바꾼다. 내부 호스트는 자신의 주소로 서버에 패킷을 보내지만 외부 서버에는 변환된 주소가 출발지로 보인다.
- 은 보낼 다음 홉을 선택하고 는 패킷에 기록된 주소를 바꾸므로 서로 별도의 기능이다.
- 변환 규칙 하나를 넣는다고 경로··접근통제가 함께 만들어지지 않는다.
- Inside·OutsideInside와 outside는 를 적용하는 인터페이스 역할이다. 사설 주소가 있는 인터페이스를 무조건 inside로 정하는 규칙이 아니며 겹치는 주소 공간 사이에서도 를 사용할 수 있다.
- 이하 설명은 전통적인 IOS inside source 를 중심으로 한다.
- Virtual Interface, VRF, ASA, 의 처리 순서와 명령을 동일한 것으로 섞지 않는다.
02Inside/Outside와 Local/Global 네 가지 주소
- 네 주소의 관점은 내부 호스트의 내부 관점 주소, 은 외부에서 그 호스트를 나타내는 주소이다. 은 외부 호스트의 외부 관점 주소이고 은 내부에서 보이는 외부 호스트 주소이다.
- 일반적인 inside source 만 수행하면 과 은 같다.
- Local/global이라는 이름 자체가 사설/공인 주소 문법을 뜻하지 않는다.
- 패킷 전후 주소문서용 예제에서 내부 192.0.2.10:51000이 외부 서버 203.0.113.20:443에 연결하고 변환 주소가 198.51.100.10:61000이라면 아래 네 값으로 기록한다. 이 주소는 인터넷 운용을 위한 실주소가 아니라 설명용 예약 주소이다.
| 항목 | 예제 값 | 어느 호스트의 표현인가 |
|---|---|---|
| 192.0.2.10:51000 | 내부 호스트의 원래 주소 | |
| 198.51.100.10:61000 | 외부에 보이는 내부 호스트 | |
| 203.0.113.20:443 | 내부에서 보는 서버 | |
| 203.0.113.20:443 | 외부 서버의 원래 주소 |
설명과 함께 보는 보조 도식
PAT 요청·응답 대응
예약된 문서용 주소만 사용하는 논리 예제.
원래 요청
192.0.2.10:51000 → 203.0.113.20:443
전체 단계를 한 번에 읽기
- 01
원래 요청
192.0.2.10:51000 → 203.0.113.20:443
- 02
출발지 변환
198.51.100.10:61000 → 203.0.113.20:443
- 상태
- 원래 포트 51000 ↔ 외부 포트 61000
- 03
서버 응답
203.0.113.20:443 → 198.51.100.10:61000
- 04
목적지 역변환
203.0.113.20:443 → 192.0.2.10:51000
03정적 NAT와 동적 NAT의 할당 단위
- 정적 정적 는 한 과 한 을 고정 대응시킨다. 내부 발신뿐 아니라 허용된 외부 패킷도 global 주소를 목적지로 하여 내부 호스트에 전달될 수 있다.
- 이때 upstream이 global 주소를 장비로 보내야 한다.
- 같은 링크의 주소이면 장비의 Proxy 등 주소 수신 동작이 관련되고, 별도 풀 대역이면 상위 이 필요하다.
- 주소를 반드시 secondary로 추가해야만 가 된다는 일반 규칙은 없다.
- 동적 동적 는 내부 호스트가 통신을 시작할 때 global 주소 풀에서 할당한다. 가 없으면 여러 내부 주소가 한 global 주소를 포트로 공유하는 방식이 아니다.
- 풀 주소 두 개가 모두 할당되면 세 번째 내부 호스트는 새 주소 대응을 얻지 못할 수 있다.
- 세션·타이머에 따라 주소가 반환되며, 특정 포트가 비어 있다는 사실만으로 이 주소 단위 고갈이 해결되지는 않는다.
04IOS에서 주소 풀을 구성하는 의미
- Pool 구성내부 G0/0은 192.0.2.1/24, 외부 G0/1은 198.51.100.1/24이며 상위 라우터 .254가 있다고 가정한다. 다음 구성은 192.0.2.0/24에서 시작된 트래픽에 풀 .10~.19를 사용한다.
- 풀 주소는 충돌 없이 배정되어 있고 외부에서 이 장비로 돌아올 수 있어야 한다.
- 분류 10의 permit은 대상으로 분류한다는 뜻이다. 이 의 deny 또는 불일치는 해당 규칙으로 변환하지 않는다는 의미이지 패킷을 자동으로 폐기한다는 의미가 아니다.
- 패킷 차단은 별도로 인터페이스 이나 방화벽이 담당한다.
interface GigabitEthernet0/0
ip address 192.0.2.1 255.255.255.0
ip nat inside
no shutdown
interface GigabitEthernet0/1
ip address 198.51.100.1 255.255.255.0
ip nat outside
no shutdown
access-list 10 permit 192.0.2.0 0.0.0.255
ip nat pool LESSON 198.51.100.10 198.51.100.19 netmask 255.255.255.0
ip nat inside source list 10 pool LESSON
ip route 0.0.0.0 0.0.0.0 198.51.100.254동적 주소 의 문서용 예. 주소 풀과 외부 링크가 동일 서브넷인 구성이다.
05PAT 매핑 생성과 반환 패킷 처리
- PAT의 단위·의 프로토콜·주소·포트 조합에 대응 상태를 만들어 여러 흐름이 global 주소를 공유한다. 내부 호스트당 외부 포트 하나를 영구 할당하는 방식이 아니다.
- 포트 선택가능하면 원래 출발지 포트를 유지할 수 있다. 충돌이나 할당 정책에 따라 바꾸므로 모든 패킷의 포트가 반드시 달라지는 것은 아니다.
- 다른 프로토콜과 용량 Echo는 포트 대신 Identifier 등을 대응시킬 수 있다. 예약 포트·동시 흐름·목적지별 재사용·global 주소 수·테이블 자원에 따라 용량이 달라지므로 65535명으로 고정하지 않는다.
- 자원 고갈의 증상기존 연결은 유지되는데 신규 연결만 실패하면 새 매핑 할당 실패와 자원 사용량을 분리해 본다. 순수 IP 프로토콜 지원 조건도 따로 확인한다.
- 기존 대응 조회외부로 향하는 패킷의 프로토콜·주소·포트와 정책을 확인한다. 해당 흐름의 변환 상태가 있는지 찾는다.
- 새 매핑 할당필요하면 global 주소와 사용 가능한 식별 값을 선택한다. 포트 충돌과 구현의 할당 정책을 반영한다.
- 변환 후 전달내부 주소·포트를 선택된 global 대응으로 바꾸고 반환을 위한 상태를 유지한다. 실제 송신에는 외부 목적지 경로도 필요하다.
- 반환 방향 복원응답의 주소·포트와 상태를 맞춰 내부 대응으로 되돌린다. 변환 상태와 내부 반환 경로가 모두 맞아야 응답이 도착한다.
06UDP NAT의 매핑 정책과 필터 정책은 별개
- 매핑의 질문매핑 정책은 내부 IP:port가 외부 목적지를 바꿔 보낼 때 기존 외부 IP:port를 재사용할지 결정한다. 변환표의 생성·재사용 규칙에 해당한다.
- -independent 매핑내부 끝점이 같으면 외부 목적지가 달라도 같은 매핑을 재사용하는 유형이다. RFC 4787은 의 상호 운용성을 위해 이 동작을 요구하지만 실제 장비가 모두 동일하게 구현됐다고 가정하지 않는다.
- 목적지 의존 매핑외부 주소 또는 주소·포트가 바뀔 때 새로운 매핑을 만드는 유형도 분류할 수 있다. 두 서버가 관찰한 출발지 포트가 다른 이유를 포트 충돌 하나로만 설명하면 부족하다.
- 필터의 질문필터 정책은 이미 만들어진 외부 매핑에 어떤 외부 발신자의 패킷을 들일지 결정한다. 매핑이 목적지와 독립적이어도 허용 발신자를 기존 통신 상대에 제한할 수 있다.
- 상태의 시간 제한 자체에는 FIN이 없으므로 는 타이머 등으로 상태를 정리한다. 매핑 만료 뒤 도착한 응답을 이전 세션과 동일하게 되돌릴 수 있다고 보장하지 않는다.
07주소 NAT와 PAT, 포트 포워딩 설정을 구별하기
- ·정적 PAT앞 절의 inside/outside 역할과 을 이용하여 동적 대신 를 넣으면 PAT가 된다. 정적 1:1과 정적 포트 매핑은 서로 다른 예시이며 충돌하는 global 주소에 무작정 함께 추가하지 않는다.
- 인수·서버 경로정적 PAT의 인수는 내부 주소·내부 서비스 포트 다음에 global 주소·외부 공개 포트를 적는다. 외부 198.51.100.20:8443으로 들어온 가 내부 192.0.2.20:443으로 전달되고 응답은 역으로 출발지가 바뀐다.
- 내부 서버는 실제 443에서 듣고 있어야 하며 반환 경로가 같은 상태를 통과해야 한다.
! PAT using a pool
ip nat inside source list 10 pool LESSON overload
! PAT using the outside interface address
ip nat inside source list 10 interface GigabitEthernet0/1 overload
! static one-to-one mapping
ip nat inside source static 192.0.2.20 198.51.100.20
! static port mapping, alternative to the one-to-one example
ip nat inside source static tcp 192.0.2.20 443 198.51.100.20 8443각 줄은 서로 다른 형태의 예이다. 앞 절의 동적 풀 구성에 모두 누적하지 않는다.
08패킷 처리 순서와 반환 경로
- 처리 순서전통적 IOS inside-to-outside 처리에서는 목적지 경로를 구한 뒤 inside source를 global로 변환한다. 반환 outside-to-inside 패킷은 global 목적지를 local로 역변환한 뒤 내부 목적지 경로를 구한다.
- Cisco의 해당 문서가 다루는 소프트웨어·기능 조합의 순서이며 이를 모든 방화벽 제품의 평가 주소로 일반화하지 않는다.
- 응답·경로원래 요청 192.0.2.10:51000 → 203.0.113.20:443이 변환되면 외부 캡처는 출발지 198.51.100.10:61000을 보게 된다. 서버 응답의 목적지가 이 global 이며 가 local 로 되돌린다.
- IP 주소를 바꾼 경우 헤더 체크섬과 / 의사 헤더에 포함되는 값도 일관되게 보정해야 한다.
- 장비 양쪽의 패킷을 주소가 다르다는 이유로 별개 통신으로 처리하지 않는다.
09변환 표를 한 줄씩 판독하기
- 변환 행 해석다음 표의 한 행은 통신에서 과 이 다르고 outside의 두 표현은 같음을 보여준다. 포트까지 함께 읽어야 동시에 접속한 다른 사용자를 구분할 수 있다.
- 실습의 traceroute처럼 목적지 포트가 probe마다 증가하면 한 주소에서 여러 행이 생길 수 있으며 이 행 수를 사용자 수로 세면 안 된다.
- 통계·여러 흐름show ip statistics는 활성 translation과 인터페이스 역할, 풀 할당 상태 등을 보여준다.
- 카운터만 증가하고 변환이 없으면 규칙·풀·통과 경로의 조건을, 변환과 발신 패킷은 있는데 응답이 없으면 상위 경로와 서버를, 응답이 외부에 도착했는데 내부에 없으면 역변환·내부 경로·정책을 나누어 본다.
show ip nat translations
Pro Inside global Inside local Outside local Outside global
tcp 198.51.100.10:61000 192.0.2.10:51000 203.0.113.20:443 203.0.113.20:443
show ip nat statistics
show access-lists 10
show ip route 203.0.113.20
show arp주소를 문서용으로 바꾼 출력 형식 예. 실제 실행 결과를 주장하는 값이 아니다.
실습: UDP 변환표에서 Inside local과 global 추적
실제 translation 행을 읽어 주소 변환과 포트 유지·변경을 구별한다.
실습 구성과 전제
- IOS 장비를 통과하는 probe의 변환표다. 예시 설정은 내부 172.16.0.0/24와 문서용 외부 주소를 사용하는 별도 재구성이다.
- 사진의 외부 주소는 당시 가상 구성 값이다. 새 실습에서는 자신이 소유한 격리망 주소로 치환한다.
변환 대상과 경계 정의
- 용 은 어떤 내부 주소를 변환할지 고르는 조건이다. 같은 을 인터페이스 access-group으로 적용한 패킷 필터와 뜻이 다르다.
- inside/outside는 내부·외부 인터페이스 역할이고 local/global은 주소가 보이는 표현이다. 네 가지 주소 열을 한 쌍으로 줄여 읽지 않는다.
textaccess-list 10 permit 172.16.0.0 0.0.0.255 interface FastEthernet0/0 ip nat inside interface FastEthernet0/1 ip nat outside exit ip nat inside source list 10 interface FastEthernet0/1 overload같은 원리의 PAT 재구성 예시. 인터페이스 주소·경로는 별도로 준비한다.
확인 기준인터페이스 역할·변환 대상·외부 경로를 모두 확인한다.
변환표의 실제 한 행 대조
- 에는 172.16.0.1:49177, 에는 변환된 주소의 :49177이 보인다. 이 행에서는 주소가 바뀌고 포트는 유지되었다.
- PAT가 항상 포트를 다른 숫자로 바꿔야 하는 것은 아니다. 충돌이 없으면 원래 포트를 사용할 수 있으며 주소·포트 조합으로 상태를 구분한다.
textshow ip nat translations show ip nat statistics실습 흐름을 재구성한 명령 예시. 장치·인터페이스 이름은 구성에 맞춰 사용한다.
원본 크기로 보기 ↗- Protocol은 udp이며 Inside local·global·Outside local·global 네 열이 있다.
- 첫 행의 내부·변환 후 포트는 49177이고 상대 포트는 33434다.
확인 기준주소 변화와 포트 변화를 각각 기록한다.
복수 probe와 반환 상태 검증
- 뒤 행에서 내부 포트와 상대 포트가 증가한다. 각 행은 변환 상태이며 그 개수를 연결 개수라고 읽지 않는다.
- 과 이 이 표에서는 같다. 다른 쪽 존재만으로 이 장비의 두 Outside 값이 항상 달라지는 것은 아니다.
textshow ip route show access-lists 10 show ip nat translations경로·대상 조건·상태를 함께 대조하는 조회
확인 기준표의 생성은 변환 처리의 증거지만 원격 응답의 증거는 아니다. 앞뒤의 같은 흐름과 반환 경로를 확인한다.
실습에서 확인한 동작 원리
- 표의 네 주소 열은 이 장비의 관점으로 읽는다.
- 상태 생성·주소 변환·최종 응답 성공을 별도 증거로 검증한다.
설정·출력 추가로 확인하기 22장
아래 화면을 펼쳐 위 실습의 설정값, 명령과 확인 기준을 비교해 보세요. 각 묶음은 별도 실습 기록입니다.
실습 화면 묶음 01 6장
원본 크기로 보기 ↗- 문서 문맥에 삽입된 원본 명령·상태 출력이다. NAT와 PAT, 주소 변환 추적 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 문서 문맥에 삽입된 원본 실습·개념 참고 화면이다. NAT와 PAT, 주소 변환 추적 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 문서 문맥에 삽입된 원본 실습·개념 참고 화면이다. NAT와 PAT, 주소 변환 추적 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 문서 문맥에 삽입된 원본 실습·개념 참고 화면이다. NAT와 PAT, 주소 변환 추적 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 문서 문맥에 삽입된 원본 실습·개념 참고 화면이다. NAT와 PAT, 주소 변환 추적 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 문서 문맥에 삽입된 원본 실습·개념 참고 화면이다. NAT와 PAT, 주소 변환 추적 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
실습 화면 묶음 02 1장
원본 크기로 보기 ↗- 학습 원본 · NAT 주소 변환 실습 구성의 해당 절에 수록된 화면·도식이다.
실습 화면 묶음 03 1장
원본 크기로 보기 ↗- 학습 원본 · NAT 주소 변환 실습 구성의 동적 NAT 실습에 수록된 화면·도식이다.
실습 화면 묶음 04 1장
원본 크기로 보기 ↗- 학습 원본 · NAT 주소 변환 실습 구성의 동적 NAT 실습에 수록된 화면·도식이다.
실습 화면 묶음 05 1장
원본 크기로 보기 ↗- 학습 원본 · NAT 주소 변환 실습 구성의 동적 NAT 실습에 수록된 화면·도식이다.
실습 화면 묶음 06 1장
원본 크기로 보기 ↗- 학습 원본 · NAT 주소 변환 실습 구성의 종합 실습에 수록된 화면·도식이다.
실습 화면 묶음 07 1장
원본 크기로 보기 ↗- 학습 원본 · NAT 주소 변환 실습 구성의 종합 실습에 수록된 화면·도식이다.
실습 화면 묶음 08 1장
원본 크기로 보기 ↗- 「nat」 문맥에 삽입된 원본 명령·상태 출력이다. NAT와 PAT, 주소 변환 추적 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
실습 화면 묶음 09 5장
원본 크기로 보기 ↗- 「Router」 문맥에 삽입된 원본 명령·상태 출력이다. NAT와 PAT, 주소 변환 추적 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 문서 문맥에 삽입된 원본 실습·개념 참고 화면이다. NAT와 PAT, 주소 변환 추적 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「Router」 문맥에 삽입된 원본 실습·개념 참고 화면이다. NAT와 PAT, 주소 변환 추적 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「Router」 문맥에 삽입된 원본 실습·개념 참고 화면이다. NAT와 PAT, 주소 변환 추적 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「Router」 문맥에 삽입된 원본 실습·개념 참고 화면이다. NAT와 PAT, 주소 변환 추적 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
실습 화면 묶음 10 4장
원본 크기로 보기 ↗- 수업 원본 자료 · 라우터·보안 구간·포트포워딩의 설정 관계. 원문에서 「IPtime PortForwarding」에 배치된 그림 또는 화면이다.
원본 크기로 보기 ↗- 수업 원본 자료 · 라우터·보안 구간·포트포워딩의 설정 관계. 원문에서 「IPtime PortForwarding」에 배치된 그림 또는 화면이다.
원본 크기로 보기 ↗- 수업 원본 자료 · 라우터·보안 구간·포트포워딩의 설정 관계. 원문에서 「네트워크 / IP / VLAN 설계서」에 배치된 그림 또는 화면이다.
원본 크기로 보기 ↗- 수업 원본 자료 · 라우터·보안 구간·포트포워딩의 설정 관계. 원문에서 「네트워크 / IP / VLAN 설계서」에 배치된 그림 또는 화면이다.
동작·명령 참고 문서
10두 UDP 서버로 보낼 때 매핑과 필터를 따로 추적
- 가상 내부 끝점내부 호스트 192.0.2.10:40000이 외부 A=198.51.100.10:5000으로 보낸다. 가 외부 표시 주소 203.0.113.5:62000을 할당했다고 하자.
- 두 번째 목적지같은 내부 끝점이 B=198.51.100.20:5000으로 보낼 때 -independent 이면 203.0.113.5:62000을 재사용한다. 다른 매핑 정책이라면 별도 포트가 만들어질 수 있다.
- A의 정상 응답A가 203.0.113.5:62000으로 응답하면 는 살아 있는 매핑을 찾아 목적지를 192.0.2.10:40000으로 되돌린다. 외부 서버의 원래 주소·포트도 함께 기록해 흐름을 연결한다.
- 제3자 C의 패킷통신하지 않은 C가 같은 외부 포트로 보내더라도 수용 여부는 필터 정책에 달려 있다. 외부 매핑을 공유한다는 사실만으로 C의 패킷이 허용된다고 결론내리지 않는다.
- 만료 후 재할당매핑이 만료되고 외부 포트가 다른 흐름에 재할당되면 과거 캡처의 포트 번호만으로 현재 소유자를 찾을 수 없다. 생성·마지막 사용 시각과 프로토콜을 같이 보존해야 한다.
11상태 만료, 내부 회귀와 응용 프로토콜
- 상태 만료동적 매핑은 무한히 남지 않는다. 프로토콜과 연결 상태에 따른 타이머가 만료되면 늦게 돌아온 패킷을 해석할 정보가 없어질 수 있다.
- 장비를 재시작하거나 변환 표 전체를 지우는 행위도 활성 연결에 영향을 준다.
- 장애 후 다른 장비로 반환 경로가 바뀌었는데 상태를 공유하지 않으면 동일한 문제가 생긴다.
- Hairpin·Payload내부 클라이언트가 서버의 외부 공개 주소로 접속하는 hairpin 흐름은 보통의 inside→outside 예만으로 보장되지 않는다. 제품의 hairpin 지원 또는 내부 가 내부 주소를 주는 설계가 필요하다.
- FTP·SIP처럼 payload에 주소·포트를 넣는 프로토콜은 단순 IP 헤더 변환만으로 충분하지 않을 수 있고 ALG 지원과 암호화 여부가 영향을 준다.
- 는 암호화·인증·접근통제 자체가 아니며 공개 서비스에 대한 허용 범위는 별도 정책으로 정한다.
12변환표가 있는데도 응답이 돌아오지 않는 분기
- 요청의 실제 출구변환표 생성은 규칙이 일부 트래픽을 처리했다는 증거다. 변환된 패킷이 올바른 WAN 출구로 실제 나갔는지는 ··출구 필터·캡처로 별도 확인한다.
- 역방향 매핑 부재응답은 도착했지만 상태가 만료됐거나 다른 장비로 돌아오면 매핑을 찾지 못할 수 있다. 비대칭 경로와 상태 동기화 여부가 주소 규칙 자체만큼 중요하다.
- 체크섬 조정IP·포트가 바뀌면 해당 헤더와 사용 중인 · 체크섬을 새 값에 맞춰야 한다. 캡처의 잘못된 체크섬 표시는 offload 여부를 확인한 뒤 실제 오류와 구별한다.
- 내부 인용 오류는 외부 IP 헤더뿐 아니라 실패한 원본 패킷의 주소·포트를 안에 담는다. 는 이 인용 정보도 내부 흐름과 연결해야 호스트가 자신의 요청에 대한 오류로 처리할 수 있다.
- 응용 안의 주소일부 응용은 헤더 외의 데이터 안에도 접속 주소·포트를 전달한다. 단순 헤더 변환만으로 그 정보가 바뀌지 않으므로 제어 연결 성공과 후속 데이터 연결 실패가 함께 나타날 수 있다.
이해했는지 확인하기
- NAT 전후 양방향 주소·포트 대응을 설명할 수 있는가?
- 변환 상태와 라우팅 상태를 각각 확인했는가?
- 접근 차단이 NAT 때문인지 보안 정책 때문인지 구분했는가?