일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- MAC address
- jvm
- grafana
- airflow
- CSV
- kubeadm
- Spring
- CVAT
- kubernetes
- PostgreSQL
- docker
- AWS
- helm
- Vision
- Trino
- java
- EC2
- zookeeper
- Packet
- log
- ip
- OS
- Python
- Operating System
- tcp
- kubectl
- aws s3
- Network
- JavaScript
- Kafka
- Today
- Total
JUST WRITE
NAT 본문
NAT
Network Address Translation
NAT는 Network Address를 변환해주는 기술이다.
1:1 Address 변환이 기본이지만 여러 개의 IP를 하나의 IP로 변환하기도 한다.
공식용어는 NAPT(Network Address Port Translation, RFC2663)이다.
실무에서는 PAT(Port Address Translation)으로 많이 사용한다.
보통 Private IP에서 Public IP로 변환하거나 Public IP에서 Private IP로 변환한다.
용도
- IPv4 Address 고갈 문제 해결
- 외부에 공개해야 하는 Service에는 Public IP를 사용, 공개가 필요 없는 PC에는 Private IP 사용
- NAT를 이용해 Private IP 사용하기 편해짐
- 보안 강화
- 외부와 통신할 때, 내부 IP를 다른 IP로 변환해 내부 Address 체계를 숨길 수 있음
- 방향성 통제 가능 -> 역변환이 정상적으로 수행되어야 양방향 통신 가능
- IP Address 체계가 같은 2개의 Network 간 통신 가능
- IP는 유일해야하지만 NAT덕분에 중복해서 사용 가능
동작
NAT의 동작 방식은 아래와 같다.
- IP가 10.10.10.10인 Client에서 IP가 20.20.20.20인 Server로 Request
- [Request Packet] 출발지 IP - 10.10.10.10 / 도착지 IP - 20.20.20.20
- Request를 받은 NAT 장비에서 NAT 정책에 따라 Public IP(11.11.11.11)로 변경 후 Server로 전송
- [Request Packet] 출발지 IP - 11.11.11.11 / 도착지 IP - 20.20.20.20
- NAT Table에 변환 전후의 IP 정보를 삽입
- Request를 받은 Server에서 Public IP(11.11.11.11)로 Response
- [Response Packet] 출발지 IP - 20.20.20.20 / 도착지 IP - 11.11.11.11
- NAT 장비에서 NAT Table를 확인 후, 변환 전의 IP로 변환 후 Client에 전송
- [Response Packet] 출발지 IP - 20.20.20.20 / 도착지 IP 10.10.10.10
PAT는 위의 NAT방식에서 비슷하다.
PAT는 IP Address뿐만 아니라 Service Port까지 함께 변경해 NAT Table에서 관리된다.
하나의 IP만으로 다양한 Port번호를 사용해 Host 구분이 가능하다.
동시 사용자가 매우 많을 때는 PAT의 Public IP를 Pool로 구성해야 한다.
SNAT vs DNAT
NAT를 사용해 Network Address를 변환할 때 두 가지로 구분한다.
- SNAT(Source NAT) - 출발지 Address를 변경
- DNAT(Destination NAT) - 도착지 Address를 변경
SNAT, DNAT 모두 출발하는 시작 시점을 기준으로 구분한다.
위 동작에서 보면 알 수 있지만 출발지에서 SNAT로 Request 하면
도착지에서 Response 할 때는 DNAT 방식으로 되게 된다.
그래서 출발지인 Request한 쪽 지점만 고려해서 설정해야 한다.
NAT 장비에 Request가 들어왔을 때 NAT Table 정보가 삽입된다.
용도
SNAT는 보통 Private IP에서 Public IP로 통신할 때 많이 사용된다.
DNAT는 Load Balancer에서 많이 사용된다.
Service를 Load Balancer에 설정된 Virtual IP로 Request 한다.
Load Balancer에서는 Virtual IP에서 Load Balance 된 Server의 실제 IP로 DNAT 한다.
Dynamic NAT vs Static NAT
- Static NAT - 출발지, 목적지 IP를 미리 고정해놓은 NAT
- Dynamic NAT - NAT를 수행할 때 IP를 동적으로 변경
Dynamic NAT는 다수의 IP Pool에서 정해진다.
NAT를 수행하는 시점에 NAT Table를 만들어 관리한다.
NAT Table은 설정된 시간 동안 유지되고 일정 시간 통신이 없으면 사라진다.
Dynamic NAT | Static NAT | |
NAT 설정 | 1:N, N:1, N:N | 1:1 |
NAT Table | NAT 수행 시 생성 | 사전 생성 |
NAT Table Timeout | O | X |