BGP(경계 경로 프로토콜)란? 인터넷 라우팅 기초 완전정복

인터넷은 어떻게 수많은 네트워크가 서로 길을 알려주며 하나로 연결될까요.

🛰️

BGP(경계 경로 프로토콜)란

전 세계 수많은 통신사와 대형 네트워크가 "어떤 IP 대역이 어느 네트워크로 가는 길인지" 서로 알려주는 데 쓰는 인터넷 핵심 라우팅 프로토콜입니다.

BGP(Border Gateway Protocol)는 집이나 회사 내부망에서 쓰는 라우팅 방식과 달리, 서로 다른 회사가 운영하는 네트워크끼리 경로 정보를 주고받기 위해 설계된 프로토콜입니다. 인터넷은 사실 하나의 거대한 네트워크가 아니라 통신사, 클라우드 업체, 대학, 기업 등이 운영하는 수많은 개별 네트워크가 BGP로 서로 연결된 "네트워크들의 네트워크"입니다.

🏢

자율 시스템(AS)이란

하나의 조직이 자체 정책으로 관리하는 IP 네트워크 묶음으로, 전 세계에서 겹치지 않는 고유한 AS 번호(ASN)를 부여받습니다.

통신사, 대형 클라우드 업체, 대학교, 대기업은 각각 하나 이상의 자율 시스템(Autonomous System)을 운영하며, 지역 인터넷 레지ストリ(RIR)로부터 고유한 AS 번호를 할당받습니다. BGP는 정확히 말하면 "IP 주소끼리"가 아니라 "AS와 AS 사이"에 어떤 IP 대역으로 가는 경로가 있는지를 광고하고 교환하는 프로토콜입니다.

📢

경로 광고와 최적 경로 선택

각 AS는 자신이 책임지는 IP 대역을 이웃 AS에게 "이 대역은 나를 거쳐 가면 된다"고 광고하고, 이 정보가 인터넷 전체로 퍼져나갑니다.

한 AS가 특정 IP 대역(프리픽스)을 광고하면, 이를 받은 이웃 AS는 자신의 라우팅 테이블에 기록한 뒤 다시 자신의 다른 이웃에게 전달합니다. 이 과정이 반복되며 전 세계 라우터들은 특정 목적지까지 어떤 AS들을 거쳐야 하는지(AS 경로)를 알게 되고, 여러 경로 후보가 있을 경우 RFC 4271의 결정 과정에 따라 하나를 선택합니다. 정책으로 정한 선호도(LOCAL_PREF 등)를 우선 적용하고, 동률이면 AS_PATH가 짧은 경로, 낮은 ORIGIN 값, 낮은 MED, EBGP로 배운 경로, 낮은 내부 비용, 낮은 BGP 식별자 순으로 따집니다.

🤝

피어링과 트랜짓 관계

규모가 비슷한 네트워크끼리는 서로 무료로 트래픽을 주고받는 피어링을, 소규모 네트워크는 큰 통신사에 비용을 내고 인터넷 전체 경로를 얻는 트랜짓 계약을 맺습니다.

대형 통신사나 콘텐츠 사업자들은 인터넷 교환 지점(IXP, Internet Exchange Point)에 모여 직접 회선을 연결하고 서로의 트래픽을 무료로 교환하는 "피어링(peering)" 관계를 맺기도 합니다. 반면 자체 회선망이 없는 중소 네트워크는 상위 통신사에 비용을 지불하고 인터넷 전체로 나가는 경로를 제공받는 "트랜짓(transit)" 계약을 이용합니다.

⚠️

BGP 하이재킹이란

자신이 관리하지 않는 IP 대역을 실수로 또는 의도적으로 광고해 다른 네트워크로 갈 트래픽을 엉뚱한 곳으로 끌어오는 현상입니다.

BGP는 기본적으로 "이웃 네트워크가 광고하는 정보는 맞는 정보일 것"이라고 신뢰하는 구조로 설계되어 있습니다. 그래서 한 AS가 설정 실수나 악의적인 목적으로 자신의 소유가 아닌 IP 대역을 광고하면, 그 대역으로 가야 할 트래픽 일부가 잘못된 경로로 흘러가는 BGP 하이재킹이 발생할 수 있습니다. 대표 사례로 2008년 2월 24일 파키스탄 통신사의 잘못된 광고로 YouTube 트래픽이 한동안 엉뚱한 곳으로 흘러간 일이 RIPE NCC 분석으로 기록되어 있습니다.

🔓

BGP가 "신뢰" 기반으로 설계된 이유

1989년 6월 RFC 1105로 첫 버전이 나온 비교적 초창기에 설계되어, 강력한 신원 검증 기능 없이 이웃의 광고를 그대로 받아들이는 구조로 만들어졌습니다.

BGP의 첫 규격(RFC 1105, 1989)은 NSFNET 백본에서 쓰이던 EGP 경험을 바탕으로 만들어졌습니다. 이웃이 알려주는 정보를 받아들이는 것이 기본 동작이며, 이 때문에 "이 광고가 정말 그 IP 대역의 정당한 주인에게서 나온 것인지"를 암호학적으로 검증하는 기능이 기본 설계에는 포함되어 있지 않았고, 이것이 오늘날까지 이어지는 구조적 보안 약점으로 지적됩니다.

🔏

RPKI로 경로를 검증하는 방법

어떤 AS가 어떤 IP 대역을 광고할 자격이 있는지 암호학적 인증서로 미리 등록해두고, 다른 네트워크가 이를 대조해 잘못된 광고를 걸러내는 보안 체계입니다.

RPKI(Resource Public Key Infrastructure)는 IP 주소 관리 기관이 "이 AS 번호가 이 IP 대역을 광고할 정당한 권한이 있다"는 내용을 암호학적으로 서명한 인증서(ROA)로 등록해두는 체계입니다. RPKI를 도입한 네트워크는 들어오는 BGP 광고가 이 인증서와 맞는지 검증해, 권한 없는 곳에서 나온 잘못된 광고를 자동으로 걸러낼 수 있습니다. RFC 6811은 이 검증 결과를 Valid, Invalid, NotFound 세 가지로 구분합니다. 모든 네트워크가 이를 적용한 것은 아니며, 도입 정도는 이 글에서 수치로 확인하지 못했습니다.

💥

왜 사소한 설정 실수가 전 세계 장애로 이어질까

한 네트워크의 라우터 설정 실수가 순식간에 전 세계 다른 네트워크로 전파되는 BGP의 특성 때문에, 국소적인 실수가 광범위한 접속 장애로 번질 수 있습니다.

특정 AS가 실수로 자신이 가진 것보다 훨씬 많은 IP 대역을 한꺼번에 광고하거나, 잘못된 경로 정보를 흘려보내면 이웃 AS들이 이를 그대로 받아들여 다시 전파하면서 오류가 인터넷 전역으로 급속히 퍼질 수 있습니다. 2021년 10월 4일 Facebook 장애가 공개된 사례입니다. 이 글의 본문에서 사례별로 살펴봅니다.

한눈에 보기

BGP(Border Gateway Protocol)는 서로 다른 조직이 운영하는 자율 시스템(AS) 사이에서 "어떤 IP 대역으로 가는 길이 있는가"를 교환하는 프로토콜입니다. 현재 규격은 RFC 4271(BGP-4)이며, TCP 179번 포트 위에서 동작합니다. 이 글은 BGP의 기원, 메시지와 경로 선택 방식, 피어링과 트랜짓, 하이재킹과 RPKI, 실제 사건 두 건(2008 YouTube, 2021 Facebook)을 공개 자료로 확인된 범위만 정리합니다.

기원: EGP에서 BGP로

BGP의 첫 규격인 RFC 1105(1989년 6월, K. Lougheed와 Y. Rekhter)는 NSFNET 백본에서 쓰이던 EGP(RFC 904)의 경험을 바탕으로 AS 사이의 도달 가능성 정보를 교환하는 방법을 제시했고, 초기 구현은 TCP 179번 포트를 사용했습니다. RFC 1105의 "AS 경로" 개념으로 AS 연결 그래프를 만들어 경로 루프를 걸러내고 AS 단위 정책을 적용할 수 있게 된 것이 핵심이었습니다. 이후 RFC 4271(BGP-4)로 이어졌고, RFC 6793이 AS 번호를 2바이트에서 4바이트로 확장했습니다.

메시지와 경로 선택 규칙

RFC 4271은 네 가지 메시지를 정의합니다. 번호순으로 OPEN(1), UPDATE(2), NOTIFICATION(3), KEEPALIVE(4)입니다. 같은 AS 안의 피어는 IBGP, 다른 AS와의 연결은 EBGP라 부릅니다. UPDATE에는 ORIGIN, AS_PATH, NEXT_HOP, MULTI_EXIT_DISC(MED), LOCAL_PREF 같은 경로 속성이 실립니다. EBGP로 내보낼 때는 AS_PATH에 자신의 AS 번호를 덧붙이고, IBGP로 보낼 때는 AS_PATH를 고치지 않습니다. LOCAL_PREF는 같은 AS 내부 피어에게 전달되는 속성입니다.

순서기준 (RFC 4271 9.1.1, 9.1.2.2 기준)
1선호도(degree of preference): 내부 피어에서는 LOCAL_PREF를 직접 쓰거나 정책으로 계산
2AS_PATH에 든 AS 수가 적은 경로
3ORIGIN 값이 낮은 경로
4같은 이웃 AS 사이에서 MED가 더 선호되는 경로
5EBGP로 배운 경로가 있으면 IBGP 경로 제외
6NEXT_HOP까지의 내부 비용이 낮은 경로
7BGP 식별자가 가장 낮은 광고자, 그다음 가장 낮은 피어 주소

실제 장비는 벤더별 확장 규칙이 있을 수 있으므로 표는 표준 문서의 기본 순서로만 이해하세요.

AS 번호

AS 번호는 지역 인터넷 레지스트리가 할당합니다. RFC 4271은 AS 번호를 2바이트 정수로 정의했고, RFC 6793이 4바이트로 확장하면서 2바이트만 아는 구형 장비를 위해 23456번을 AS_TRANS로 예약했습니다. 아래 사례에 나오는 AS 번호는 모두 공개 분석 자료에 적힌 값입니다.

실제 사례

2008년 2월 24일: 파키스탄 통신사와 YouTube

RIPE NCC가 공개한 사례 분석에 따르면 YouTube(AS36561)는 208.65.152.0/22를 광고하고 있었습니다. 협정 세계시(UTC) 18:47에 파키스탄 텔레콤(AS17557)이 더 구체적인 208.65.153.0/24를 광고했고, 상위 사업자 PCCW(AS3491)가 이를 전파하면서 YouTube 트래픽이 끌려갔습니다. 위키백과는 파키스탄 규제기관의 YouTube 차단 조치가 의도치 않게 전 세계 BGP 테이블에서 블랙홀 경로가 되었다고 설명합니다. 이후 YouTube가 같은 /24와 더 좁은 /25 두 개를 광고하자 가장 길게 일치하는 경로가 우선하는 규칙에 따라 트래픽이 YouTube로 돌아갔고, PCCW가 해당 광고를 철회한 마지막 시각은 21:01경(약 2시간 14분)입니다. 배울 점은 BGP에서 더 구체적인 프리픽스가 이긴다는 점과, 광고의 출처를 검증하는 장치가 없으면 한 곳의 실수가 널리 퍼질 수 있다는 점입니다.

2021년 10월 4일: Facebook 장애

Cloudflare의 공개 분석에 따르면 UTC 15:40경 Facebook의 라우팅 변화가 정점에 이르렀고, 15:58에 Facebook이 DNS 프리픽스로 가는 경로를 광고하지 않는 것이 관측되었습니다(Facebook의 AS 번호는 AS32934). Meta의 공식 설명은 백본 용량을 점검하는 유지보수 명령이 전 세계 백본 연결을 모두 끊었고, 이를 막아야 할 감사 도구의 버그로 중단되지 않았다고 밝힙니다. 데이터센터가 연결을 잃으면 DNS 서버가 BGP 광고를 스스로 철회하도록 되어 있어 DNS 서버가 가동 중이어도 외부에서 닿을 수 없게 되었습니다. Cloudflare는 재시도가 몰려 1.1.1.1의 DNS 질의가 평소의 약 30배가 되었다고 밝혔고, facebook.com은 21:20 무렵 다시 조회되기 시작했습니다. 이 사건은 외부 공격이 아니라 내부 설정·도구 문제였다는 점, 그리고 복구에 물리적 접근이 필요했다는 점이 교훈입니다.

RPKI와 경로 출처 검증

RFC 6811은 BGP 경로의 출처 AS가 해당 프리픽스 보유자에게 승인받았는지 확인하는 방식을 정의합니다. ROA(서명된 객체)에서 얻은 검증된 정보(VRP)는 IP 주소, 프리픽스 길이, 최대 길이, 출처 AS 번호를 담고, 경로는 NotFound, Valid, Invalid 중 하나가 됩니다. RFC는 이 방식이 프리픽스 오광고와 중간자 위협을 부분적으로만 해결한다고 밝힙니다. 출처만 확인할 뿐 경로 전체를 검증하지는 않습니다.

흔한 오해와 정정

한계와 더 알아볼 점

이 글은 RFC 4271, RFC 1105, RFC 6811, RFC 6793, RIPE NCC와 Cloudflare, Meta의 공개 문서로 확인한 내용만 담았습니다. 사건의 영향 규모는 보고마다 달라 수치를 단정하지 않았고, RPKI 도입률 같은 변하는 통계는 싣지 않았습니다. 경로 속성이 실제 장비에서 어떻게 설정되는지는 벤더 문서를 확인하세요.

관련 주제

BGP로 광고되는 대역의 표기법은 CIDR 표기법 완전정복, 물리적 연결은 해저 케이블 가이드, Facebook 사례의 DNS 측면은 DNS 조회 과정, 출처 검증과 비슷한 목적의 DNSSEC도 참고하세요.

자주 묻는 질문

일반 가정에서 쓰는 공유기도 BGP를 사용하나요?

보통은 사용하지 않습니다. 가정이나 사무실 내부망은 정적 경로나 DHCP로 받은 기본 게이트웨이 정보로 충분합니다. BGP는 자체 AS 번호를 가진 조직이 다른 조직과 경로를 교환할 때 씁니다.

BGP 하이재킹이 발생하면 사용자가 알아챌 수 있나요?

사용자는 특정 사이트가 안 열리는 정도로 느끼는 경우가 많습니다. 2008년 사례처럼 네트워크 운영자와 연구 기관의 모니터링으로 원인이 밝혀지는 경우가 일반적입니다.

BGP는 어떤 포트를 쓰나요?

RFC 4271은 BGP가 TCP 179번 포트에서 대기한다고 규정합니다.

피어링과 트랜짓은 무엇이 다른가요?

일반적으로 피어링은 네트워크끼리 직접 연결해 트래픽을 교환하는 관계(무료인 경우가 많음)이고, 트랜짓은 상위 사업자에게 비용을 내고 인터넷 전체로 나가는 경로를 받는 계약입니다. 조건은 사업자마다 다릅니다.

왜 더 구체적인 프리픽스가 이기나요?

라우터는 목적지 주소와 가장 길게 일치하는 프리픽스를 따릅니다. 2008년 사례에서 /22보다 좁은 /24가 먼저 선택된 이유이며, YouTube가 /25를 광고해 트래픽을 되찾은 방법이기도 합니다.