inter-AS: BGP
왜 BGP가 필요한가
인터넷은 단일 네트워크가 아니다. 수만 개의 자율 시스템(AS, Autonomous System)이 서로 연결된 거대한 네트워크의 네트워크다. 각 AS는 ISP, 대학, 기업 등이 운영하며, 내부적으로는 OSPF나 RIP 같은 IGP(Interior Gateway Protocol)로 라우팅을 처리한다.
문제는 AS 간의 라우팅이다. AS1에 있는 호스트가 AS2에 있는 서버에 접근하려면, 패킷이 여러 AS를 거쳐야 한다. 이때 어떤 경로로 갈지 결정하는 것이 BGP(Border Gateway Protocol)의 역할이다.
BGP는 "인터넷을 묶어주는 접착제"라고 불린다. 모든 AS가 BGP를 통해 서로의 존재를 알리고, 도달 가능한 경로를 공유한다.
eBGP와 iBGP
BGP는 두 가지 모드로 동작한다.
eBGP(external BGP)는 서로 다른 AS 간의 통신이다. AS1의 경계 라우터가 AS2의 경계 라우터와 eBGP 세션을 맺고, "우리 AS에서는 이런 네트워크들에 도달할 수 있다"는 정보를 교환한다.
iBGP(internal BGP)는 같은 AS 내부에서의 통신이다. eBGP로 외부에서 받아온 경로 정보를 AS 내부의 다른 라우터들과 공유한다. iBGP가 없으면 경계 라우터만 외부 경로를 알고, 내부 라우터들은 외부로 나가는 방법을 모르게 된다.
BGP 메시지 교환
BGP는 TCP 포트 179를 사용해 피어 라우터와 연결한다. TCP를 사용하는 이유는 신뢰성 있는 전송이 필요하기 때문이다. 라우팅 정보가 손실되면 네트워크 전체에 영향을 줄 수 있다.
BGP 세션이 맺어지면 라우터들은 네 가지 메시지를 주고받는다.
OPEN 메시지로 세션을 시작하고, 자신의 AS 번호와 BGP 버전 등을 교환한다. KEEPALIVE 메시지는 주기적으로(보통 30초마다) 보내서 연결이 살아있음을 확인한다. UPDATE 메시지로 새로운 경로를 광고하거나 기존 경로를 철회한다. NOTIFICATION 메시지는 오류가 발생했을 때 보내며, 이후 세션이 종료된다.
BGP 경로 광고
BGP에서 경로는 "prefix + attributes" 형태로 광고된다.
prefix는 목적지 네트워크를 CIDR 표기법으로 나타낸다. 예를 들어 "138.16.64.0/24"는 138.16.64.0부터 138.16.64.255까지의 주소 범위다.
attributes는 경로에 대한 추가 정보다. 가장 중요한 두 가지가 있다.
AS-PATH는 이 경로가 거쳐온 AS들의 목록이다. "AS 64000, AS 65000, AS 65100"처럼 표시된다. 경로 선택에 사용되고, 루프 방지 역할도 한다. 자신의 AS 번호가 AS-PATH에 있으면 그 경로는 무시한다.
NEXT-HOP은 해당 목적지로 가려면 다음에 어떤 라우터로 보내야 하는지를 나타낸다.
경로 선택 알고리즘
같은 목적지에 대해 여러 경로가 있을 때, BGP는 다음 순서로 최선의 경로를 선택한다.
첫 번째로 로컬 선호도(local preference)를 확인한다. 네트워크 관리자가 정책적으로 설정한 값이다. 높을수록 선호된다. "이 ISP를 통한 경로를 우선 사용하라"와 같은 정책을 구현할 때 사용한다.
두 번째로 AS-PATH 길이를 비교한다. 더 짧은 경로를 선호한다. AS를 적게 거칠수록 일반적으로 더 빠르고 안정적이다.
세 번째로 NEXT-HOP까지의 IGP 비용을 비교한다. 이것을 hot-potato 라우팅이라고 한다. 트래픽을 가능한 빨리 자기 AS 밖으로 내보내려는 전략이다.
그래도 동점이면 라우터 ID 등 추가 기준으로 결정한다.
정책 기반 라우팅
BGP가 OSPF 같은 IGP와 근본적으로 다른 점은 정책(policy)이 개입한다는 것이다.
IGP는 순수하게 기술적 기준(링크 비용, 홉 수 등)으로 최단 경로를 계산한다. 하지만 BGP에서는 비즈니스 관계가 라우팅에 영향을 준다.
예를 들어 ISP A와 ISP B가 경쟁 관계라면, A는 자신의 고객 트래픽을 B를 통해 보내고 싶지 않을 수 있다. 또는 특정 국가를 경유하는 경로를 회피하고 싶을 수도 있다.
BGP는 이런 정책을 구현할 수 있는 유연성을 제공한다. 특정 AS-PATH를 가진 경로를 거부하거나, 로컬 선호도를 조정해서 특정 경로를 우선시할 수 있다.
BGP와 인터넷 안정성
BGP는 인터넷의 핵심 인프라지만, 설계상 취약점이 있다.
BGP hijacking은 악의적인 AS가 자신이 소유하지 않은 IP prefix를 광고하는 공격이다. 2018년 Amazon Route 53 하이재킹 사건에서 공격자가 약 15만 달러 상당의 암호화폐를 탈취했다.
BGP leak은 실수로 잘못된 경로를 광고하는 것이다. 2019년 한 작은 ISP의 설정 실수로 Cloudflare를 포함한 많은 사이트가 접속 불가 상태가 되었다.
이런 문제를 완화하기 위해 RPKI(Resource Public Key Infrastructure)가 도입되고 있다. AS가 광고할 수 있는 IP prefix를 암호학적으로 검증하는 방식이다. 하지만 아직 전체 인터넷에 완전히 적용되지는 않았다.
실제 BGP 동작 예시
구체적인 예로 살펴보자. AS1에 있는 라우터 1a가 "138.16.64.0/24"에 도달할 수 있다고 광고한다.
- AS1의 경계 라우터가 AS2에게 eBGP로 광고: "138.16.64.0/24, AS-PATH: AS1"
- AS2 내부에서 iBGP로 전파
- AS2가 AS3에게 eBGP로 광고: "138.16.64.0/24, AS-PATH: AS2, AS1"
- AS3의 라우터가 138.16.64.0/24로 패킷을 보내려면 AS2를 통해 AS1으로 가면 된다는 것을 알게 됨
이렇게 BGP를 통해 전 세계 수십억 개의 IP 주소에 대한 경로 정보가 공유되고 업데이트된다.