Private Network(사설망)는 IPv4 중 특정 대역을 공인 인터넷이 아닌 가정, 기업 등의 한정된 공간에 사용한 네트워크를 의미합니다.
사설망에 소속된 IP인 사설 IP 대역은 다음과 같으며 오로지 사설망(내부망)에서만 사용 가능하기 때문에 공인망(외부망, 인터넷)에선 사용할 수 없습니다.
사설망과 공인망이 사용하는 IP에 따라 분리되면서 공인망과 사설망의 경계에서 별도의 조치를 취해야 할 필요성이 생겼습니다.
사설망에서 공인 인터넷으로 나가고자 할 때 자신의 출발지 IP(Source IP)를 사설 IP 그대로 쓸 수 없기 때문입니다.
사설 IP는 사설망에서만 사용하도록 규정한 만큼 공인 인터넷에서 사설 IP를 쓸 수 없지요.
사설 IP는 사설망이라면 어디에서든 쓸 수 있기 때문에 자신의 IP(Source IP)를 사설 IP로 유지한 채 공인 인터넷로 나간다면 자신이 왔던 길을 찾지 못한 채 영영 돌아오지 못할 것입니다.
그렇기에 사설 IP를 공인 IP로 변환할 필요가 있습니다.
IP를 변환하는 것은 사설망과 공인망의 통신에서만 필요한 것이 아닙니다.
자사의 사설망(내부망)과 전용 회선(Leased Line)을 통해 대외사의 사설망(내부망)을 연결할 경우, 이 경우의 통신에서도 IP를 변환해야 할 필요가 많습니다.
자신의 실제 IP를 노출시키지 않아야 하거나 반대편 기업의 실제 IP로 목적지 IP를 변환하여야 할 필요가 있을 때 사용합니다.
이에 IP를 변환하기 위한 방법을 고안한 것이 바로 Network Address Translation(NAT)입니다.
NAT(Network Address Translation)는 IP 주소 혹은 IP 패킷의 TCP/UDP Port 숫자를 변환 및 재기록하여 네트워크 트래픽을 주고받는 기술을 의미합니다.
여기서 IP 주소뿐만 아니라 IP 패킷의 TCP/UDP Port 숫자를 변환한다고 말한 이유는 실제로 NAT 의미가 IP 주소뿐만 아니라 Port(이하 포트)까지 변환시켜 사용하는 것을 포함하기 때문입니다.
사용자 1(10.10.10.10/24
)이 공유기를 통해 공인망에 존재하는 웹 서버(125.209.22.142:80
)에 접속하려고 합니다.
사용자 1은 사설 IP를 보유하고 있기 때문에 공인망으로 나아가기 위해서는 자신의 사설 IP를 공인 IP로 반드시 변환(NAT)해야 합니다.
① 사용자가 웹 서버에 접속하기 위해 NAT 장비(Gateway)에 패킷을 보내는데 IP/Port 정보는 첫 번째 표와 같습니다.
② 이를 받아든 NAT 장비가 자신에게 허용된 규칙을 확인하고 공인망의 웹서버에게 보내기 위해 사용자의 사설 IP를 자신의 공인 IP로 변환하여 웹서버에게 전달합니다.
③ 웹서버가 사용자가 보낸 요청을 처리하고 응답을 사용자에게 보냅니다.
④ 목적지 IP를 공인 IP에서 사용자의 실제 사설 IP로 변환하여 전달합니다.
NAT 장비에 할당된 공인 IP는 하나이지만 사용자는 2명입니다.
사용자 1이 자신의 출발 포트를 9999로 지정하여 NAT 장비에 전송했음을 위 과정을 통해 알 수 있었죠. 그런데 동시에 사용자 2도 자신의 출발 포트를 9999로 설정하여 전송한다면 어떻게 될까요? 패킷이 공인망으로 나아갈 땐 문제가 없겠지만 되돌아올 때 문제가 발생하겠죠.(③)
이에 사용되는 것이 PAT(Port Address Translation)입니다.
애초에 사용자 1과 사용자 2로부터 패킷을 전달받아 사용자의 IP에 대해 NAT 장비가 NAT를 실시할 때 출발지 포트를 임의로 변경하는 것입니다.
PAT는 출발지 포트 변경 시에는 오로지 이 용도로만 사용되기 때문에 기억해두시는 것이 좋습니다.
NAT에는 목적지의 IP 변경도 존재합니다.
NAT를 수행하는 네트워크 장비의 종류는 매우 다양합니다.
주로 관문 역할(Gateway)을 하는 네트워크 장비가 주로 NAT를 수행
가정에서는 공유기가 내부망과 공인망의 경계에서 NAT를 실시
기업에서는 과거 라우터가 이 역할을 자주 맡았으나 요즘에는 방화벽, VPN, L4 스위치 등이 이 역할을 수행
공인망에 노출되는 관문에 해당하는 장비인만큼 보안 기능을 곁들인 장비는 맡는 것이죠.
NAT를 수행하는 장비들은 자신에게 설정된 규칙(Rule)에 따라 허용/거부를 판단하고, NAT를 실시하고 이를 기록
위에서 언급했던 NAT와 PAT 과정에서 생성된 세션 테이블을 표현한 그림입니다.
첫 번째 예시에서는 사용자 1의 세션 테이블에는 어떠한 IP와 어떠한 Port로 NAT/PAT되어있는지 기록되어있습니다.
두 번째 예시에서는 L4 스위치를 거쳐 실제 서버로 Request가 유입되면서 목적지인 실제 서버의 사설 IP로 NAT된 것이 세션 테이블에 반영
보통 세션 장비에 정해진 Rule(이하 규칙)에 의해 허용된 IP만이 NAT를 실시할 수 있고 세션 테이블에 이름(Session, 이하 세션)을 올릴 수 있게 됩니다.
주로 방화벽과 같은 장비가 이러한 작업을 수행하죠. 그리고 테이블에 기록된 IP는 규칙에 의해 나가거나/들어온 뒤 다시 들어오거나/나갈 수 있습니다.
즉 규칙에 의해 한 번 허용이 된 패킷(Request)은 반대 방향(Response)에 대한 정책을 별도로 수립할 필요 없이 테이블에 기록된 세션을 보고 네트워크 장비가 통과시킨다는 것을 의미하죠.
이러한 특성을 Stateful이라고 합니다.