NAT란 무엇인가
NAT는 network address translation의 줄임말로 네트워크상의 주소변환을 의미합니다. 이는 내부/외부 네트워크 간 데이터 전송 전 여러개의 사설(private) ip와 하나의 공용(public) ip를 매핑하는 방법입니다. NAT는 주로 하나의 공용 ip를 할당 받아 여러 기기를 사용하고 싶을 때 사용합니다.
NAT가 작동하는 방법
먼저 ISP(Internet Service Provider; sk 브로드밴드나 kt 등)에서 인터넷을 공급받아 공유기에 연결을 해놓았고, 그 공유기에 연결된 컴퓨터가 있다고 가정해 보겠습니다.
여기서 공유기는 ISP로 부터 공용 ip(public ip) 한개를 할당 받았으며 NAT 설정을 해놨을 경우 공유기에 연결된 컴퓨터들은 사설망(private network) 이라는 그룹에 묶이게 됩니다. 사설망 내부의 기기들은 공유기로 부터 ip를 할당 받는데 이를 사설 ip(private ip)라고 합니다. 사설 ip는 공유기가 임의로 지정한 ip이므로 사설망 밖의 기기들은 사설 ip를 알 수 없고 오직 공유기만이 사설 ip를 알고 있습니다.
이러한 환경에서 사설망의 컴퓨터를 사용해 뭔가를 검색했을 때 컴퓨터는 검색 데이터와 본인이 할당받은 ip 등을 가지고 패킷을 만들어 공유기에 전달합니다. 공유기는 이 패킷을 인터넷으로 전송 하는데 공유기에 NAT가 설정되어 있으므로 전송 전에 컴퓨터에서 전송한 패킷의 발신 ip 주소를 컴퓨터의 ip가 아닌 공유기가 할당 받은 ip로 변경하여 인터넷으로 보냅니다.
전송한 패킷은 인터넷의 어떤 서버가 읽게되고 서버는 그에 대한 응답을 하게되는데 서버가 응답으로 보낼 패킷의 목적지 ip로는 서버가 요청받은 패킷의 발신 ip를 사용하게 됩니다. 여기서 서버가 요청받은 패킷의 발신 ip는 공유기의 ip 이므로 서버의 응답은 공유기가 받게 되고 공유기는 이전에 어떤 기기가 패킷을 보냈는지 알고 있으므로 아까 검색을 요청했던 컴퓨터로 응답 패킷을 전달함으로 데이터 송수신이 마무리 됩니다.
PAT - Port Address Translation
PAT는 NAT를 구현하는 여러 방법 중 하나 입니다.
먼저 NAT의 목적은 하나의 공용 ip를 여러 기기가 나눠 쓸 수 있도록 하는 것인데 PAT 타입은 이를 위해 매핑 테이블을 만듭니다.
앞서 설명한 방법에 따라 사설망의 기기에서 인터넷으로 요청 패킷을 보낼 때 사설 ip를 공용 ip로 바꿔야 합니다. 이 때 사설 ip에 특정 포트번호를 할당하여 이를 기록하고, 전송할 패킷의 발신 ip를 [공용 ip]:[포트번호] 형태로 변경하여 인터넷으로 전송합니다.
전송과 마찬가지로 응답 패킷 수신 시 수신 받은 패킷의 목적지 ip가 [공용 ip]:[포트번호] 형태일 것이고 매핑 테이블에서 포트 번호를 찾아 사설망의 기기로 패킷을 전달함으로 패킷 수신을 마무리 짓게 됩니다.
NAT를 쓰는 이유
- 보안: 특별한 설정을 하지 않는 이상 외부망에서 사설망의 기기로 접근하는 방법은 없습니다. 이는 사설망의 ip를 외부로 부터 숨기는 기능을 함으로 보안성을 높일 수 있습니다.
- IP 보존: 기본적으로 ip 주소는 인터넷을 사용하는 기기 마다 유일한 하나의 값이 할당되어야 합니다. 기존 IP 버전 4(IPv4)의 ip는 40억개 정도 쓸 수 있는데 1970년대에는 충분해 보였습니다. 하지만 지구상의 인구수만 70억이 넘고 인당 인터넷 기기 숫자까지 계산하면 어마어마한 숫자의 ip가 필요하게 되어 IP 버전 6(IPv6)를 적용해 가고 있는 상황입니다. 이런 상황에서 하나의 ip를 여러 기기가 나눠쓰는 NAT는 주요한 쓰임이 있는 것이 분명해 보입니다.
관련 글
'cs' 카테고리의 다른 글
[네트워크] 프록시 Proxy (1) | 2022.10.06 |
---|---|
[네트워크] 패킷 Packet (2) | 2022.09.23 |
[시큐어 코딩/Secure Coding] API 악용 - equals()와 hashCode() 하나만 정의 (0) | 2019.02.14 |
[시큐어 코딩/Secure Coding] API 악용 - null 파라미터 미검사 (0) | 2019.02.14 |
[정보보안] Seven pernicious kingdoms: 소프트웨어 보안 에러의 분류 (0) | 2019.02.12 |
댓글