NAT 탄생 배경
- IPv4 주소 체계에서 주소 고갈에 대한 불안감으로 시작되었다.
- short-term solution으로 NAT, long-term solution으로 IPv6가 대두되었지만,
라우터 장비 교체에 드는 경제적 손실 등을 이유로 NAT가 계속 쓰이고 있는 실정이다.
Private Network
- Private IP 네트워크란 직접적으로 인터넷과 연결되지 않는 IP 네트워크이다.
- Private IP address는 임의로 할당될 수 있다.
따라서, 이 주소는 globally unique하지 않다.
- 일반적으로, 라우트에 쓰이지 않는 experimental address ranges에 Private address가 할당된다.
class A: 10.0.0.0 - 10.255.255.255
class B: 172.16.0.0 - 172.31.255.255
class C: 192.168.0.0 - 192.168.255.255
ex) 192.168.0.1과 같이 배정된 주소가 공유기에서 할당된 것을 쉽게 찾아볼 수 있었을 것이다.
NAT (Network Address Translation)
- 라우터가 자신의 private network안에서 IP 데이터그램의 IP 주소와 포트 번호를 변경할 수 있는 기능이다.
- Private network안의 host가 public network(internet)의 host와 통신할 수 있도록 해준다.
NAT와 NAPT (Network Address and Port Translation)
- 기존의 NAT는 n:m으로 주소를 매핑시키는 방식이었다.
- NAPT는 Private Netwok안의 host들이 동일한 public address를 가지지만, Port Number를 다르게 해 통신이 가능하도록 해준다.
Hole Punching
- private netwrok의 host가 다른 private network의 host와 통신을 할 때, 사용된다.
- 중개서버를 통해 pinhole을 뚫게 된다.
NAT의 단점
- IP address가 수정되면, IP header checksum을 다시 계산해주어야 되고,
Port number가 수정되면, TCP checksum을 다시 계산해주어야 한다.
- End-to-End principle 파괴
- Public host와의 통신에 third-party(NAT 변환 테이블 등) 없이 통신이 불가능하다.
이 단점은 private host들간의 통신에 더욱 두드러진다.
Configuring NAT in Linux
- Netfilter/iptable 패키지 사용
- kernel에 5 hooking point를 두고 필터링한다.
(filter INPUT, nat PREROUTING, filter OUTPUT, filter FORWARD, nat POSTROUTING)
iptables –A INPUT –j DROP : 전부 드랍
iptables –A INPUT –p tcp –dport 80 –j DROP : tcp protocol을 사용해 80번 포트로 가는 패킷 드랍
iptables –A INPUT –s 10.2.2.5 –j DROP : 출발지 IP 주소가 10.2.2.5인 패킷 드랍
iptables –A INPUT –d 10.2.2.5 –j DROP : 목적지 IP 주소가 10.2.25인 패킷 드랍
ALG (Application Layer Gateway)
- SIP 등의 프로토콜을 사용하는 private host가 public network (Internet)과 통신을 하면 private 주소로 인해 기존 NAT 통신이 불가능하다.
- ALG는 applcation layer에 관여가 가능한 gateway여서, SIP와 같은 5계층 프로토콜의 주소를 변환해 통신이 가능하도록 한다.
STUN (Session Traversal Utilities for NAT)
- Public Network에 있는 STUN server가 필수적이다.
- TCP/UDP와 3478 port를 사용
- private host가 STUN 서버에 request를 보내면, Mapped address를 reply해주고 이 주소가 해당 호스트의 public address가 된다.
- magic cookie와 mapped address를 XOR해 일종의 checksum 역할을 한다.
ex) magic cookie : 2112A442
mapped address : 82.127.73.39
0010/0001/ 0001/0010/ 1010/0100/ 0100/0010
01010010/ 011111111/ 01001001/ 00100111
--------------------------------------------------------
0111/0011/ 0110/1101/ 1110/1101/ 0110/0101
XOR'd address : 736DED65
TURN (Traversal Using Replays around NAT) or STUN Relay
- 같은 NAT에 존재하는 두 private host 처럼 STUN을 통해 peer-to-peer 통신을 할 수 없는 경우가 있다.
- TURN 서버를 통해, 두 end host를 릴레이 해준다.
- TURN 서버는 당연히 많은 대역폭을 필요로 하고, end-host들이 통신할 동안 서버가 이용가능한 것이 보장되어야 한다.
- 추가 헤더로 인해, overhead가 생기고 실제 전송자를 찾기 위해, 방화벽은 페이로드를 검사해야 한다.
- ICMP가 중개되지 않고, TTL이 제대로 줄어들지 않기 때문에 loop의 가능성이 있다.
ICE (Interactive Connectivity Establishment)
- STUN/TURN 등을 이용해 후보를 모은다.
- host transport(public 주소를 이용해) > server-reflective (STUN 서버를 통해 받은 public address) > relayed (TURN 서버를 이용)
의 순서로 우선순위를 정한다.
- 우선순위 순으로 연결을 시도하고, 수립되면 종료
'컴퓨터 사이언스 > 네트워크' 카테고리의 다른 글
[모바일 컴퓨팅] SMTP (Simple Mail Transfer Protocol) (0) | 2021.06.08 |
---|---|
[모바일 컴퓨팅] IGMP (Internet Group Management Protocol) (0) | 2021.06.08 |
[모바일 컴퓨팅] SIP (Session Initiation Protocol) (0) | 2021.06.08 |
[모바일 컴퓨팅] DNS (Domain Name System) (0) | 2021.06.07 |
[모바일 컴퓨팅] DHCP (Dynamic Host Configuration Protocol) (0) | 2021.06.07 |