NAT
network address translation
하나의 IP 주소를 다른 IP 주소로 변환하는 것
보안 처리, IPv4 의 부족한 공간 보존 등 다양한 이유로 사용됨
NAT 동작 방식
라우터나 방화벽, 게이트웨이에서 동작한다.
전송하려는 패킷의 source IP 를 바꿔서 다시 IP 헤더를 작성하고 기존 IP를 저장하고 있다가 응답이 오면 기존 IP에 해당하는 디바이스로 응답을 전송한다.
이렇게 동작하면 목적지 네트워크에서는 요청이 어디서 왔는지 알 수 없게 되는데, 이를 IP masquerading 이라고 한다.
NAT 를 통해 네트워크의 주소를 숨길 수 있고, 이 방식을 통해 private IP 를 사용할 수 있으며 LAN 에서도 고유한 IP 를 IPv4 에서도 가질 수 있게 해준다.
NAT와 전송 계층
NAT 는 하나의 네트워크 디바이스가 여러 대의 로컬 네트워크의 수많은 아웃바운드 트래픽에 대해 기존 IP를 보관하고 다시 응답을 전달할 때 사용할 수 있어야 한다.
이를 위해 발신자의 port 를 저장한다. 발신 port 는 임시 포트로 49152 ~ 65535 중 하나를 랜덤으로 갖는데, 이를 통해 포트로 IP 를 찾아서 넣어준다.
임시 포트 설정은 운영체제에서 임의로 하는 것이기에 우연히 다른 디바이스에서 동일한 임시 포트로 아웃바운드 트래픽을 보낼 수 있다. 이런 경우 NAT 에서 포트를 임의로 겹치지 않게 변경한다.
서버의 입장에서도 생각해보면 게이트웨이의 IP로만 요청을 모두 수신하고, 내부에 여러 서버가 동작해도 포트만 달리하면 게이트웨이에서 포트에 해당하는 IP를 매핑하고 있기 때문에 특정 서버로 전달할 수 있다. 이를 port forwarding이라고 한다.