집에 기기가 여러 대인데 인터넷 회선은 하나입니다. 그런데 모두 인터넷이 됩니다. 이걸 가능하게 하는 게 NAT입니다. 핵심은 하나, NAT은 사설 IP를 공인 IP로 바꿔치기하는 주소 변환입니다.
사설 IP는 왜 변환해야 하나
집·회사 안에서 쓰는 192.168.x.x 같은 주소는 사설 IP라 인터넷에서 그대로는 통하지 않습니다. 인터넷은 전 세계에서 유일한 공인 IP로만 통신합니다. 그래서 공유기가 나가는 패킷의 출발지 주소를 자신의 공인 IP로 바꿔 내보내고, 응답이 오면 원래 기기로 되돌려줍니다. 이 바꿔치기가 NAT입니다.
| 구분 | 사설 IP | 공인 IP |
|---|---|---|
| 범위 | 192.168.*, 10.*, 172.16~31.* | 그 외 전 세계 유일 주소 |
| 사용처 | 집·회사 내부 | 인터넷 |
| 비용 | 무료·무제한 | 제한·할당받음 |
| 인터넷 직접 통신 | 불가 (NAT 필요) | 가능 |
포트로 여러 기기를 구분한다
공인 IP가 하나뿐인데 기기가 여럿이면, 돌아온 응답을 누구에게 줄지 어떻게 알까요? 공유기는 포트 번호로 구분합니다. 나갈 때 사설IP:포트를 공인IP:새포트로 매핑해 표에 적어두고, 응답이 오면 그 표를 보고 원래 기기로 돌려보냅니다. 이렇게 포트까지 함께 바꾸는 방식을 PAT 또는 출발지 주소를 바꾼다는 뜻에서 MASQUERADE라고 부릅니다.
[변환 전] 192.168.0.10:54321 → 8.8.8.8:443
[변환 표] 공인IP:60001 ↔ 192.168.0.10:54321
[변환 후] 203.0.113.5:60001 → 8.8.8.8:443
내부 기기 192.168.0.10이 보낸 요청이 공유기에서 공인 IP 203.0.113.5와 새 포트 60001로 바뀌어 나갑니다. 응답이 203.0.113.5:60001로 돌아오면, 표를 보고 다시 192.168.0.10으로 전달합니다. 다른 기기는 다른 포트를 받으므로 섞이지 않습니다.
리눅스에서 직접 NAT을 거는 개념은 다음과 같은 형태입니다. 나가는 패킷의 출발지를 인터페이스의 공인 IP로 자동 변환하라는 규칙입니다.
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-t nat은 NAT 테이블, POSTROUTING은 "패킷이 나가기 직전" 단계, MASQUERADE는 출발지를 나가는 인터페이스 IP로 바꾸라는 뜻입니다. 공유기가 내부에서 자동으로 해주는 일을 명령 한 줄로 표현한 셈입니다.
요점 정리
- NAT은 사설 IP ↔ 공인 IP 주소 변환입니다.
- 공인 IP 하나로 여러 기기가 인터넷을 쓰게 해줍니다.
- 응답을 원래 기기로 되돌리는 구분 열쇠는 포트 번호입니다.
- 리눅스에선
iptablesMASQUERADE로 같은 동작을 구현합니다.
NAT·라우팅·포트 변환이 실제 패킷에서 어떻게 일어나는지 직접 따라가보는 실습은 네트워크 트랙에서 회원가입 없이 무료로 할 수 있습니다.