- Published on
BGP 인터넷 라우팅 완전 가이드 2025: AS, Peering, Path Selection, RPKI, Anycast — 인터넷의 진짜 작동 원리
- Authors

- Name
- Youngju Kim
- @fjvbn20031
들어가며: 인터넷은 사실 하나가 아니다
놀라운 진실
당신이 "인터넷"이라고 부르는 것은 사실 단일 네트워크가 아니다. 약 75,000개 이상의 독립된 네트워크가 느슨하게 연결되어 있는 연합이다. 각각을 AS (Autonomous System) 라고 부른다.
- Google = AS 15169.
- Facebook = AS 32934.
- AT&T = AS 7018.
- Cloudflare = AS 13335.
- SK Telecom = AS 9318.
당신의 집 Wi-Fi에서 Google에 접속할 때, 패킷은 수십 개의 AS를 가로지른다. 각 AS는 "이 IP는 저쪽으로 가면 돼"라고 다음 AS에게 알려준다. 이 모든 것이 BGP (Border Gateway Protocol) 위에서 일어난다.
BGP의 중요성
- 인터넷 전체 라우팅이 BGP에 의존.
- BGP가 30분 멈추면 세계 인터넷이 사실상 중단.
- BGP 실수로 역사상 여러 번 인터넷이 부분적으로 죽었다.
- 2021년 Facebook 다운타임 (6시간): BGP가 원인.
- 2019년 Cloudflare 다운타임: Verizon의 BGP 오류.
BGP는 인터넷의 TCP/IP만큼이나 중요하지만, 훨씬 덜 알려져 있다.
이 글에서 다룰 것
- Autonomous System: 인터넷의 구성 단위.
- BGP의 기본: Path vector 프로토콜.
- Peering vs Transit: AS 간 관계.
- Path Selection: BGP가 경로를 고르는 방법.
- iBGP vs eBGP: 내부/외부 BGP.
- RPKI: 경로 검증으로 hijacking 방어.
- Anycast: 하나의 IP, 여러 장소.
- BGP 장애 사례: 역사의 교훈.
1. Autonomous System: 인터넷의 블록
AS란
Autonomous System (AS) 은 단일 관리 주체가 운영하는 IP 네트워크의 집합. 특징:
- 고유한 ASN (AS Number) 보유.
- 독립적인 라우팅 정책.
- 다른 AS와 BGP로 통신.
- 하나 이상의 IP 주소 범위 (prefix) 관리.
예시:
- ISP (Comcast, KT, NTT).
- 대기업 (Google, Amazon, Facebook).
- 대학 (MIT, Stanford).
- 정부 기관.
- CDN (Cloudflare, Akamai).
ASN 할당
IANA (Internet Assigned Numbers Authority)가 ASN을 관리. 지역별 RIR (Regional Internet Registry)에 위임:
- ARIN: 북미.
- RIPE NCC: 유럽, 중동.
- APNIC: 아시아 태평양.
- LACNIC: 남미.
- AFRINIC: 아프리카.
AS 번호 형식:
- 16-bit: 0-65535 (초기, 거의 소진).
- 32-bit: 0 ~ 4,294,967,295 (2007년 확장).
Prefix 할당
IP 주소 블록도 같은 레지스트리들이 할당:
Google의 prefix 예시:
- 8.8.8.0/24 (DNS)
- 74.125.0.0/16
- 142.250.0.0/15
...
/24 = 256개 주소, /16 = 65536개 주소.
각 AS는 자신의 prefix를 BGP로 광고한다. "이 prefix로 가려면 나를 통해!" 라고.
현재 규모
2025년 기준:
- AS 수: 약 75,000+.
- IPv4 prefix: 약 100만.
- IPv6 prefix: 약 20만.
- BGP full table size: 약 100만 routes.
매 BGP 라우터가 이 전체 테이블을 유지한다. 메모리 수 GB 필요.
2. BGP 기본: Path Vector Protocol
BGP의 특성
BGP는 라우팅 프로토콜의 특이한 종류:
- Path vector: 각 route에 전체 AS 경로가 포함.
- Policy-based: 최단 경로가 아닌 정책 기반 선택.
- TCP 기반: Port 179.
- 증분 업데이트: 변경만 전송.
- Stateful: 상대와 지속적 세션 유지.
BGP Message 종류
OPEN: 세션 수립. Keepalive 시간, 지원 기능 등 협상.
UPDATE: 경로 정보 전송:
- NLRI (Network Layer Reachability Information): 광고하는 prefix.
- Path attributes: AS-PATH, NEXT-HOP, ORIGIN 등.
- Withdrawn routes: 철회하는 경로.
KEEPALIVE: 세션 유지 (기본 30초).
NOTIFICATION: 에러 + 세션 종료.
Path Attributes
BGP UPDATE의 핵심:
AS_PATH (필수):
- 이 경로가 거쳐 온 AS들의 순서.
- 예:
[65001, 7018, 15169] - 의미: "내 AS에서 시작, 7018 통과, 15169가 목적지".
NEXT_HOP (필수):
- 이 경로의 다음 라우터 IP.
ORIGIN (필수):
- 경로가 어떻게 생겼는지: IGP, EGP, Incomplete.
LOCAL_PREF (선택, iBGP에서만):
- 내부 선호도 (0-4294967295).
- 높을수록 선호.
MED (Multi-Exit Discriminator) (선택):
- 같은 AS의 여러 진입점 간 선호도.
- 낮을수록 선호 (헷갈림!).
COMMUNITIES (선택):
- 정책 태그.
- "이 경로를 특정 방식으로 처리해"
BGP UPDATE 예시
UPDATE from 10.0.0.1:
Withdrawn: []
Attributes:
ORIGIN = IGP
AS_PATH = [65001, 7018, 15169]
NEXT_HOP = 10.0.0.1
LOCAL_PREF = 100
MED = 50
NLRI: [8.8.8.0/24, 8.8.4.0/24]
해석: "10.0.0.1을 통해 65001-7018-15169 경로로 8.8.8.0/24와 8.8.4.0/24에 도달할 수 있다."
BGP 세션 상태
Idle → Connect → OpenSent → OpenConfirm → Established → (경로 교환 시작)
Established 상태가 정상. 이 상태에서 UPDATE 주고받음.
3. Peering과 Transit
두 AS가 연결되는 방법
AS들은 두 가지 관계로 연결된다:
1. Transit: 고객-제공자 관계.
- Customer AS가 Provider AS에게 돈을 내고 인터넷 전체 접근.
- Provider는 customer의 트래픽을 다른 곳으로 전달.
2. Peering: 동등한 교환.
- 두 AS가 서로의 네트워크에 트래픽 직접 교환.
- 보통 무료 (또는 저비용).
- 자기 고객의 트래픽만.
Transit 관계
Customer AS 65001 (당신의 회사)
↓ (돈)
ISP AS 7018 (AT&T)
↓ (돈)
Tier 1 AS 174 (Cogent)
돈이 위로 흐름. Customer는 default route (인터넷 전체)를 받음.
Peering 관계
Facebook (AS 32934) ←→ Google (AS 15169)
"peering"
두 AS가 직접 연결. Facebook의 트래픽 → Google 고객에게, 반대도 마찬가지. 중간 transit provider 없음 → 빠르고 저렴.
Tier 1, 2, 3
Tier 1 (~12개):
- 모두에게 peering만. Transit 안 삼.
- Level 3, Cogent, AT&T, NTT 등.
- 전 세계 어디든 자체 네트워크로 도달 가능.
Tier 2:
- 일부 Tier 1에서 transit 구매.
- 많은 동급과 peering.
- 대부분의 ISP.
Tier 3:
- Transit에 주로 의존.
- Peering 제한적.
- 작은 ISP.
현대 트렌드: Google, Microsoft, Facebook 같은 hyperscaler들이 자체 글로벌 네트워크를 구축해서 Tier 1과 비슷한 위치에 있다.
Peering의 경제
왜 peering이 매력적인가:
- Transit 비용 절감.
- Latency 감소.
- 트래픽 제어.
Peering의 종류:
Private Peering:
- 두 AS 간 전용 케이블.
- 데이터센터 내 또는 전용 선로.
- 고대역폭, 저지연.
Public Peering (IX - Internet Exchange):
- 많은 AS가 한 장소에 모임.
- IX (Internet Exchange Point) 를 통해 교환.
- 대표적: DE-CIX (독일), LINX (런던), AMS-IX (암스테르담).
- 수백 개 AS가 한 IX에서 peering.
한국의 상황
한국은 독특하다:
- KT, SK Broadband, LG U+ 가 지배.
- KINX: 유일한 주요 IX.
- 해외 peering 제한적: 한국 ISP가 해외 peering에 보수적.
- 결과: 한국 → 해외 latency가 불필요하게 높을 수 있음.
4. BGP Path Selection: 경로 고르기
왜 "최단 경로"가 아닌가
IGP (OSPF 등)는 최단 경로를 선택한다. BGP는 정책 기반이다. 이유:
- 돈: Transit보다 peering 선호 (무료).
- 정치: 특정 경쟁자 우회.
- 성능: 단순 hop 수가 아닌 실제 성능.
- 보안: 신뢰할 수 있는 경로.
BGP Decision Process
BGP가 경로를 고르는 표준 알고리즘 (가장 흔히 구현되는):
1. Highest LOCAL_PREF (iBGP에서만):
- 조직 내부 선호도. 관리자가 설정.
2. Shortest AS_PATH:
- AS 수가 적은 경로.
3. Lowest ORIGIN:
- IGP < EGP < Incomplete.
4. Lowest MED (같은 AS에서 들어온 경우):
- 이웃 AS가 선호하는 경로.
5. eBGP over iBGP:
- 외부 경로 선호.
6. Lowest IGP cost to NEXT_HOP:
- 다음 홉까지 가장 가까운.
7. Oldest route:
- 안정성을 위한 tiebreaker.
8. Lowest Router ID:
- 최종 tiebreaker.
실제로는 대부분의 선택이 1~3단계에서 결정된다.
LOCAL_PREF의 힘
Network operator가 가장 자주 조작하는 attribute:
ISP가 트래픽을 보낼 때:
- Customer route에 LOCAL_PREF = 200 (최고)
- Peer route에 LOCAL_PREF = 100
- Transit route에 LOCAL_PREF = 50 (최저)
이유:
- Customer에게 보내는 트래픽은 돈을 받음 (수익).
- Peer는 무료.
- Transit은 돈을 지불.
경제적으로 customer 우선, transit 최후.
AS_PATH Prepending
BGP의 트릭: 자기 ASN을 여러 번 반복해서 경로를 덜 매력적으로 만듦.
정상: AS_PATH = [65001, 7018, 15169]
Prepended: AS_PATH = [65001, 65001, 65001, 7018, 15169]
다른 AS는 이를 "더 긴 경로"로 보고 덜 선호한다. 트래픽 엔지니어링에 사용.
용도:
- 이중화된 연결 중 백업 경로 만들기.
- 특정 ISP 부하 줄이기.
5. iBGP vs eBGP
두 종류의 BGP
eBGP (External BGP):
- 다른 AS 간 BGP.
- AS_PATH에 ASN 추가.
- TTL = 1 (기본, 직접 연결).
iBGP (Internal BGP):
- 같은 AS 내부 BGP.
- AS_PATH에 ASN 추가 안 함.
- 모든 iBGP 스피커끼리 full mesh 필요.
왜 iBGP가 있는가
큰 AS는 여러 BGP 라우터를 가진다. 외부에서 받은 경로를 내부 라우터들이 공유해야:
[eBGP peer A] [eBGP peer B]
| |
[edge router 1] <-iBGP-> [edge router 2]
\ /
[core router]
Edge router 1이 peer A로부터 받은 경로를 iBGP로 edge router 2에게 전파.
Full Mesh 문제
iBGP 라우터들이 서로 모두 연결되어야 함 (full mesh):
- 10 라우터 → 45 iBGP 세션.
- 100 라우터 → 4950 iBGP 세션.
- N² 문제.
해결 1: Route Reflector
Route Reflector (RR):
- 중앙 라우터가 client로부터 받은 경로를 다른 client에 반사.
- 모든 iBGP 스피커가 RR에게만 연결.
- Full mesh 불필요.
해결 2: Confederation
AS를 여러 sub-AS로 분할. 각 sub-AS 내에서 full mesh, sub-AS 간 eBGP-like.
드물게 사용. 대부분 Route Reflector 선택.
iBGP Next Hop
중요한 함정: iBGP는 next_hop을 수정하지 않는다.
Peer에서 받은 next_hop (peer의 IP)이 iBGP로 전파됨. 내부 라우터가 이 IP에 도달 가능해야. 못 하면 경로가 invalid가 됨.
해결: next-hop-self 설정. Edge router가 next_hop을 자기 IP로 변경.
6. BGP Convergence와 안정성
Convergence Time
경로 변경 후 전체 인터넷이 재안정화되는 시간:
- 지역 변경: 수 초.
- Tier 1 경로 변경: 수 분.
- 복잡한 변경: 수십 분.
Route Flap Damping
Route flap: 경로가 반복적으로 나타났다 사라졌다 하는 현상. 이웃 AS에게 부담.
Damping: 자주 flap하는 경로를 일정 시간 무시.
문제: 너무 공격적이면 정당한 경로도 차단. 최근엔 보수적으로 사용.
BGP Hold Timer
Keepalive가 일정 시간 없으면 세션 종료:
- Default: 180 초 (keepalive 60초).
- 빠른 장애 감지 원하면 낮춰야.
- 너무 낮으면 일시적 네트워크 이슈에 취약.
BFD (Bidirectional Forwarding Detection)
BGP의 느린 감지 보완:
- 마이크로초~밀리초 단위 장애 감지.
- BGP hold timer와 별개.
- 장애 즉시 BGP 세션 종료 트리거.
7. BGP Hijacking과 RPKI
BGP의 근본적 문제
BGP는 신뢰 기반. 누구나 "이 prefix는 내 거야" 라고 광고할 수 있다. 다른 AS가 믿어버린다.
Hijacking 사례
Prefix Hijacking: 다른 AS의 prefix를 자기 것으로 광고.
2008 YouTube Hijack:
- Pakistan Telecom이 YouTube를 국내에서 차단하려 함.
- 잘못된 BGP 설정으로 전 세계에 광고.
- 전 세계 YouTube 트래픽이 Pakistan으로.
- 수 시간 동안 YouTube 다운.
2017 Russia BGP Hijack:
- Visa, MasterCard 등의 prefix를 몇 분간 hijack.
- 의심스러운 상황, 원인 불명.
2018 Amazon Route 53 Hijack:
- 공격자가 Amazon DNS의 prefix hijack.
- 암호화폐 지갑 사이트 트래픽을 가짜 사이트로.
- 수십만 달러 탈취.
RPKI: 해결책
RPKI (Resource Public Key Infrastructure) 은 BGP 광고를 암호학적으로 검증:
- RIR (ARIN, RIPE 등)이 각 AS에게 인증서 발급.
- AS가 자기 prefix에 대해 ROA (Route Origin Authorization) 생성.
- ROA: "AS 15169는 8.8.8.0/24를 광고할 권한이 있음".
- BGP 라우터가 ROA를 실시간 검증.
- 권한 없는 광고는 무시.
RPKI 채택률
2025년 기준:
- Covered prefixes: 전체의 ~50%.
- Enforcing routers: 점점 증가.
- Cloudflare, Google, Microsoft 강력 지원.
완벽하지 않지만 큰 진전.
RPKI의 한계
- Origin만 검증: 경로의 유효성 안 봄.
- Path manipulation 방어 못 함: 중간 AS가 경로 조작 가능.
- BGPsec: 전체 경로 서명. 배포 매우 저조.
- Implementation bugs: 구현 실수로 정상 경로 거부 가능.
8. Anycast: 하나의 IP, 여러 장소
Anycast란
같은 IP를 여러 장소에서 BGP로 광고. 각 사용자는 가장 가까운 장소로 자동 라우팅.
1.1.1.1 (Cloudflare DNS)
Advertised from:
- US East
- US West
- Europe (London)
- Asia (Tokyo)
- 전 세계 300+ POP
사용자의 위치에 따라 가장 가까운 Cloudflare POP로 BGP가 라우팅.
작동 원리
- 같은 IP를 여러 물리적 위치에서 BGP로 광고.
- BGP가 각 사용자에게 최적 경로 선택.
- 경로는 보통 가장 가까운 광고 지점.
- 사용자는 하나의 IP만 알면 됨.
장점
- 낮은 지연: 물리적으로 가까운 서버.
- 자동 failover: 한 POP 다운 시 BGP가 다른 곳으로.
- DDoS 분산: 공격이 여러 POP에 분산.
- 단일 endpoint: 클라이언트는 하나의 IP만.
사용 사례
- DNS: Cloudflare 1.1.1.1, Google 8.8.8.8, OpenDNS.
- CDN: Akamai, Cloudflare 전반.
- DDoS 방어: 공격 흡수.
- NTP: 시간 동기화 서비스.
한계
- TCP 연결 끊김: 경로가 중간에 바뀌면 세션 끊김.
- BGP 지식 필요: 설정 복잡.
- 비용: 여러 장소에 인프라.
- 디버깅 어려움: 어느 POP으로 가는지 불명확.
그래서 UDP 기반 서비스 (DNS, QUIC)가 Anycast에 더 적합.
HTTPS Anycast의 진화
전통적으로 HTTPS는 Anycast와 부적합 (TCP 연결 문제)이었지만, Cloudflare 등이 해결:
- Sticky routing: 같은 연결을 같은 POP으로.
- QUIC (HTTP/3): UDP 기반, connection migration 지원.
- 이제 HTTPS도 Anycast가 표준.
9. 역사적 BGP 장애 사례
2008: Pakistan YouTube Hijack
Pakistan 정부가 YouTube 차단 명령. Pakistan Telecom이 /24 prefix로 YouTube 광고. 실수로 전 세계에 전파 → YouTube 수 시간 다운.
교훈: BGP는 검증 없이 작동. 실수가 쉽다.
2010: China Telecom Hijack
China Telecom의 BGP 세션이 18분 동안 전 세계 15%의 트래픽을 중국을 통해 라우팅. 의도 vs 실수 여부 논란.
교훈: BGP를 통한 대규모 트래픽 재라우팅이 가능.
2014: Indosat 대규모 Hijack
인도네시아 ISP Indosat이 수천 개 prefix를 잘못 광고 → 세계 여러 지역에서 인터넷 접속 장애.
2019: Verizon / Cloudflare
Verizon이 작은 BGP 최적화 서비스(DQE Communications)의 경로를 받아 그대로 전파 → Cloudflare, Amazon, Facebook 트래픽이 DQE로 라우팅 → 수 시간 장애.
교훈: Tier 1 라우터도 route filtering을 제대로 안 하면 재앙.
2021: Facebook 6-Hour Outage
2021년 10월 4일. Facebook이 스스로를 인터넷에서 제거.
원인:
- 내부 라우터 설정 변경.
- BGP가 Facebook의 DNS 서버 prefix를 withdraw.
- Facebook 전체 도메인 resolve 불가.
- 6시간 동안 완전 다운.
더 극적인 부분:
- 직원들도 회사 내부 시스템 접근 못 함.
- 사무실 카드 키 작동 안 함.
- 데이터센터 접근도 물리적으로 어려움.
- 결국 직원들이 데이터센터에서 직접 라우터 리셋.
교훈: BGP가 전체 조직의 디지털 존재를 좌우한다.
2023: Cloudflare 자체 장애
2023년 Cloudflare가 자체 BGP 설정 실수로 수 시간 장애. 자동화의 함정 — 한 번의 잘못된 변경이 전 세계에 전파.
공통 교훈
- BGP는 약하다: 실수 하나가 큰 파급.
- 자동화의 양면성: 편리하지만 실수 확대.
- Peering 검증 필요: 이웃의 광고 검증.
- RPKI 확산: 필수.
- Out-of-band 관리: BGP 완전 실패 대비.
10. BGP 운영 실전
Full Table vs Default Route
소규모 사이트: ISP에게 default route만 받음.
- 메모리 작음.
- 결정 없음.
- Failover 제한.
중규모: Full table 받기.
- 수 GB 메모리.
- 세밀한 경로 제어.
- Multi-homed 환경.
Multi-homed 설정
두 개 이상의 ISP에 연결:
당신의 AS
/ \
ISP A ISP B
이점:
- 이중화.
- 로드 분산.
- 협상력.
정책:
- 양쪽으로 광고 (incoming 분산).
- LOCAL_PREF로 선호도 설정 (outgoing 분산).
Route Filtering
들어오는 경로를 검증:
# Cisco 예시
ip prefix-list FILTER-IN deny 0.0.0.0/0 le 7 # 너무 큰 prefix 차단
ip prefix-list FILTER-IN deny 0.0.0.0/0 ge 25 # 너무 작은 prefix 차단
ip prefix-list FILTER-IN permit 0.0.0.0/0 le 32 # 나머지 허용
Bogon 차단: Private IP (RFC 1918), unallocated 등.
Martians: 절대 외부에 나오면 안 되는 주소.
RPKI 검증
라우터에서 RPKI 활성화:
# 예시
rtr client rpki-server 192.0.2.10
route-map RPKI-CHECK permit 10
match rpki valid
set local-preference 200
route-map RPKI-CHECK permit 20
match rpki not-found
set local-preference 100
route-map RPKI-CHECK permit 30
match rpki invalid
drop
Looking Glass
Looking Glass: 공개 BGP 뷰어. 다른 관점에서 내 광고 확인.
- bgp.he.net (Hurricane Electric)
- looking-glass.nl
- 대부분 Tier 1이 자체 looking glass 운영.
디버깅 도구
traceroute: 경로 추적.
mtr: 연속 traceroute + 통계.
BGP-specific:
show bgp summary: 세션 상태.show bgp ipv4 unicast: 전체 테이블.show bgp ipv4 unicast 8.8.8.0/24: 특정 prefix 상세.show bgp ipv4 unicast neighbor 10.0.0.1 received-routes: 이웃이 보낸 것.
11. 현대 트렌드
SDN과 BGP
Software Defined Networking: BGP를 중앙 컨트롤러가 관리.
- BGP 대신 OpenFlow: 과거 시도, 실패.
- BGP as SDN data plane: 현재 접근. 컨트롤러가 BGP로 프로그래밍.
BGP Flowspec: BGP로 firewall 규칙 배포.
Segment Routing
전통적 MPLS/RSVP-TE를 대체:
- SR-MPLS: MPLS label 스택으로 경로 지정.
- SR-v6: IPv6 확장 헤더로.
장점: 상태 적음, 단순.
BGP와의 관계: BGP-LU (Labeled Unicast), BGP-LS로 segment routing 정보 분배.
BGP EVPN
Ethernet VPN. 데이터센터 간 L2 연결:
- MAC address를 BGP로 광고.
- VXLAN과 결합해서 L2 over L3.
- 현대 데이터센터 표준.
Hyperscaler의 자체 네트워크
Google, Facebook, Microsoft 등이 전 세계에 자체 백본을 구축:
- Google B4: 데이터센터 간.
- Facebook Express Backbone.
- Microsoft Azure Network.
효과:
- 인터넷 경로를 건너뛰고 자체 네트워크 사용.
- 훨씬 낮은 지연.
- 전통 ISP 우회.
CDN과 Edge
Cloudflare, Fastly, Akamai의 edge 네트워크는 수백 개 POP. 각각 anycast로 광고. 사용자와 가장 가까운 POP에서 응답.
BGP는 이 모든 것의 배후에서 작동한다.
퀴즈로 복습하기
Q1. BGP가 "최단 경로"가 아닌 "정책 기반"을 사용하는 이유는?
A.
IGP vs BGP의 근본 차이:
IGP (OSPF, IS-IS, RIP)는 단일 관리 도메인 내에서 작동한다. 목표: 최단 경로 또는 가장 빠른 경로. 한 조직이 모든 라우터를 통제하므로 단순한 메트릭 (hop count, link cost)이면 충분.
BGP는 서로 다른 조직 간 통신이다. 수만 개의 AS가 각자의 이익과 정책을 가진다. 단순히 "최단"이 기준이 될 수 없다. 왜?
이유 1: 경제적 고려
Transit vs Peering의 차이:
내 AS → Peering으로 Facebook: 무료
내 AS → Transit ISP → Facebook: 돈 지불
단순 hop 수로는 둘 다 같을 수 있다. 하지만 비용은 극적으로 다르다. BGP operator는 돈을 안 내는 경로를 선호한다.
LOCAL_PREF attribute로 이를 표현:
- Customer 경로: LOCAL_PREF = 200 (수익 창출, 최우선).
- Peer 경로: LOCAL_PREF = 100 (무료).
- Transit 경로: LOCAL_PREF = 50 (비용 발생, 최후).
이유 2: 성능 vs Hop Count
Hop 수가 적다고 빠른 게 아니다:
경로 A: 3 hop, 하지만 혼잡한 peering 경로
경로 B: 5 hop, 여유 있는 tier 1 전용선
경로 B가 실제로는 빠를 수 있다. BGP는 이를 정책으로 반영:
- 특정 경로를 prefer/deprefer.
- AS_PATH prepending으로 덜 매력적으로.
- Community로 원격 AS에게 힌트.
이유 3: 안정성과 신뢰
신뢰할 수 있는 이웃 선호:
Cloudflare는 2015년 Hacking Team의 BGP hijack을 피하려고 특정 AS를 차단했다. 단순 최단 경로였다면 침해당했을 것.
정치적 이유:
- 분쟁 중인 국가의 네트워크 우회.
- 감시 우려가 있는 경로 회피.
- 규제 준수 (특정 국가 경유 금지).
이유 4: 트래픽 엔지니어링
링크 부하 관리:
- 한 링크가 과부하면 일부 트래픽을 다른 링크로 유도.
- AS_PATH prepending, MED, community 사용.
- 이는 "최단 경로"와 무관.
이중화 경로:
- 기본 경로 + 백업 경로.
- 기본이 죽으면 백업으로.
- 평소엔 백업을 의도적으로 덜 매력적으로.
이유 5: 상호 합의
Peering 계약:
"너는 너의 고객에게만 우리를 알리고,
우리도 우리 고객에게만 너를 알린다.
제3자 (우리 peer나 transit)에게는 안 된다."
이 Valley-Free Routing 원칙은 단순 최단 경로로는 표현 불가. 정책이 필요.
결과:
BGP의 decision process는 수십 개 단계:
- Highest LOCAL_PREF (정책).
- Shortest AS_PATH (약간의 최단성).
- Lowest ORIGIN.
- Lowest MED (이웃의 선호).
- eBGP over iBGP.
- ...
최단 경로는 2단계에서 등장하지만, 1단계 (LOCAL_PREF)가 우선한다. 경제와 정책이 거리보다 중요하다.
"인터넷은 엔지니어링이 아닌 정치학":
BGP는 기술적으로 최적 경로를 찾지 않는다. 경제적/정책적으로 받아들일 수 있는 경로를 찾는다. 이는 버그가 아니라 기능이다. 75,000개의 독립적인 조직이 협력하려면 각자의 이익을 존중하는 프로토콜이 필요하다.
교훈:
인터넷의 놀라운 점은 "서로 이해관계가 다른 75,000개의 조직이 자발적으로 협력"하는 것이다. BGP는 이 협력을 가능하게 하는 정치적 프로토콜이다. 기술적으로 우아하진 않지만, 작동한다. 그리고 40년 넘게 작동해 왔다.
최단 경로 알고리즘을 사용했다면 인터넷은 존재하지 않았을 것이다. 모든 AS가 "내 돈 안 내는 경로"를 강제할 수 없다면 peering 자체가 성립 안 된다. BGP의 "추악한" 복잡성이 사실은 인터넷의 정치적 기적을 가능하게 한다.
Q2. Peering과 Transit의 차이와 왜 Tier 1 ISP는 peering만 하는가?
A.
정의의 차이:
Transit: Customer-Provider 관계.
- Customer가 Provider에게 돈을 낸다.
- Provider는 customer에게 인터넷 전체의 경로를 제공.
- Customer의 트래픽을 어디든 전달.
Peering: Equal Exchange 관계.
- 보통 돈 지불 없음 (또는 소액).
- 두 AS가 서로의 고객 간 트래픽만 교환.
- 제3자 (다른 peer)의 트래픽은 거래 대상 아님.
트래픽 흐름의 차이:
Transit 예시:
My AS → Transit ISP → 세계 어디든 (Google, Facebook, 중국 등)
Transit ISP가 나를 위해 인터넷 전체에 연결.
Peering 예시:
My AS (customers: 1M users) ←→ Netflix AS (customer: Netflix)
내 고객 ↔ Netflix 직접. 빠르고 무료. 하지만 Netflix를 통해 Google에 못 감.
경제적 관점:
Transit 비용 (대략):
- 대도시, 1 Gbps: $500-2,000/month.
- 소도시, 1 Gbps: $2,000-10,000/month.
- 100 Gbps: $20,000-100,000/month.
Peering 비용:
- Public peering (IX): $500-5,000/month (포트 비용).
- Private peering: Cross-connect fee (~$200/month).
- 실제 트래픽: 무료.
Peering은 극적으로 저렴. 트래픽이 많을수록 차이 증가.
Tier 1의 정의:
Tier 1 ISP: 어떤 transit도 구매하지 않고 전 세계 모든 AS에 도달 가능한 ISP.
Tier 1의 특징:
- Settlement-free peering만 함 (다른 Tier 1과 상호 무료 교환).
- 약 12-20개 존재 (명확한 리스트 없음).
- 예: AT&T, Verizon, Level 3 (Lumen), Cogent, NTT, Telia, Deutsche Telekom, Tata Communications...
왜 peering만 하는가:
답 1: 정의상 그렇다
Tier 1은 "transit 안 사는 AS"로 정의된다. 만약 transit을 산다면 그 순간 Tier 1이 아니게 된다. 단순한 tautology다.
답 2: 상호 의존성
Tier 1은 모두 평등하다는 암묵적 합의가 있다. 만약 AT&T가 Verizon에게 돈을 내면:
- AT&T < Verizon을 의미.
- AT&T의 위상 하락.
- 시장 권력 균형 깨짐.
그래서 상호 무료 peering이 표준. "우리는 동등하다".
답 3: 순수 경제
Tier 1은 다음을 가진다:
- 자체 글로벌 백본: 수십 ~ 수백 국가.
- 자체 고객: 수만 개 기업, 작은 ISP.
- 자체 peering: 다른 Tier 1, 대형 콘텐츠 회사 (Google, Facebook).
이미 "인터넷 전체"에 도달 가능. transit을 살 이유가 없다.
답 4: 비즈니스 모델
Tier 1의 수익:
- Customer (작은 ISP, 기업)에게 transit 판매.
- 대역폭 사용량 과금.
- 수십억 달러 규모.
Transit을 산다면 비용 발생 → 수익률 감소.
Peering이 "공짜"인 이유:
"공짜 peering"은 사실 상호 이익이다:
A가 B에게 peering 제안:
- A의 고객이 B의 콘텐츠를 원함 (traffic in).
- B의 고객이 A의 콘텐츠를 원함 (traffic out).
- 양쪽 모두 서로가 필요.
- Transit 대신 peering으로 비용 절감.
핵심 조건:
- 트래픽 비율이 비슷해야 (보통 1:2 이내).
- 지리적 커버리지 비슷.
- 규모 비슷.
비대칭이면 peering 거부:
- Netflix → ISP: Netflix가 훨씬 많이 보냄.
- 초기엔 ISP들이 peering 거부.
- Netflix가 transit으로 돈 내거나, CDN 구축.
- 현재는 대부분 ISP가 Netflix와 peering (트래픽이 너무 많아 어쩔 수 없이).
Settlement vs Paid Peering:
드물지만 돈이 오가는 peering:
- 한쪽이 훨씬 강력할 때.
- Netflix가 Comcast에 "paid peering" 지불 (2014).
- 논란: "망 중립성" 위반 주장.
Tier 1 간 긴장:
Tier 1들도 peering 분쟁이 있다:
Cogent vs Level 3 (2005):
- 트래픽 불균형 주장.
- Level 3가 Cogent를 일방적으로 depeer (peering 종료).
- 3주간 인터넷 분열: Cogent 고객이 Level 3 고객에게 도달 불가.
- 결국 재peering.
이런 분쟁은 인터넷의 취약성을 보여준다. "하나의 인터넷"이 실제론 정치적 합의에 의존.
현대 변화:
Content ISP의 부상:
- Google, Facebook, Netflix, Amazon이 자체 AS + 자체 글로벌 네트워크.
- Tier 1과 동급이 됨.
- 전통 Tier 1 (Level 3 등)이 콘텐츠 회사보다 덜 중요해짐.
Peering의 민주화:
- Internet Exchange (IX)가 많아짐.
- 작은 네트워크도 peering 가능.
- DE-CIX, AMS-IX, LINX 등에 수백~수천 참여자.
교훈:
Peering과 Transit은 인터넷의 경제 구조를 정의한다. BGP는 기술이지만, 이 기술을 돌리는 것은 경제와 정치다.
- 돈 많은 회사 → transit 구매 여유.
- 대규모 콘텐츠 회사 → peering 협상력.
- 작은 ISP → transit 의존.
인터넷의 "평등"은 환상이다. 실제로는 계층 구조가 명확하며, Tier 1이 그 정점에 있다. 하지만 이 계층이 협력하기 때문에 우리가 "하나의 인터넷"을 경험한다.
다음에 당신의 패킷이 Google로 갈 때, 그 경로의 각 hop마다 돈과 정치적 결정이 개입되어 있음을 기억하자. 이것이 진짜 인터넷이다.
Q3. BGP Hijacking이 어떻게 작동하며 RPKI가 어떻게 방어하는가?
A.
BGP의 근본적 취약점:
BGP는 1980년대에 설계되었다. 당시 인터넷은 신뢰 기반 학술 네트워크. "누가 거짓말을 하겠어?"라는 가정.
문제: BGP는 광고된 prefix가 진짜인지 검증하지 않는다.
어떤 AS가 광고함: "8.8.8.0/24 (Google DNS)는 내가 가지고 있어!"
다른 AS: "알았어. 너에게 라우팅할게."
검증 없음. 단지 받아들임.
Hijacking의 종류:
1. Prefix Hijacking (원본 위조):
공격자 AS가 다른 AS의 prefix를 자기 것인 것처럼 광고:
정당한 소유자: Google AS 15169 광고 "8.8.8.0/24"
공격자: AS 99999 광고 "8.8.8.0/24"
BGP의 "more specific prefix wins" 규칙 때문에 더 작은 prefix가 이긴다:
Google: "8.8.8.0/24" (256개 주소)
공격자: "8.8.8.0/25" (128개 주소) ← 이긴다!
더 작은 prefix (긴 mask)가 route lookup에서 우선된다. 공격자가 /25 또는 더 작게 광고하면 트래픽이 공격자에게.
2. AS Path Manipulation:
공격자가 가짜 AS_PATH로 광고:
공격자 AS 99999 광고:
prefix: 8.8.8.0/24
AS_PATH: [99999, 15169] # "Google과 연결되어 있어!"
다른 AS는 "공격자를 통해 Google로 갈 수 있음"으로 오해.
3. Route Leak:
실수로 peer 경로를 transit에게 광고:
A는 B의 peer (서로 고객 교환)
A는 C의 customer (C가 transit)
A가 실수로 B의 경로를 C에게 광고
C → A → B로 트래픽
A는 대량 트래픽을 감당 못함 → 장애
2019년 Verizon 사건이 이 유형.
실제 사례들:
2008 Pakistan YouTube:
- Pakistan Telecom이 YouTube 국내 차단용으로
208.65.153.0/24광고. - 실수로 전 세계에 전파.
- BGP가 더 구체적 prefix를 받아들임.
- 전 세계 YouTube 트래픽이 Pakistan으로.
- 수 시간 다운.
2018 Amazon Route 53:
- 공격자가 Amazon DNS (
205.251.192.0/24)를 hijack. - 암호화폐 지갑 사이트 조회가 가짜 DNS 응답.
- 사용자가 가짜 지갑 사이트로.
- 수십만 달러 탈취.
2021 Twitter:
- AS가 짧은 시간 Twitter IP hijack.
- 탐지와 복구 빠름.
RPKI: Resource Public Key Infrastructure
암호학적 해결책. 2011년 표준화.
기본 아이디어:
-
RIR이 인증서 발급: ARIN, RIPE, APNIC 등이 각 AS와 prefix 할당을 인증.
-
ROA 생성: 소유자가 "이 prefix를 이 AS가 광고할 권한이 있음" 이라는 서명된 선언 생성.
Resource Origin Authorization (ROA):
Prefix: 8.8.8.0/24
ASN: 15169 (Google)
Max Length: 24
Signed by: ARIN (via certificate chain)
Valid Until: 2026-01-01
-
RPKI Repository: 모든 ROA를 공개 저장소에.
-
Router Validation: BGP 라우터가 RPKI 정보를 가져와 실시간 검증.
검증 프로세스:
라우터가 BGP UPDATE 받음:
Prefix: 8.8.8.0/24
AS_PATH: [..., 99999] # 위조
라우터가 RPKI 확인:
ROA 조회: 8.8.8.0/24 who owns?
답변: AS 15169 (Google)
AS 99999 ≠ AS 15169 → INVALID → 경로 거부.
4가지 상태:
- Valid: ROA가 있고 origin AS와 일치.
- Invalid: ROA가 있지만 일치 안 함 → 위험.
- Not Found: ROA 없음 → 중립.
- Unknown: 기술적 에러.
실전 행동:
- Valid: 경로 수용 + LOCAL_PREF 상향.
- Invalid: 경로 거부.
- Not Found: 일반 처리.
RPKI의 한계:
1. Origin만 검증:
- "누가 광고하는가"만 확인.
- 경로 중간의 변조는 검증 못 함.
- 예: A → B → C를 A → X → Y → C로 조작 가능.
2. 배포 불완전:
- 2025년 기준 전체 prefix의 ~50%만 ROA 있음.
- 나머지는 Not Found (검증 불가).
- 완전 방어 불가.
3. 실수 ROA:
- 잘못 작성된 ROA가 정당한 경로를 거부.
- 2019년 Cloudflare 자체 실수로 일부 경로 invalid 처리.
4. ROA 관리 부담:
- prefix 변경 시 ROA 업데이트 필요.
- 자동화 안 되면 실수 가능.
BGPsec: 완전한 해결책?
BGPsec: BGP UPDATE 전체를 암호학적으로 서명. 각 AS가 자기 서명 추가.
AS_PATH: [AS1 (sig by AS1), AS2 (sig by AS2), AS3 (sig by AS3)]
각 홉에서 이전 서명 검증 + 자기 서명 추가.
장점: 완벽한 경로 검증.
단점:
- 매우 느림: 서명 검증 = CPU 부담.
- 메모리 폭발: 서명 저장.
- 모든 라우터 업그레이드 필요: 한 곳이라도 미지원이면 무의미.
결과: 2025년까지도 배포 거의 0%. 실용화 어려움.
현대 방어 전략:
1. RPKI 완전 채택:
- Cloudflare, Google, Microsoft 강력 push.
- 많은 ISP가 이제 기본 drop.
2. Route Filtering:
- IRR (Internet Routing Registry) 기반 필터.
- 이웃이 광고할 수 있는 것을 미리 합의.
- Prefix list.
3. BGP Monitoring:
- BGPStream, RIPE RIS 등 실시간 모니터링.
- 이상 감지 시 자동 알림.
- Cloudflare Radar 같은 공개 dashboard.
4. MANRS:
- Mutually Agreed Norms for Routing Security.
- 참여 AS가 베스트 프랙티스 약속.
- 2025년 기준 800+ 참여.
교훈:
BGP 보안의 교훈:
1. 프로토콜은 업그레이드가 어렵다:
- 1980년대에 설계된 결함이 2020년대까지.
- 수만 조직의 조율 필요.
- "기술적 부채"의 극단적 사례.
2. 완벽한 방어는 없다:
- RPKI는 origin만 방어.
- BGPsec은 배포 못 함.
- 실시간 모니터링과 빠른 대응이 중요.
3. 신뢰 기반의 취약성:
- 초기 인터넷은 "선의"에 의존.
- 규모가 커지면 악의적 행위자 필연.
- 보안은 처음부터 설계해야.
4. 경제적 유인:
- RPKI 구현은 투자가 필요.
- 일부 ISP는 "남이 하면 되지" 태도.
- 인프라 보안은 공공재 문제.
5. 교육과 인식:
- 많은 실수가 BGP 오퍼레이터의 교육 부족.
- 복잡한 프로토콜, 소수 전문가.
결론:
BGP hijacking은 해결되지 않은 문제다. RPKI는 큰 진전이지만 완벽하지 않다. 진정한 해결책은:
- RPKI 100% 채택.
- BGPsec 또는 대체 기술.
- 실시간 모니터링과 자동 대응.
- 국제 협력과 표준.
이는 수십 년의 노력을 요구한다. 그 동안 우리는 "BGP는 불완전하다" 는 사실을 인지하고, 중요한 시스템에는 추가 방어 (암호화, 인증, 모니터링)를 둬야 한다.
인터넷은 40년 넘게 "동작하지 않아야 할 시스템이 기적적으로 동작"하고 있다. BGP는 그 기적의 핵심이며, 보안 역시 끊임없이 진화 중이다.
Q4. Anycast가 "하나의 IP, 여러 장소"를 어떻게 달성하는가?
A.
Anycast의 정의:
하나의 IP 주소를 여러 물리적 위치에서 BGP로 광고. 각 사용자의 요청은 BGP 경로 선택에 따라 가장 가까운 위치로 라우팅.
Unicast vs Anycast:
Unicast (일반):
IP 1.1.1.1 → 단 하나의 서버 (예: 미국 Virginia)
전 세계 사용자가 모두 Virginia로
Anycast:
IP 1.1.1.1 → 여러 서버 (미국 Virginia, 영국 London, 일본 Tokyo, ...)
한국 사용자 → Tokyo (가장 가까움)
영국 사용자 → London
미국 사용자 → Virginia
기술적 구현:
단계 1: 같은 prefix를 여러 장소에서 광고:
Cloudflare 네트워크:
Virginia (AS 13335, via ISP A): 1.1.1.0/24 광고
London (AS 13335, via ISP B): 1.1.1.0/24 광고
Tokyo (AS 13335, via ISP C): 1.1.1.0/24 광고
... 300+ POP ...
같은 AS number, 같은 prefix, 여러 BGP 세션.
단계 2: BGP Path Selection:
사용자의 패킷이 인터넷에 도착하면:
- 사용자의 ISP가 BGP 경로 테이블 확인.
- 1.1.1.0/24 에 대해 여러 경로가 있음.
- BGP가 가장 짧은 AS_PATH 또는 정책 기반으로 선택.
- 보통 가장 가까운 광고 지점이 선택됨.
단계 3: 패킷 전달:
선택된 경로를 따라 패킷이 흐름. 실제로 가장 가까운 Cloudflare POP에 도착.
"가장 가까운"의 의미:
BGP에서 "가까움"은 AS hop 수 기반. 물리적 거리와 항상 일치하지 않음:
- Tokyo 사용자 → Tokyo POP (1-2 hops).
- 하지만 때때로 "미국 경유"가 BGP상 더 짧을 수도.
- Local ISP의 peering 선택이 좌우.
예시: Cloudflare 1.1.1.1:
사용자가 dig @1.1.1.1 google.com 실행:
- 사용자 ISP가
1.1.1.1의 경로 확인. - 여러 경로 중 하나 선택 (BGP 결정).
- 패킷이 그 경로로 이동.
- 중간 라우터들도 같은 결정.
- 가장 가까운 Cloudflare POP에 도착.
- POP이 DNS 응답.
사용자는 자신이 어느 POP과 통신하는지 모른다. 그저 "1.1.1.1"에 묻고 답을 받는다.
사용 사례:
1. DNS:
- Cloudflare DNS (1.1.1.1).
- Google DNS (8.8.8.8).
- OpenDNS.
- 모두 anycast로 글로벌 서비스.
왜 DNS에 적합:
- UDP 기반: 연결 없음, 경로 변경 OK.
- 짧은 응답: 재전송 저렴.
- 저지연이 중요: 지리적 가까움.
2. CDN:
- Cloudflare, Fastly, Akamai.
- 정적 콘텐츠 edge 캐시.
- 단일 URL → 가장 가까운 POP.
3. DDoS 방어:
- 공격 트래픽이 여러 POP에 분산.
- 단일 POP의 한계 초과해도 총 용량은 극대.
- Cloudflare가 수백 Gbps DDoS를 흡수.
4. NTP (시간 동기화):
time.google.com,time.cloudflare.com.- 가장 가까운 서버로 낮은 jitter.
5. QUIC/HTTP/3:
- UDP 기반이라 anycast 친화적.
- Connection migration 지원 (경로 변경 OK).
HTTPS / TCP의 어려움:
전통적 문제:
- TCP 연결은 stateful.
- 중간에 BGP 경로 변경 → 패킷이 다른 POP으로.
- 다른 POP엔 연결 상태 없음 → RST (연결 끊김).
해결책:
1. Sticky Routing:
- 같은 사용자 → 같은 POP 일관되게.
- BGP 경로가 바뀌어도 짧은 시간만 다름.
- 대부분 TCP 연결은 short-lived → 괜찮음.
2. Session Sync:
- 여러 POP이 TCP 상태 공유.
- 복잡, 오버헤드 큼.
- 실전에선 잘 안 씀.
3. Load Balancing 뒤에:
- Anycast IP → L4 LB → Backend.
- L4 LB가 stateful 처리.
- BGP 변경 시 약간의 손실 감수.
4. QUIC 전환:
- QUIC는 connection ID 기반.
- IP 변경에 강함.
- 미래의 방향.
Cloudflare의 아키텍처:
Cloudflare는 anycast를 극한으로 활용:
- 300+ POP 전 세계.
- 모든 고객 사이트가 같은 anycast IP 범위.
- BGP가 자동으로 사용자를 가까운 POP으로.
- 각 POP이 모든 고객을 서비스.
효과:
- 낮은 지연: 평균 50ms 미만 (글로벌).
- 자동 failover: POP 다운 시 BGP가 자동 우회.
- 무한 확장: POP 추가 = 자동 부하 분산.
- DDoS 방어: 전 세계 용량을 한 고객에게.
한계와 함정:
1. 비결정적 라우팅:
- 어느 POP으로 가는지 예측 어려움.
- 같은 사용자가 짧은 시간에 다른 POP 방문 가능.
- 디버깅 어려움.
2. BGP 지식 필요:
- 복잡한 설정.
- BGP 에러가 큰 영향.
- 전문 지식 요구.
3. 비용:
- 여러 POP 운영.
- BGP peering 관리.
- Tier 1/2 ISP 관계.
4. 데이터 locality:
- 각 POP이 같은 데이터를 가져야 함.
- 전 세계 동기화 필요.
- 복제/캐싱 인프라.
5. 정치적 우회:
- 국가 간 라우팅은 BGP 정책의 결과.
- 때때로 "중국 경유 일본 사용자"처럼 이상한 경로.
Anycast의 대안:
GeoDNS:
- DNS가 사용자 위치에 따라 다른 IP 반환.
- 단순하지만 덜 정확.
- DNS 캐싱 문제.
GSLB (Global Server Load Balancing):
- 제품 기반 (F5, Citrix).
- 다양한 기준으로 라우팅.
- 비쌈.
CDN 자체:
- Anycast + smart routing 조합.
- 최고의 성능.
교훈:
Anycast는 단순한 아이디어, 강력한 결과의 예다. "같은 IP를 여러 곳에서 광고" = BGP가 알아서 처리. 이 40년 된 프로토콜이 현대 인터넷의 핵심 기능을 만든다.
핵심 통찰:
- BGP가 "의도치 않게" 로드 밸런싱을 제공한다.
- DNS 같은 stateless 서비스에 완벽.
- TCP도 가능하지만 주의 필요.
- QUIC와 함께 진정한 TCP+ anycast 가능.
당신이 1.1.1.1 DNS를 쓸 때, 당신의 쿼리는 당신과 물리적으로 가장 가까운 Cloudflare POP으로 간다. 미국에 있으면 미국 POP, 한국에 있으면 일본 POP (Cloudflare 한국 POP이 없으면). 이 모든 것이 사용자가 의식하지 못한 채 일어난다.
그것이 Anycast의 마법이다. 복잡한 글로벌 분산을 단순한 IP 주소 하나로 추상화한다. 사용자는 복잡성을 보지 못하지만, 그 혜택 (낮은 지연, 높은 가용성, DDoS 방어)을 누린다.
인터넷의 배후에서 BGP는 끊임없이 경로를 계산한다. Anycast는 그 계산을 우리를 위한 최적화로 바꾸는 영리한 트릭이다.
Q5. 2021년 Facebook 6시간 다운타임이 BGP 때문에 발생한 상세 원인은?
A.
2021년 10월 4일, 오후 3시 40분 (UTC):
Facebook, Instagram, WhatsApp, Messenger가 동시에 인터넷에서 사라졌다. 전 세계 35억 사용자가 영향을 받았다. 6시간 만에 복구되었고, Facebook이 공식 사후 분석을 발표했다.
타임라인:
15:40 UTC: Facebook 엔지니어가 네트워크 유지보수 명령 실행. 백본 네트워크 용량 평가가 목적.
15:41 UTC: 의도치 않게 전체 백본에 영향을 주는 명령이 실행됨. 이 명령이 Facebook의 DNS 서버에 도달하는 모든 BGP 경로를 제거.
15:41 UTC (즉시):
- Facebook의 DNS 서버들이 자신들이 네트워크에서 "분리"된 것을 감지.
- DNS 서버들이 자체 안전 장치로 BGP 광고를 자진 withdraw.
- "이상하니까 나를 쓰지 마" → 세계에 알림.
결과:
- facebook.com, instagram.com, whatsapp.com 등의 DNS resolution 실패.
- 사용자 브라우저: "DNS_PROBE_FINISHED_NXDOMAIN".
- 앱: 에러 또는 infinite loading.
- Facebook이 인터넷에서 사라짐.
더 심각한 연쇄 효과:
1. 내부 시스템 접근 불가:
- Facebook 엔지니어들의 VPN, 사내 메일, 인증 시스템이 모두 facebook.com 기반.
- 엔지니어가 원격으로 문제를 고칠 수 없음.
2. 물리적 시설 접근 문제:
- 데이터센터의 카드 키 시스템이 Facebook 인증 API에 의존.
- 직원이 데이터센터에 물리적으로도 못 들어감.
3. 공식 커뮤니케이션:
- 내부 슬랙 (Workplace by Facebook)도 다운.
- 엔지니어들이 Twitter, Discord로 조율.
복구 시도:
-
원격 복구 불가 확인: BGP 설정 복구가 원격으로 불가능.
-
물리적 출동: 엔지니어들이 데이터센터로 이동.
-
카드 키 문제: 보안 시스템에 우회 접근 필요.
-
그라인더와 각력: 일부 보도에 따르면 문자 그대로 각력 도구로 서버실 문을 열었다 (Facebook은 공식 부인).
-
수동 복구: 각 데이터센터의 라우터를 손으로 재구성.
-
점진적 BGP 광고 재시작: 한 번에 모든 것을 올리면 트래픽 폭풍. 단계적 복구.
-
21:05 UTC: 서비스 완전 복구. 약 6시간.
기술적 분석:
DNS 서버의 자동 withdraw 로직:
Facebook의 DNS 인프라는 안전 장치로 다음을 구현:
- DNS 서버가 백본 네트워크와의 통신을 지속적으로 체크.
- 연결이 끊기면 "나는 외로움" 상태.
- 이 상태에서 BGP 광고 철회 → "나 쓰지 마".
이 로직은 정상적으론 좋은 설계:
- 분리된 DNS 서버가 stale 응답을 주지 않게.
- 네트워크 복구 후 자동 재합류.
문제는 공시성:
- 모든 DNS 서버가 동시에 백본과 분리.
- 모두 동시에 withdraw.
- 완전한 DNS 블랙아웃.
원래의 유지보수 명령:
Facebook의 post-mortem에 따르면:
- 엔지니어가 명령 실행.
- 검증 시스템 버그로 위험한 명령이 차단 안 됨.
- 명령이 전체 백본 설정을 변경.
- DNS 서버로의 모든 경로 제거.
두 가지 연쇄 실패:
- 설정 검증 버그: 위험한 명령이 통과.
- DNS auto-withdraw: 설계상 안전 장치가 오히려 악화.
Post-mortem의 교훈:
Facebook의 공개 사후 분석에서 밝힌 것:
1. 검증 시스템 강화:
- 백본 설정 변경에 더 엄격한 검증.
- 자동 롤백 메커니즘.
2. Out-of-band 관리:
- BGP와 독립적인 관리 네트워크.
- 원격 복구를 위한 별도 경로.
3. DNS 로직 개선:
- Gradual withdrawal: 갑작스런 전면 철회 방지.
- 연결 복구 시 빠른 재광고.
4. 물리적 접근 redundancy:
- 카드 키 시스템이 인터넷 인증에 의존 안 하게.
- Offline fallback.
5. 내부 시스템 decoupling:
- 내부 도구가 외부 서비스에 의존하지 않게.
- "dogfooding"의 한계.
업계 전반의 교훈:
1. 자동화의 양면성:
- 자동화는 효율을 주지만 실수를 증폭.
- 한 명의 명령이 전체 조직을 영향.
- "Blast radius" 고려 필수.
2. 의존성 사이클:
- 내부 시스템이 자체 서비스에 의존.
- 자체 서비스가 다운되면 복구도 불가.
- 독립성이 내결함성의 기초.
3. BGP의 파워:
- BGP 한 번의 실수가 전 세계를 영향.
- 6시간 다운타임의 비즈니스 손실 수억 달러.
- 프로토콜의 정치적, 경제적 영향력.
4. 사이트 신뢰성의 본질:
- 완벽한 시스템은 없다.
- 빠른 복구와 학습이 핵심.
- Post-mortem 공유로 업계 발전.
유사 사건들:
Facebook 사건이 유일하지 않다:
Amazon S3 2017:
- 엔지니어 오타로 잘못된 명령.
- S3의 핵심 서비스 몇 시간 다운.
- 인터넷의 상당 부분 영향.
Slack 2022:
- 네트워크 설정 실수.
- 몇 시간 다운.
Google Cloud 2020:
- 인증 시스템 장애.
- Gmail, YouTube, Drive 영향.
패턴:
- 변경이 원인: 대부분 장애가 "변경" 때문.
- 자동화의 실수: 자동화 시스템이 오히려 확대.
- 의존성 폭포: 한 시스템이 다른 시스템을 무너뜨림.
BGP의 "단일 실패 지점":
Facebook 사건의 핵심 통찰:
- BGP는 인터넷의 신경계다.
- 한 조직의 BGP가 제대로 작동 안 하면 그 조직은 존재하지 않는다.
- 물리적 서버는 멀쩡한데 인터넷에서 안 보임.
이는 사이버 존재의 현실을 보여준다. 클라우드 시대에 "살아있음"은 "BGP로 도달 가능함"이다.
개인적 성찰:
이 사건은 기술 전문가들에게 교훈을 준다:
1. 겸손:
- 세계 최고의 엔지니어링 조직도 실수한다.
- 완벽한 시스템은 존재하지 않는다.
2. 복잡성의 위험:
- 시스템이 복잡할수록 예상 못한 실패 가능.
- Facebook의 인프라는 극도로 복잡.
3. Resilience 투자:
- 평상시엔 낭비처럼 보여도 장애 시 생명.
- Redundant management, out-of-band access.
4. Post-mortem 문화:
- Facebook이 투명하게 공개했다는 것 자체가 긍정.
- 비난 없는 문화가 진짜 학습을 만든다.
5. "BGP를 알라":
- 일반 개발자도 BGP의 존재를 인식해야.
- 당신의 서비스가 "갑자기 사라진" 이유가 BGP일 수 있다.
결론:
2021년 Facebook 사건은 BGP의 힘을 대중에게 각인시켰다. 이전에는 네트워크 전문가들만 알던 용어가 뉴스 헤드라인에 등장했다. 일반인도 "BGP"를 듣게 되었다.
기술적 교훈: BGP는 복잡하고 강력하며 위험하다. 한 번의 실수가 수십억 명에게 영향을 줄 수 있다.
비즈니스 교훈: 단일 실패 지점을 제거하라. 의존성을 분리하라. 자동화를 검증하라.
인간적 교훈: 엔지니어는 큰 책임을 진다. 몇 줄의 코드, 한 번의 명령이 전 세계에 영향을 준다. 겸손과 신중함이 그래서 중요하다.
Facebook은 그 6시간 동안 수억 달러의 손실과 수백만 사용자의 불만을 감수했다. 하지만 업계 전체가 배웠다. 다른 조직들이 자신의 아키텍처를 재검토했다. 이것이 실패를 통한 학습이다.
BGP는 인터넷의 가장 약한 고리 중 하나다. 그러나 가장 필수적이기도 하다. 40년 넘게 인터넷을 움직여 왔고, 앞으로 수십 년 더 움직일 것이다. 그동안 이런 사건들이 반복될 것이고, 그때마다 인터넷은 조금씩 더 견고해질 것이다.
다음번에 Facebook에 접속이 안 될 때, 잠시 생각해보자: BGP가 제대로 동작하지 않으면 현대 문명의 상당 부분이 멈춘다. 이것이 인터넷 인프라의 진짜 얼굴이다.
마치며: 인터넷을 움직이는 정치학
핵심 정리
- AS: 인터넷의 구성 블록. 75,000+개.
- BGP: 정책 기반 path vector 프로토콜.
- Peering vs Transit: 인터넷의 경제 구조.
- Path Selection: 수십 단계의 결정 과정.
- RPKI: Route origin 암호학적 검증.
- Anycast: BGP 기반 글로벌 분산.
- Hijacking: 신뢰 기반 BGP의 취약성.
- Outages: BGP 실수의 거대한 영향.
BGP가 가르치는 것
BGP는 단순한 프로토콜이 아니다. 분산 시스템의 극한 사례다:
- 75,000개의 독립 조직이 자발적으로 협력.
- 중앙 권위 없음.
- 경제와 정치가 기술을 지배.
- 합의 알고리즘 없이 수렴.
- 보안은 나중에 추가된 것.
40년 넘게 이 모든 것이 작동해 왔다는 사실 자체가 기적이다.
마지막 교훈
BGP를 이해하는 것은 인터넷을 이해하는 것이다. 우리가 "인터넷"이라 부르는 추상은 실제로는:
- 수만 개의 계약.
- 수십 개의 Tier 1.
- 수백 개의 IX.
- 수백만 개의 prefix.
- 매 초 수천 개의 BGP 업데이트.
이 모든 것이 조율되지 않은 채로 하나의 글로벌 네트워크를 만든다. 정치적 기적이다.
다음에 패킷이 당신의 화면에 도착할 때, 그 여정을 생각해보자:
- 당신의 로컬 라우터.
- ISP의 엣지.
- ISP의 백본.
- Transit 또는 peering 경로.
- Tier 1 네트워크.
- 다른 Tier 1 (peering).
- 목적지 ISP.
- 목적지 서버.
각 홉마다 돈, 정치, 정책의 결정이 있다. BGP가 이 모든 것을 조율한다. 그리고 당신의 패킷은 수십 ms 안에 도착한다.
이것이 진짜 인터넷이다. BGP를 이해하면 이 복잡한 기적의 작동 원리가 보인다. 그리고 이 기적이 얼마나 취약한지도 깨닫는다. 인터넷은 우리가 당연하게 여기는 것보다 훨씬 더 인간적인 시스템이다. 실수가 일어나고, 의도치 않은 결과가 있으며, 끊임없는 유지보수가 필요하다.
BGP를 배우는 것은 인터넷을 경이롭게 보는 법을 배우는 것이다.
참고 자료
- RFC 4271: A Border Gateway Protocol 4 (BGP-4)
- RFC 6480: An Infrastructure to Support Secure Internet Routing (RPKI)
- BGP: Building Reliable Networks with the Border Gateway Protocol (Iljitsch van Beijnum)
- Routing TCP/IP, Volume II (Jeff Doyle)
- Cloudflare Blog: BGP, Anycast, and More
- Facebook Post-mortem: More details about the October 4 outage
- RIPE NCC: BGP Operations and Security
- MANRS (Mutually Agreed Norms for Routing Security)
- Route Views Project - BGP 데이터
- Cloudflare Radar: BGP Monitoring
- Bgp.he.net: Hurricane Electric BGP Toolkit
- Dyn Research: BGP History and Analysis