요약

  • BGP 세션이 Established로 돌아온 뒤에도 라우터 B는 121초 동안 IPv4·IPv6 프리픽스를 갖지 못했다.
  • Marian Rychtecký는 End-of-RIB 지연을 TCP 리셋을 일으킨 잘린 IPv6 피어 주소와 연결했다.

세션 화면은 Established, 라우팅 테이블은 비어 있었다. NANOG 98에서 Marian Rychtecký가 발표한 장애는 이 모순에서 시작한다. 고가용성 방화벽 업그레이드로 절체가 일어났을 때 BGP 세션은 돌아왔지만 경로는 돌아오지 않았다. 라우터 B의 RIB에는 121초 동안 IPv4와 IPv6 프리픽스가 하나도 없었다. 트래픽은 계속 방화벽으로 향했지만, 방화벽은 광고해야 할 경로를 갖고 있지 않았다. 거의 2분간 블랙홀이 생겼다.

팀은 절체 영향을 줄이려고 BGP Graceful Restart를 켰다. 이 메커니즘은 재시작 중 전달 상태가 보존되면 이웃이 기존 경로를 잠시 유지하고 새 업데이트로 교체하게 해 라우팅 흔들림을 줄인다. End-of-RIB는 주소 패밀리별 초기 업데이트가 끝났다는 표시다. 하지만 이런 제어 평면 신호는 방화벽이 지금 도착하는 패킷을 전달한다는 영수증이 아니다.

시간이 원인을 좁혔다. Rychtecký의 발표에 따르면 절체 후 거의 2분이 지나 End-of-RIB가 도착했다. 120초 재접속 타이머에 가까운 지연이었다. 발표의 추적 결과, 기다리던 대상은 IPv6 BGP 세션이었다. 해당 표식이 올 때까지 경로 선택이 보류됐고 IPv4 경로까지 함께 묶였다. 세션은 Established였지만 테이블은 계속 비어 있었다.

패킷 캡처에서 새 연결의 TCP RST가 드러났다. 발표 자료의 최종 진단에 따르면 예상한 IPv6 피어 주소 2001:db8:1::2가 2001:db8:1:로 저장됐다. 끝부분이 잘려 시스템이 올바른 VRF/BGP 문맥을 찾지 못했고, 알 수 없는 VRF ID 0으로 빠져 연결을 리셋했다. BIRD를 이용한 작은 실험은 프로토콜의 의도와 구현 오류를 나누는 데 도움이 됐다. Rychtecký는 이 환경의 임시 우회책으로 연결 타이머를 1초로 설정하는 방법을 제시했다.

Graceful Restart라는 이름만으로 경로가 보존되지는 않는다. 전제인 전달 상태가 실제로 살아 있어야 한다. 이 사례에서는 잘못 해석된 피어 주소가 경로 교환을 늦추는 동안 서비스 경로가 먼저 끊겼다. 세션 상태는 대화가 연결됐다고 했고, RIB와 패킷은 장애가 계속된다고 했다.

발표 자료에는 패킷 캡처 파일이나 공급업체 이름이 없다. 익명화한 추적 자료나 공식 문제 기록이 있으면 주소 파싱 과정까지 독립적으로 확인할 수 있다. NANOG 세션 페이지는 Rychtecký를 NIX.CZ CTO로 소개한다. 사건의 세부 내용은 공식 발표 자료, 프로토콜 정의는 RFC 4724에 있다. NANOG 공식 발표자 사진을 초상화의 신원 참조로 사용했다.