요약

  • ARIN의 ACSP 2023.1에는AS13335:AS-CUSTOMERS에 대해 XML API를 사용한 게시자 사례가 기록되어 있으며, 그 결과로 만들어진 RPSL은 많은 멤버를 하나의 물리적members:줄에 배치했습니다.
  • 제안자는 자신이 IRRd v3를 실행한다고 생각한 미러에 재귀 질의를 시험해 보았고, 그 결과 7개의 ASN만 반환되었습니다. ARIN은members줄당 항목 수를 제한하면 AS-SET 질의 결과가 개선될 것이라는 데 동의했으며 구현 전까지 제안을 열어 두었습니다.
  • 논리적 멤버십, RPSL 속성 의미, 직렬화된 바이트, 미러 임포트, 파싱된 객체 상태, 재귀 질의 출력, 생성된 경로 필터는 서로 별개의 산출물입니다. 첫 번째 산출물이 유효하다고 나머지가 온전하다는 증명은 되지 않습니다.
  • 미러 간 직렬화 영수증은 정규화된 멤버 수와 다이제스트를 정확한 내보낸 바이트, 줄 제한, 임포트 식별자, 파싱된 수, 질의 결과 다이제스트에 연결하고, 잘림 또는 거부 상태를 명시적으로 표시해야 합니다.

긴 사슬 끝의 일곱 개 ASN

ARIN ACSP 제안 2023.1에서 가장 시사적인 부분은 객체의 크기가 아닙니다. 동일한 라우팅 정책 사슬을 설명하는 것처럼 보였던 두 답변 사이의 불일치입니다.

Joe Abley는 Cloudflare가 ARIN의 API를 통해 XML 페이로드를 보내AS13335:AS-CUSTOMERS를 자동으로 게시했다고 밝혔습니다. 제안에 표시된 RPSL에는 긴 AS 번호열로 시작하는members:속성이 있었고, 이후 페이지가 축약해 표시한 수많은 멤버가 이어졌습니다. ARIN의 직렬화기는 그 연속값을 하나의 물리적 줄에 배치했습니다.

이어 제안자는 자신이 IRRd v3를 실행한다고 판단했다고 조심스럽게 밝힌 별개의 미러에 대한 재귀 질의의 전체 응답을 보여주었습니다. 질의!iAS-CLOUDFLARE,1은 7개의 ASN과 프로토콜 종료자만 반환했습니다. 페이지는 이 답을 심각하게 잘못된 것이라고 불렀습니다. 패킷 캡처, 파서 추적, 미러 데이터베이스 덤프는 공개되지 않았으므로 정확한 실패 구성 요소는 입증되지 않았습니다. 남겨진 것은 문제의 유형을 가늠하게 하는 단서였습니다. 즉, 크고 유효한 객체가 권위 있는 게시 경로를 벗어난 뒤, 다운스트림 확인자가 작은 파생 결과만 노출한 것입니다.

ARIN의 답변 역시 경계가 분명했습니다. 2023년 2월 7일, ARIN은 단일members줄의 항목 수를 제한하면 AS-SET 질의에 더 나은 결과를 낼 것이라고 말하고, 요구 사항을 조사한 뒤 이 기능을 향후 개발 일정에 올려 구현 전까지 제안을 열어 두기로 했습니다. 페이지는 오늘날에도 열림(Open)으로 표시되어 있습니다. 이 상태는 공개 티켓에 관한 증거일 뿐, ARIN의 현재 출력이 그대로이거나 운영상 완화 조치가 없다는 증명은 아닙니다.

본 기사는 과거의 해당 미러를 다시 시험하지 않으며, 그 미러가 더 이상 접근 가능하지 않을 수도 있다는 점을 전제로 합니다. 또한 Cloudflare의 현재 AS-SET, 경로 필터 또는 BGP에 대해 어떤 주장도 하지 않습니다. 영속적인 교훈은 이 기록이 드러내는 경계입니다.

하나의 집합에는 여러 표현이 있다

AS-SET은 우선 논리적 주장입니다. 이름이 붙은 집합이며, 그 명시적 멤버는 AS 번호 또는 다른 AS-SET 이름일 수 있습니다.RFC 2622는members를 선택적이고 다중 값 속성으로 정의합니다. 또한 목록형 속성과 한 번 이상 반복되는 속성 사이의 중요한 구분을 만듭니다. 어느 한쪽은 다른 쪽 없이도 존재할 수 있습니다.

텍스트 표현은 또 하나의 차원을 더합니다. 각 속성-값 쌍은 하나의 물리적 줄에서 시작하며, 이후 줄이 공백, 탭 또는 더하기 기호로 시작하면 값이 다음 줄로 이어질 수 있습니다.members:속성은 다중 값 속성이므로 여러 개 존재해도 유효합니다. 이러한 선택은 동일한 논리적 멤버십을 유지하면서도 서로 매우 다른 바이트열, 줄 수, 최대 줄 길이를 만들어냅니다.

이 차이는 대개 서식 문제로 치부됩니다. ACSP 2023.1은 그것이 상호 운용성 계약이 될 수 있음을 보여줍니다. 최신 파서는 수십 킬로바트에 이르는 줄을 받아들일 수 있습니다. 더 오래된 입력 판독기는 작은 고정 버퍼, 필드 길이 가정, 또는 앞부분만 유지하고 나머지를 잃는 복구 규칙을 가질 수 있습니다. 전송 계층이 모든 바이트를 전달하더라도 임포터가 하나의 속성을 거부할 수 있습니다. 파서가 부분적인 값만 저장하면서도 키와 주변 필드가 정상적으로 보이는 객체를 노출할 수 있습니다.

공개 기록은 예시 미러에 그중 어떤 메커니즘이 적용되었는지 알려주지 않습니다. 하나를 특정하는 것은 경계가 분명한 상호 운용성 보고를 근거 없는 진단으로 바꾸는 일입니다. 공학적 결론은 특정를 요하지 않습니다. 독립적으로 운영되는 시스템이 RPSL을 교환할 때 물리적 직렬화는 측정할 가치가 있는 상태라는 점입니다.

직렬화기도 운영 인터페이스의 일부다

ARIN의현재 IRR 개요는 XML로 제출된 단순 객체가 백엔드에서 RPSL로 변환된다고 설명합니다. 다른 사용자가 조회하는 기록은 여전히 RPSL입니다.RESTful API 안내는 지원되는 작업에 대해 XML과 RPSL 두 표현을 모두 노출하고,members를 집합에 속한 ASN 또는 AS-SET 객체의 목록으로 설명합니다.

이 아키텍처는 올바르지만 서로 다른 두 책임을 만듭니다. 게시자는 자신의 요청에서 멤버 집합을 통제합니다. ARIN은 XML 표현이 물리적 RPSL로 되는 방식을 통제합니다. 과거 제안에서 XML 스키마는 게시자가 출력 줄당 멤버 수를 선택할 수 없게 했고, 페이지에 따르면 그 선택은 ARIN의 구성 코드가 내린 것입니다.

그래서 “입력이 유효했다”는 방어는 불완전합니다. 소비자는 게시자의 메모리 내 집합을 읽지 않습니다. 직렬화기가 내보낸 바이트를 읽습니다. 그 바이트는 다운로드된 데이터베이스, NRTM 업데이트 또는 Whois를 거칠 수 있습니다. 호환성은 추상 데이터 모델뿐 아니라 출력 프로파일에 달려 있습니다.

짧은 줄은 합리적인 완화책입니다. 레거시 판독기에 가해지는 스트레스 중 하나를 제거하기 때문입니다. RFC 2622에는 그것을 달성하는 합법적 방법이 하나 이상 있습니다. 다중 값 속성을 반복하거나, 값을 여러 물리적 줄에 걸쳐 이어 쓰는 것입니다. 그러나 이 완화책은 예쁘게 출력된 화면에서 추론할 것이 아니라 바이트 수준의 변경으로 시험되어야 합니다. 직렬화기가 화면 표시만 줄바꿈하면서 내보내기에는 긴 형태를 그대로 쓸 수 있습니다. 미러가 새 줄을 받아들이면서 별도의 멤버 수 제한을 적용할 수도 있습니다. 재귀 질의는 객체 자체가 온전하더라도 소스 선택이나 재귀 규칙 때문에 불완전할 수 있습니다.

미러는 새로운 관리 경계다

ARIN의 현재 문서는 NRTM, 다운로드 가능한 데이터베이스 파일, Whois를 통한 게시를 설명하고, 현재 서버가 IRRd 버전 4라고 밝힙니다. 최신IRRd 미러링 문서는 전체 스냅샷과 증분 업데이트를 미러가 조회하고, 파싱하고, 검증하고, 자체 데이터베이스에 기록하는 데이터로 설명합니다. 미러는 투명한 유리창이 아닙니다. 소프트웨어 버전, 구성, 소스 정책, 임포트 이력, 자체 오류 처리를 지닌 별도 운영 복사본입니다.

전송이 완벽할 때도 이 구분은 중요합니다. 소스가 정확한 바이트열을 게시할 수 있고, 미러가 그 열을 수신할 수 있습니다. 그러나 검증이 속성을 거부하거나, 파싱이 일찍 멈추거나, 임포트 실패 후 이전 객체가 남아 있으면 저장된 객체는 달라질 수 있습니다. 반대로 미러가 전체 객체를 저장하더라도 질의 경로가 나중에 깊이, 소스, 출력 제한을 적용할 수 있습니다.

현대 IRRd 문서는 전체 재적재와 업데이트가 트랜잭션이므로 사용자가 절반쯤 끝난 임포트를 보지 않는다고 말합니다. 이는 가치가 있지만, 원자성은 의미적 완전성과 같지 않습니다. 원자적으로 커밋된 부분 파싱도 여전히 부분적입니다. 오래된 미러의 행동 또한 현재 IRRd 문서에서 추론할 수 없습니다. 과거의 예시는 과거로 남아 있어야 합니다.

완전한 관리 사슬에는 따라서 최소한 세 가지 비교가 필요합니다. 미러가 내보낸 바이트를 정확히 수신했는가? 동일하게 정규화된 멤버를 지닌 파싱된 객체를 저장했는가? 질의 엔진이 명시적인 재귀 및 소스 규칙 아래에서 그 저장 상태로부터 기대되는 결과를 반환했는가? 중간 비교를 건너뛰면 운영자는 잘못된 답이 전송, 저장, 해석 중 어디에서 시작되었는지 판단할 수 없습니다.

재귀 출력은 소스 객체가 아니다

IRRd의Whois 질의 문서는!i를 가공된 질의로 설명합니다. 재귀 플래그와 함께 사용하면 중첩된 집합을 따라가며 해석된 멤버를 공백으로 구분된 결과로 반환합니다. 그 출력은 원시 RPSL이 아니라 미러의 로컬 객체 그래프에 대한 계산입니다.

이 차이는 운영적으로 중요합니다. 원시 객체 질의는 로컬 사본이 모든members값을 포함하는지 보여줄 수 있습니다. 재귀 질의는 확인자가 중첩된 집합을 조회한 후 무엇을 도출하는지 보여줍니다. 필터 생성기는 그 도출된 AS 목록을 프리픽스 질의와 라우터 정책으로 변환할 수 있습니다. 각 단계는 내부적으로 유효하면서 이전 단계의 누락을 물려받을 수 있습니다.

최종 라우터 구성은 소스에서 더 멀어집니다. 운영자는 여러 IRR 소스를 조합하고, 한 소스를 다른 소스보다 우선시하고, 집합을 제외하고, 재귀를 제한하고, RPKI와 사설 정책을 병합할 수 있습니다. ACSP 2023.1의 어떤 내용도 특정 라우터가 부분 필터를 설치했다는 것을 증명하지 않습니다. 이 예시는 제출된 증거 속에 부분적 질의 답이 존재했고, ARIN이 줄 제한을 질의 결과 개선의 수단으로 보았다는 것을 확립할 뿐입니다.

필터 사전 완전성 점검을 정당화하기에 충분합니다. 필터 생성기는 구문적으로 성공한 AS-SET 전개를 전개가 온전하다는 증명으로 다루어서는 안 됩니다.

의미와 바이트를 비교하는 영수증

ARIN과 미러 운영자는 미러 간 직렬화 영수증으로 이 경계를 관측 가능하게 만들 수 있습니다. 이는 편집 권고이며, 공표된 ARIN 또는 IRRd의 약속이 아닙니다.

소스 측에서 영수증은 AS-SET 키, 객체 버전 또는 게시 일련번호, 정규화된 멤버 수, 문서화된 정준 순서에 대한 다이제스트를 기록합니다. 그다음 직렬화기를 식별하고 정확한 내보낸 RPSL 바이트 다이제스트, 총 바이트 수, 물리적 줄 수, 최대 줄 길이를 기록합니다.

미러 측에서는 짝이 되는 기록이 소스, 스냅샷 또는 NRTM 일련번호 범위, 임포트 시각, 파서 버전, 임포트 결과를 식별합니다. 수신 바이트 다이제스트를 소스 영수증과 비교한 다음, 저장된 객체 다이제스트, 파싱된 멤버 수, 정규화된 멤버 다이제스트를 기록합니다. 실패는 유형을 구분해야 합니다. 거부됨, 잘림, 부분 파싱, 임포트 실패 후 오래됨, 또는 완전함. 침묵은 허용되는 잘림 신호가 아닙니다.

질의 시점에는 운영자가 질의 문자열, 선택된 소스, 재귀 플래그 또는 깊이, 제외된 집합, 실행 타임스탬프, 결과 수, 결과 다이제스트를 추가합니다. 다운스트림 필터 생성기는 기밀 라우터 정책을 공개하지 않고도 자체 산출물 다이제스트를 그 질의 영수증에 선택적으로 연결할 수 있습니다.

이 영수증은 모든 운영자가 같은 소프트웨어나 라우팅 정책을 쓰도록 요구하지 않습니다. 불일치를 눈에 보이게 만들 뿐입니다. 소스 수가 10,000이고 미러의 파싱 수도 10,000인데 재귀 결과가 중첩 집합 규칙 때문에 다르다면 주목점은 해석으로 옮겨갑니다. 수신 바이트는 일치하지만 파싱 수가 더 작다면 주목점은 임포터로 옮겨갑니다. 바이트 다이제스트가 다르다면 전송 또는 내보내기 관리가 첫 번째 질문이 됩니다.

그 결과는 좁은 책임성 메커니즘입니다. 중앙 라우팅 권위도 아니고, IRR 기록이 실시간 BGP를 증명한다는 주장도 아닌, 조용한 표현 손실이 완전한 답으로 위장하는 일을 막는 방법입니다.

출처