BGP 경로와 RPKI 유효성을 확인하는 방법
BGP 경로 검사는 서버 검사가 답할 수 없는 질문에 답합니다. “기계가 살아 있는가?”가 아니라 “인터넷이 실제로 이 접두사로 트래픽을 운반하고 있는가, 그리고 올바른 기원에서 오는가?”입니다. 다른 네트워크들이 보는 광고 — 기원 자율 시스템, AS 경로, 이 접두사를 아예 보는 경로 수집기의 수 — 을 읽고, 누가 무엇을 기원할 수 있는지를 적은 서명된 등록부인 RPKI와 대조합니다. 이 가이드는 각 신호가 무엇을 의미하는지, 어디서 사람을 오도하는지, 그리고 이 사이트의 BGP 조회를 사용하는 5단계 루틴을 차례로 설명합니다.
마지막 업데이트:
경로가 잘못될 때
공개 서비스를 운영해 본 사람에게는 익숙한 장면입니다. 사이트는 내 쪽에서는 열리고, 서버는 정상이며, 인증서도 유효한데 — 다른 나라의 고객들은 아무것도 얻지 못합니다. 내 사무실에서의 모니터링은 정상이라고 말합니다. 그들의 트래픽은 결코 도착하지 않습니다. 도달 가능성은 내 서버의 속성이 아니기 때문입니다. 그것은 내 접두사를 다른 사람들의 네트워크를 가로질러 운반하는 광고들의 속성이며, 그 광고들은 내 기계에서 아무것도 바뀌지 않았는데도 바뀌거나, 필터링되거나, 다른 광고에 의해 반박될 수 있습니다. “사이트가 다운됐다”는 때로 서버 옷을 입은 라우팅 사실입니다.
경로 장애는 구분할 가치가 있는 세 가지 모양으로 옵니다. 하이재킹: 다른 자율 시스템이 내 접두사 — 또는 그보다 더 구체적인 조각 — 를 광고해, 결코 자기 것이 아니었던 트래픽을 끌어당깁니다. 경로 유출: 한 네트워크가 받은 경로를 보내서는 안 될 피어나 제공자에게 전파해, 트래픽이 터무니없는 우회를 하거나 전달할 수 없는 네트워크에 빠집니다. 그리고 조용한 것: 광고가 철회되거나, 구성 변경, 피어링 분쟁, RPKI 폐기에 의해 필터링되어, 인터넷의 일부에 경로가 아예 남지 않는 경우입니다. 세 가지의 고치는 방법은 완전히 다르므로, 첫 번째 일은 그것들을 구분하는 것이고 — 그것은 실제로 무엇이 광고되고 있는지 보는 것에서 시작합니다.
광고에서 시작하세요
첫 번째 질문은 가장 평범합니다. 이 접두사가 전역 테이블에 아예 광고되고 있는가, 그렇다면 누구에 의해 광고되는가? 광고의 마지막 AS — 기원 ASN — 은 그 접두사를 보유하고 있다고 주장하는 네트워크를 지목하고, 그 뒤의 등록 데이터는 그 ASN이 속한 조직을 지목합니다. 기원이 내 ASN이거나 내 제공자의 것이라면, 그 광고는 최소한 올바른 집을 주장하고 있습니다. 한 번도 본 적 없는 이름이라면, 처음 10초 안에 중요한 것을 배운 셈입니다.
정보는 경계 사례에 실려 있습니다. 기원이 전혀 없는 접두사는 수집기가 볼 수 있는 어디에도 광고되고 있지 않습니다 — 접두사의 오타, 한 번도 이루어지지 않은 광고, 또는 모든 곳에서 철회된 광고입니다. 어떤 결론을 내리기 전에, 그것을 덮는 덜 구체적인 접두사가 있는지 확인하세요. 트래픽이 집계 아래에서 여전히 흐르고 있을 수 있기 때문입니다. 한 접두사에 대한 여러 기원은 자동으로 의심스럽지 않습니다. 애니캐스트 서비스와 대형 CDN은 설계상 같은 접두사를 많은 네트워크에서 기원시키고, 제공자 사이에서 이전 중인 접두사는 한동안 두 개의 기원을 합법적으로 보여줄 수 있습니다. 여러 기원에 더해 내가 모르는 보유자, 그리고 내가 아무것도 바꾸지 않은 시각에 시작된 것 — 이 조합이야말로 경보를 받을 자격이 있습니다.
가시성과 AS 경로
루킹 글래스는 내 라우터에게 묻지 않습니다. 경로 수집기에게 묻습니다 — 이 사이트 데이터 뒤에 있는 RIPE RIS 수집기는 전 세계 네트워크와 피어링하고, 그 피어들이 자기들에게 광고한 것을 기록합니다. 가시성은 내 접두사를 아예 보는 수집기 피어의 수입니다. 건강하고 오래 지속된 접두사는 보통 거의 모든 수집기에게 보입니다. 자유 낙하하는 수 — 또는 어제는 가득 찼는데 오늘은 한 줌인 수 — 는 광고가 철회되고 있거나, 필터링되고 있거나, 좁아지는 경로 집합을 통해서만 보이고 있음을 시사합니다.
AS 경로는 광고가 이동한 네트워크의 사슬입니다. 오른쪽에서 왼쪽으로, 기원에서 트랜짓 제공자를 거쳐 수집기의 피어 쪽으로 읽으세요. 어떤 업스트림이 그 경로를 운반하는지, 그리고 내 제공자가 사슬의 어디에 앉아 있는지를 알려줍니다 — 그리고 유출이 일어나면, 경로는 거기 있어서는 안 될 네트워크를 가운데에 앉아 트래픽을 옆으로 전달하는 모습으로 보여줍니다. 길러야 할 읽기 습관 하나: 경로에서 반복되는 ASN은 대개 의도적인 프리펜딩으로, 트래픽 엔지니어링 신호이지 루프가 아닙니다. 그리고 가장 짧은 경로가 실제 트래픽이 가는 길은 아닐 때가 많습니다. 라우팅은 지리가 아니라 상업 정책을 따르기 때문입니다.
계기를 신뢰하기 전에 보정하세요. 수집기는 자기들과 피어링하는 네트워크들의 시야를 봅니다 — 크고 잘 배치된 표본이지만, 지구상의 모든 라우터는 아닙니다. 접두사는 수집기에게는 보이지 않지만 RIS와 피어링하지 않는 제공자 내부에서는 도달 가능할 수 있고, 수집기에게는 보이지만 특정 트랜짓이 더 하류에서 필터링할 수도 있습니다. 루킹 글래스 결과는 진지한 관측점에서 본 전역 테이블에 대한 증거입니다. 지금 내 접두사에 대해 이루어지는 모든 전달 결정의 사진은 아닙니다.
쉬운 말로 설명하는 RPKI
RPKI는 “이것을 광고할 수 있다”를 외침이 아닌 검증 가능한 주장으로 만들려는 인터넷의 시도입니다. 접두사 보유자는 ROA — 경로 기원 승인, 즉 이름이 지정된 ASN이 그 접두사를 선언된 최대 접두사 길이까지 기원할 수 있다고 명시하는 서명된 객체 — 를 게시합니다. Routinator 같은 검증기 — 이 사이트 검사의 뒤에 있는 것이 바로 그것입니다 — 는 다섯 지역 등록 기관(APNIC, ARIN, LACNIC, RIPE NCC, AFRINIC)의 신뢰 앵커에서 ROA를 가져와 각 광고를 그것들과 대조합니다. 서명된 명세가 내 광고를 포함하거나, 포함하지 않거나 — 그게 전체 메커니즘입니다.
모든 광고는 세 가지 상태 중 하나에 떨어집니다. 유효(valid): ROA가 이 접두사, 이 기원 ASN, 이 길이를 포함합니다. 무효(invalid): ROA가 접두사를 포함하지만 광고가 그 조건을 어깁니다 — 그리고 무효 안의 구분이 중요합니다. invalid_asn은 잘못된 네트워크가 기원하고 있다는 뜻이고, invalid_length는 올바른 네트워크가 ROA가 허용하는 것보다 더 구체적인 접두사를 광고한다는 뜻입니다. 알 수 없음(unknown, 종종 not-found라고 불립니다): ROA가 그 접두사를 아예 포함하지 않아 대조할 대상이 없습니다.
이제 솔직한 부분입니다. 무효는 증거이지 하이재킹의 증명은 아닙니다. ROA는 잘못 발급되거나, 접두사 이전 후에 낡거나, 운영팀이 나중에 집계를 나눌 때 잊어버리는 최대 길이로 쓰이기도 합니다 — 잘못된 ASN의 경우는 빠른 전화 한 통의 가치가 있지만, 누군가를 비난하기 전에 내 서류부터 확인하세요. 그리고 알 수 없음은 보통 아무도 ROA를 게시하지 않았다는 뜻일 뿐입니다. 전 세계 접두사의 큰 비율이 여전히 ROA가 없으므로, 알 수 없음은 시스템의 빈틈이지 그 접두사에 대한 낙인이 아닙니다. 그래도 무효에는 실제 이빨이 있습니다. 많은 대형 네트워크가 이제 무효 광고를 바로 폐기하므로, 무효 상태가 내가 출발했던 도달 가능성 구멍의 직접적인 원인일 수 있습니다.
5단계 점검 루틴
먼저 더 단순한 층을 배제하세요 — 아직 전파 중인 새 DNS 레코드(DNS 전파 검사기로 확인)나 외부에 닫힌 서비스 포트(포트 스캐너로 확인)는 라우팅 장애를 완벽하게 흉내 냅니다. 그런 다음 BGP 조회를 열고 순서대로 작업합니다. 1단계, 접두사: IP나 접두사를 입력하고, 실제로 내 트래픽을 운반하는 덮는 광고를 확인합니다. 2단계, 기원: 기원 ASN과 보유자를 읽습니다 — 내 것인지, 제공자의 것인지, 낯선 자의 것인지. 3단계, 가시성: 몇 개의 수집기 피어가 그것을 보고 있으며, 그 수가 이 접두사의 평소 모습처럼 보이는가?
4단계, RPKI: 유효, 무효(어느 종류인가?), 또는 알 수 없음 — 그리고 invalid_asn이 낯선 자를 지목한다면, 목록을 마치기 전에 에스컬레이션하세요. 5단계, AS 경로: 어떤 업스트림이 그 광고를 운반하며, 속하지 않은 경로에 앉은 네트워크는 없는가? 그런 다음 그것이 눈앞에 있는 동안 적어 두세요: 접두사, 기원 ASN과 보유자, 가시성 수, RPKI 상태, 본 경로 — 그리고 UTC로 시각. 이 도구의 데이터는 RIPEstat와 RIPE RIS에서 오며 약 한 시간 캐시되므로, 타임스탬프 없는 스크린샷은 일화에 불과합니다. 타임스탬프가 있는 메모가 다음 점검과 비교할 수 있는 증거입니다.
명시할 가치가 있는 한계
이 데이터를 먹이는 모든 보고서에는 세 가지 한계가 속합니다. 수집기 커버리지에는 편향이 있습니다: RIS 피어는 많지만 고르게 분포하지 않습니다 — 일부 지역과 일부 네트워크 유형이 다른 것보다 훨씬 잘 대표되므로, 가시성 수는 표본이지 인구 조사가 아닙니다. 전파에는 초가 아니라 분이 걸립니다: 방금 내가 한 합법적인 변경은 합법적으로 아직 보이지 않을 수 있고, 철회된 경로는 실제 트래픽이 옮겨간 뒤에도 수집기에 남아 있을 수 있습니다. 수정이나 재앙을 선언하기 전에 기다렸다가 다시 확인하세요. RPKI 커버리지는 부분적입니다: 많은 접두사가 여전히 ROA가 없으므로, 검증 층은 거기에 참여하는 테이블의 부분만 판단할 수 있습니다.
그리고 논쟁에서 가장 중요한 한계: 여기서의 깨끗한 결과는 내 라우터의 테이블에 무엇이 들어 있는지를 증명하지 않습니다. 내 세션, 내 필터, 내 로컬 기본 설정은 모두 인터넷의 내 구석을 수집기가 보는 것과 합법적으로 다르게 만들 수 있습니다. BGP 조회는 세계가 무엇을 광고하고 보는지 확정하는 데 사용하고, 내 라우터의 BGP 테이블은 내가 그것에 대해 무엇을 하고 있는지 확정하는 데 사용하세요. 이 두 주장을 분리해 유지하는 사고 보고서는 아무도 철회할 필요가 없는 보고서입니다.
자주 묻는 질문
RPKI 무효란 실제로 무슨 뜻인가요?
ROA가 그 접두사를 포함하지만, 이 광고가 그 조건을 어긴다는 뜻입니다. 기원 ASN이 ROA가 승인하는 것이 아니거나(invalid_asn), 광고된 접두사가 ROA의 최대 길이가 허용하는 것보다 더 구체적이거나(invalid_length) 둘 중 하나입니다. 이는 증거이지 하이재킹의 증명은 아닙니다 — 잘못 발급되고 낡은 ROA, 그리고 이전 중인 접두사도 무효 광고를 만듭니다. 그래도 긴급으로 취급하세요. 많은 대형 네트워크가 무효 경로를 폐기하므로, 무효 상태 자체가 인터넷의 일부가 그 접두사에 도달할 수 없는 이유일 수 있습니다.
루킹 글래스가 내 라우터의 라우팅 테이블을 볼 수 있나요?
아니요. 루킹 글래스는 RIPE RIS 같은 경로 수집기가 자기들과 피어링하는 네트워크에서 받은 것을 보여줍니다 — 전역 테이블의 크고 유용한 표본이지만, 내 라우터 자체의 시야는 아닙니다. 내 라우터는 내 세션, 필터, 로컬 기본 설정을 적용하므로 그 테이블은 합법적으로 다를 수 있습니다. 내 시야에 대해서는 라우터 자체에게 묻는 것(그 BGP 요약과 경로 조회)을 대체할 것이 없습니다. 루킹 글래스는 세계가 보는 것을 위해, 내 라우터는 내가 무엇을 하고 있는지를 위해 사용하세요.
왜 두 루킹 글래스가 같은 접두사에 대해 의견이 다른가요?
서로 다른 의자에서 보고 있기 때문입니다. 각 수집기는 서로 다른 네트워크 집합과 피어링하므로, 하나는 다른 하나가 결코 듣지 못하는 광고를 받을 수 있습니다. 변경이 아직 전파되는 동안 몇 분 차이를 두고 조회할 수도 있으며, 경로상의 네트워크들은 자체 필터링 — RPKI 무효 경로 폐기를 포함해 — 을 적용하므로, 서로 다른 관측점은 솔직하게 서로 다른 테이블을 보유합니다. 불일치는 정보입니다. 한 지역의 수집기는 그 접두사를 보는데 다른 지역은 보지 못한다면, 그 불일치의 모양이 종종 문제 자체의 모양입니다.