요약

  • IPv6 사이트 로컬 접두사 FEC0::/10은 전역 접두사 없이 내부 주소를 쓸 수 있었지만, 주소만으로는 어느 사이트의 주소인지 알 수 없었다.
  • RFC 4193은 그 경계 의존성을 로컬에서 생성하는, 고유할 가능성이 매우 높은 접두사로 바꾸고 도달 범위는 각 네트워크의 라우팅에 맡겼다.

분석

주소의 나머지 절반은 호스트에 있었다

애플리케이션이 FEC0::1234:5678:9ABC를 저장하고 연결을 시도한다. 여러 네트워크에 연결됐거나 이동 중인 호스트에서는 이 16진수 문자열만으로 부족할 수 있었다. %1 같은 범위 식별자로 어느 사이트인지도 지정해야 했다. 호스트 인스턴스가 달라지면 같은 사이트가 %2로 표시될 수도 있다. 주소는 옮겨 쓸 수 있어 보였지만, 빠진 절반은 호스트의 로컬 상태에 있었다.

이것이 IPv6 사이트 로컬 유니캐스트 주소가 요구한 까다로운 거래였다. 2003년 4월 RFC 3513은 FEC0::/10을 전역 접두사 없이 사이트 안에서 쓰도록 정의했다. 그 뒤에는 54비트 서브넷 ID와 64비트 인터페이스 ID가 이어졌다. 라우터는 이 주소를 출발지나 목적지로 쓰는 패킷을 사이트 밖으로 전달하지 않아야 했다. 네트워크는 전역 라우팅 블록을 받지 않고도 내부에서 IPv6를 사용할 수 있었다.

하지만 주소는 어느 사이트가 그 주소를 로컬하게 만드는지 표시하지 않았다. FEC0::1은 서로 다른 두 사이트에 동시에 존재할 수 있었다. 2004년 9월 RFC 3879은 그 결과를 적었다. 애플리케이션은 별도 사이트 식별자를 관리해야 하고, 문자 그대로 된 주소를 호스트와 무관한 목적지로 저장하거나 DNS에서 바로 알아낼 수 없었다. IP 주소를 넘기는 소프트웨어는 그 모호함까지 경계 너머로 실어 보낼 수 있었다.

‘사이트’라는 말 하나에 서로 다른 경계가 너무 많이 실렸다. 기업 네트워크, 캠퍼스, 지리적 거점, 라우팅 도메인, 방화벽 구역, 행정 경계는 겹치지 않을 수 있다. RFC 3879은 보안, 도달성, 라우팅, 서비스 품질, 관리, 예산의 경계를 열거한다. DMZ도 한 목적에서는 내부이고 다른 목적에서는 외부일 수 있다. 패킷에는 주소가 하나지만 조직에는 경계 지도가 여럿이다.

라우터도 같은 논쟁을 떠안았다. 같은 사이트 로컬 목적지가 패킷의 유입 인터페이스에 따라 다른 곳을 가리킨다면, 여러 사이트를 잇는 라우터는 사이트별 경로와 별도의 포워딩 테이블 처리가 필요했다. 터널과 가상 라우팅 테이블로 일을 처리할 수는 있어도 ‘사이트’를 보편적인 단위로 만들지는 못했다.

장점은 분명했다. 전역 접두사 없이 내부 주소를 쓰고, 라우터가 경계에서 차단할 수도 있었다. 2003년 IPv6 작업 그룹은 대체안 마련 쪽으로 움직였다. RFC 3879은 3월의 어느 정도 합의와 7월의 확인을 기록하면서도 합의가 만장일치와는 거리가 멀었다고 밝힌다. 2004년 9월 문서는 FEC0::/10을 폐기했지만 대체안이 표준화될 때까지 기존 구현과 배포를 계속 사용할 수 있게 했다. 이 접두사를 다른 용도로 다시 배정하려면 향후 IETF 표준화 결정이 필요했다.

RFC 4193은 2005년 10월 대체안을 제시했다. 고유 로컬 IPv6 주소는 FC00::/7을 사용한다. 로컬에서 할당하는 접두사에는 40비트 Global ID를 의사 난수로 생성하고, 뒤에 16비트 서브넷 ID와 64비트 인터페이스 ID를 둔다. 여기서 ‘Global’은 접두사가 고유할 것이라는 뜻이지 전 세계 인터넷에서 도달 가능하다는 뜻이 아니다. RFC가 보장하는 건 높은 고유성 확률이지 확실성은 아니다. ULA는 로컬 통신용이며 제한된 사이트들 사이에 라우팅할 수 있지만 글로벌 인터넷 전체에 라우팅할 주소는 아니다.

네트워크를 합칠 때 차이가 드러난다. 각자 생성한 ULA 접두사가 충돌할 가능성은 낮아서 합병이나 사설 상호 연결 때 인터페이스 주소를 다시 매기지 않아도 될 수 있다. 그래도 사이트 간 통신에는 명시적인 경로 설정이 필요하다. 주소에 보편적인 ‘사이트’ 정의를 넣지 않아도 되고, 각 네트워크가 라우팅과 필터를 어디까지 열지 결정한다.

2006년 2월 RFC 4291은 이 폐기를 IPv6 주소 구조에 반영했다. 새로운 구현은 FEC0::/10의 옛 특수 동작을 지원하면 안 된다. RFC의 흐름은 설계가 바뀐 이유는 설명하지만, 현재 몇 개 시스템이 이 접두사를 쓰는지는 세지 않는다. 현재 보급량을 알려면 호스트, 라우터 또는 트래픽을 조사해야 한다.

출처