Development2016.06.23 10:38

IPv4 의 주소 체계가 더이상 새로운 주소를 사용자들에게 주지 못할거라는 이야기가 나온지 참 오래된 것 같습니다. 마르지 않는 샘처럼 끊임없이 나오는 IPv4 주소 덕분에(?) 생명연장의 꿈을 꾸고 있습니다만 근래 애플(Apple)의 앱 검수 기준 변화는 IPv6 로의 트랜지션이 본격적으로 시작된 것이라는 느낌을 주기에 충분합니다.


IPv4 네트워크가 워낙에 광범위하게 사용되고 있기 때문에 어느날 갑자기 "오늘부터 IPv6 를 써야해!" 하기는 쉽지 않습니다. 때문에 많은 기술 표준과 이를 준수하는 어플라이언스를 통해 점진적인 트랜지션이 일어나고 있습니다. 개발을 하는 사람들은 사실 이걸 신경쓰지 않아도 됩니다만 이왕 세상이 변하고 있는것, 이해가 가는 부분까지 파보기로 했습니다.


NAT 라는 이야기는 많이 들어보셨을 겁니다. Network Address Translation 의 약자로 이 역할을 하는 장비들은 내부 주소(Private IP)를 외부 주소(Public IP)로 바꿔주는 역할을합니다. 당연한 이야기지만 내부 주소는 사적인 네트워크에서만 동작하기 때문입니다. 외부의 다른 인터넷 자원과의 통신을 위해서 주소 체계를 바꾸어 주는 것이지요. 이것을 IPv6 에 대응하여 IPv4 네트워크와 자연스러운 연결을 위해 만든 것이 바로 NAT64 입니다.


IPv6 체계가 퍼블릭 네트워크에 완전히 보급되는 것은 시간도 오래걸리고 어쩌면 불가능 할지도 모릅니다. 떄문에 IPv4, IPv6 는 한동안 혼용될 것입니다. 상대적으로 내부 네트워크는 IPv6 로의 전이가 쉬운 편이라 사내망에서는 이미 IPv6 를 쓰는 곳들이 꽤 많습니다. 내부에서 사용되는 IPv6 만 사용하는 기기들이 외부의 IPv4 로 구성된 기기에 접근하기 위해서 NAT64 를 활용한다고 보시면 되겠습니다. 시스코에서 게시해 둔 아래의 그림을 보면 이해가 빠를겁니다.


출처 : 시스코



IETF 에서는 NAT64 를 위해서 특정한 IPv6 주소를 활용할 수 있도록 규약을 정의해두었습니다. 이 주소를 활용하게 되면 패킷의 헤더 일부분에 실제 접근해야 하는 IPv4 주소를 포함시킬 수 있게 됩니다. NAT64 어플라이언스는 이 주소체계를 식별하여 IPv4 네트워크로 패킷을 전달할 때 목적지 주소로 활용할 수 있게 되는 것이죠. 실제 패킷의 응답을 다시 받아주기 위해서 NAT64 장비는 이 과정에 원본 주소로 활용할 IPv4 Pool 을 유지하면서 응답을 적절한 사용자에게로 리턴해 줄 수 있게 됩니다.


이러한 과정을 소화하기 위해서는 DNS 역시 AAAA 리소스 레코드로 IPv4 주소를 포함한 데이터를 가지고 있어야 하며 이는 다음글에서 DNS64 라는 주제로 살펴보도록 하겠습니다. NAT64 에 대해서 관심이 더 있으시다면 시스코의 아래 링크와 IETF 문서를 읽어보시면 ㄷ움이 되시겠습니다. 


시스코의 NAT64 관련 글 살펴보기 [바로가기]

IETF 의 RFC6146 (Stateful NAT64) 규약 살펴보기 [바로가기]



저작자 표시 비영리
신고
Posted by 노피디
Cloud Tech.2013.11.06 11:19
인터넷에 연결되어 있는 컴퓨터에 쉽게 접근하기 위해 우리는 DNS 를 사용합니다. DNS 는 사람이 이해할 수 있는 체계로 된 주소를 네트워크가 이해하기 좋은 주소로 바꿔주는 역할을 합니다. 예를들어 www.naver.com 을 DNS 를 통해 조회를 하게 되면 72.247.151.60 과 같은 네트워크 주소를 돌려주게 됩니다. 이 주소를 얻기까지 많은 과정이 있지만 일단 이 포스팅의 주제는 아니므로 넘어가도록 하겠습니다 ^^

 
위의 스크린 샷처럼 1개의 IP 주소가 리턴되는 경우에는 컴퓨터나 웹 브라우저는 고민할 것 없이 해당 IP 주소를 이용해서 자원에 접근하게 될 겁니다. 그런데 만약, 대규모의 사용자 요청을 처리하기 위해서 여러대의 서버와 IP 를 이용하는 경우에는 어떤 주소값을 사용해야 할까요? 가령 아래와 같은 결과가 리턴된다면 컴퓨터나 브라우저는 어떤 IP 주소를 택하게 될까요?

 
 DNS 조회 결과를 활용하는 방법에 대해서도 RFC 표준이 존재하고 있고 IPv6 의 도입등에 따라 표준도 지속적으로 개정이 되고 있습니다. 이 말은, 운영체제에 따라서 DNS 가 A 레코드를 여러개 리턴했을 경우 활용하는 방법이 달라진다는 것을 의미합니다. 가령 윈도우XP 의 경우 굉장히 오래된 운영체제로 리턴된 여러개의 A 레코드 중에서 가장 먼저 리턴된 값을 이용하게 됩니다.

반면 윈도우Vista 라던가 윈도우7과 같은 비교적 근래에 출시된 운영체제들은 개정된 RFC 표준에 맞추어 IP 주소를 선택하게 됩니다. RFC 3484 (http://www.ietf.org/rfc/rfc3484.txt, Default Address Selection for IPv6) 는 IPv6 환경에서 주소를 선택하는 방법에 대한 가이드이지만 많은 운영체제 개발사들은 IPv4 환경에서도 이런 룰을 적용하고 있어서 한 번 읽어볼 필요가 있습니다

 
영어로 가득한 내용이라 울렁울렁 하겠습니다만, 친절한 NoPD 의 요약에 따르면 "프리픽스 부분이 가장 긴 주소를 선택한다" 라고 합니다. 왜 이런 로직을 적용하게 되었는지는 RFC 문서를 직접 읽어보시고 공유해 주시면 감사하겠습니다 ;;; 여튼, 우리가 알아야 할 중요한 내용은 근래의 운영체제들은 이 로직을 대부분 따르고 있다는 사실입니다. 마이크로소프트 테크넷 블로그에 등록된 아래 글이 그 내용을 잘 요약해 주고 있습니다. 역시 친절한 NoPD 의 발췌본을 읽어보시겠습니다 (http://blogs.technet.com/b/networking/archive/2009/04/17/dns-round-robin-and-destination-ip-address-selection.aspx)

 
특정한 도메인에 대하여 5개의 A 레코드가 리턴됐다고 했을때, 사용자의 IP 주소와 비교하여 NetMask 를 몇 비트를 사용해야 하는가가 핵심입니다. 예제는 무척 간단한 상황을 가정해서 쉽게 계산이 됩니다만 실제 상황에서는 조금 더 복잡할 수 있겠죠? IP 주소를 하나 선택하는데 있어서도 영향을 주는 것들이 무척 많습니다. DNS 관련된 이슈를 트러블 슈팅 하실 때 이런 내용도 알고 계시면 도움이 많이 될 것 같아서 공유해 봅니다. 아래의 주소들을 방문해서 보다 자세한 내용을 확인해 보시기 바랍니다.

 
저작자 표시
신고
Posted by 노피디

티스토리 툴바