1. 라이브러리
  2. 라우팅과 네트워크
  3. 라우팅 프로토콜

업데이트됨 1개월 전

BGP가 복잡해 보이는 건 실제로 복잡하기 때문입니다. 하지만 그 복잡성은 임의적인 것이 아닙니다. 지난 30년간 인터넷이 겪어온 모든 비즈니스 관계, 보안 우려, 확장성 과제가 켜켜이 쌓인 결과입니다.

이 심층 분석에서는 BGP가 경로를 선택할 때 실제로 무슨 일이 일어나는지, 각 속성이 왜 존재하는지, 그리고 BGP를 동시에 답답하고도 대체 불가능하게 만드는 운영 현실을 살펴봅니다.

BGP의 경로 선택 방식

BGP 라우터가 동일한 목적지로 향하는 여러 경로를 수신하면 그 중 하나를 선택해야 합니다. 선택 과정은 엄격한 순서를 따르는데, 그 순서를 이해하면 인터넷이 실제로 어떻게 작동하는지에 대한 중요한 사실이 드러납니다.

순서의 논리

BGP의 경로 선택은 객관적인 의미에서 "최선"의 경로를 찾는 것이 아닙니다. 가장 중요한 로컬 정책부터 충족시킨 다음, 점점 기술적인 동점 결정 기준으로 넘어가는 방식입니다.

첫 번째: 로컬 관리 우선순위

첫 번째 기준들은 완전히 로컬입니다. 네트워크 밖으로 나가지 않습니다.

  1. Weight (Cisco 전용): 다른 모든 기준을 무시하는 로컬 설정값입니다. 높은 값이 이깁니다. 특정 경로를 반드시 사용해야 한다면 weight를 높게 설정하면 됩니다.

  2. Local Preference: iBGP를 통해 AS 내에서 공유됩니다. 모든 라우터에게 "우리 네트워크를 벗어날 때 이 출구를 선호하라"고 알리는 방법입니다. 높은 값이 이기며, 기본값은 100입니다.

  3. Locally Originated: 직접 알리고 있는 경로를 우선합니다. 자신의 네트워크는 가장 직접적인 경로를 사용하는 게 맞습니다.

이 세 가지 기준은 운영자가 비즈니스 결정을 구현할 수 있게 해 줍니다. 더 저렴한 공급자를 선호하거나, 혼잡한 링크를 피하거나, 트랜짓 경로보다 고객 경로를 사용하는 식으로요.

두 번째: 경로 특성

  1. AS 경로 길이: 경로에 포함된 자율 시스템 수가 적을수록 유리합니다. BGP의 거리 지표이지만 꽤 조잡합니다. AS 경로 길이와 지연 시간, 대역폭, 신뢰성 사이에는 거의 상관관계가 없습니다. 3개의 AS를 거치는 경로가 2개를 거치는 경로보다 빠를 수도 있습니다.

  2. Origin 유형: 명시적으로 구성된 경로(IGP)를 레거시 프로토콜에서 학습한 경로(EGP)보다, 그리고 IGP에서 재분배된 경로(Incomplete)보다 선호합니다. 대부분 역사적인 이유에서 비롯된 것입니다.

  3. 가장 낮은 MED: Multi-Exit Discriminator는 이웃 네트워크가 어느 진입점을 사용해야 하는지 제안할 수 있게 해 줍니다. 낮은 값이 이깁니다. 단, MED는 동일한 AS에서 온 경로끼리만 비교되며, 많은 네트워크에서 아예 무시하기도 합니다.

세 번째: Hot Potato

  1. eBGP 우선 (iBGP 대비): 내부 경로보다 외부 경로를 선호합니다.

  2. 다음 홉까지의 가장 낮은 IGP 메트릭: 남은 경로 중에서 출구 지점이 자신에게 가장 가까운 것을 선택합니다.

이것이 바로 "hot potato" 라우팅입니다. 패킷을 가능한 한 빨리 다음 AS로 넘기는 방식이죠. 각 네트워크는 패킷을 최대한 일찍 다음 사람에게 넘김으로써 자체 비용을 최소화합니다. 모든 네트워크가 이렇게 합니다. 그 결과 인터넷 라우팅은 패킷의 종단 간 여정이 아닌, 각 네트워크 개별의 비용에 최적화됩니다.

마지막으로: 동점 결정 기준

  1. 가장 오래된 경로: 안정성이 중요합니다. 이유 없이 경로를 바꾸지 마세요.

  2. 가장 낮은 Router ID: 결정론적 동점 결정 기준입니다.

  3. 가장 짧은 Cluster List: 라우트 리플렉터 환경에서 적용됩니다.

  4. 가장 낮은 이웃 IP 주소: 최종 동점 결정 기준입니다.

대부분의 경로 선택은 처음 몇 단계에서 결정됩니다. 동점 결정 기준이 존재하는 이유는 BGP가 항상 정확히 하나의 경로를 골라야 하기 때문입니다. "모르겠다"는 대답은 없습니다.

중요한 속성들

AS Path: 식별과 루프 방지

AS path는 세 가지 역할을 합니다.

루프 방지: 라우터가 경로에서 자신의 AS 번호를 발견하면 해당 경로를 거부합니다. BGP가 홉 수 제한 없이 라우팅 루프를 방지하는 방법입니다.

경로 선택: 더 짧은 경로가 선호됩니다(위의 단계 4).

정책 도구: AS path prepending—자신의 AS 번호를 여러 번 앞에 추가하는 것—은 경로를 더 길어 보이게 하여 덜 매력적으로 만듭니다. 선호하는 링크에는 [65001]을, 백업에는 [65001, 65001, 65001]을 알리면 이웃은 더 짧은 경로를 선호하게 됩니다.

Prepending은 무딘 도구입니다. 모든 이웃에게 동일하게 영향을 미치며, 과도한 prepending(3~4회 이상)은 대개 의미가 없고 필터링을 유발할 수 있습니다.

Next Hop: 패킷을 어디로 보낼 것인가

Next hop 속성은 라우터에게 패킷을 어디로 전달해야 하는지 알려줍니다. 두 가지 중요한 동작이 있습니다.

eBGP 동작: Next hop은 경로를 알린 이웃의 IP 주소입니다.

iBGP 동작: 기본적으로 Next hop은 변경되지 않습니다. 라우터 A가 eBGP 이웃 203.0.113.1로부터 경로를 학습하고 iBGP를 통해 라우터 B에 알린다면, 라우터 B는 next hop을 203.0.113.1로 인식합니다. 직접 도달하지 못할 수도 있는 주소입니다.

그래서 iBGP 세션에 "next-hop-self"를 흔히 설정합니다. 이렇게 하면 next hop이 광고하는 라우터 자신의 주소로 바뀌어 내부 라우터가 도달 방법을 알 수 있게 됩니다.

Local Preference: 출구 제어

Local preference는 여러 경로가 존재할 때 AS가 어느 출구를 사용할지 제어합니다. 높은 값이 이깁니다. iBGP를 통해 공유되지만 외부 이웃에게는 전송되지 않습니다. 순전히 내부 정책입니다.

일반적인 패턴: 고객 경로에는 150, 피어 경로에는 100, 트랜짓 경로에는 80으로 설정합니다. 이렇게 하면 트래픽이 피어(무료)나 트랜짓(요금 지불)보다 고객(요금 수취) 경로를 선호하게 됩니다.

MED: 진입점 제안

MED는 local preference의 반대 개념입니다. 이웃에게 어느 진입점을 사용해야 하는지 제안합니다. 낮은 값이 이깁니다.

AS 65002와 뉴욕과 런던에서 각각 연결되어 있다면, 미국 prefix를 뉴욕에서 MED 10으로, 런던에서 MED 100으로 알릴 수 있습니다. AS 65002는 뉴욕 경로를 선호하게 됩니다.

하지만 MED의 영향력은 제한적입니다.

  • 한 번에 하나의 이웃에만 영향을 줍니다.
  • 많은 네트워크에서 피어 및 트랜짓 공급자로부터의 MED를 무시합니다.
  • 동일한 이웃 AS에서 온 경로끼리만 비교됩니다.

MED는 명령이 아닌 정중한 제안입니다.

Community: 정책을 위한 태그

Community는 경로에 부착된 32비트 태그로, 일반적으로 ASN:값 형식으로 표기됩니다(예: 65001:100). 모든 prefix에 대해 일일이 설정하지 않고도 정책을 적용할 수 있게 해 줍니다.

예시:

내부 신호: 고객 경로에 65001:1000, 피어 경로에 65001:2000 태그를 붙입니다. 필터링 정책이 prefix 목록 대신 이 태그를 기준으로 매칭할 수 있습니다.

원격 제어: 많은 트랜짓 공급자가 특정 community를 지원합니다. AS path를 한 번 prepend하려면 65002:101을 설정합니다. 특정 피어에게 알리지 않으려면 65002:9999를 설정합니다. 고객은 공급자의 설정을 건드리지 않고도 라우팅에 영향을 줄 수 있습니다.

잘 알려진 community:

  • NO_EXPORT: eBGP 이웃에게 알리지 않음
  • NO_ADVERTISE: 어떤 이웃에게도 알리지 않음
  • LOCAL_AS: 로컬 confederation 하위 AS 밖으로 알리지 않음

Community는 BGP에서 가장 유연한 정책 도구입니다.

BGP 메시지와 상태

메시지 유형

OPEN: 세션을 수립합니다. AS 번호, 홀드 타임, 라우터 ID, 기능(capabilities)을 교환합니다.

UPDATE: 실제 라우팅 정보입니다. 철회된 경로(더 이상 유효하지 않은 것들), 경로 속성, NLRI(Network Layer Reachability Information—알리는 prefix들)가 포함됩니다.

KEEPALIVE: 전할 내용이 없을 때 세션을 유지합니다. 기본적으로 60초마다 전송됩니다.

NOTIFICATION: 문제가 발생했습니다. 오류 코드를 포함하며, 이후 세션이 종료됩니다.

세션 상태

IdleConnectActiveOpenSentOpenConfirmEstablished

세션이 Idle, Connect, Active 사이를 반복한다면 TCP 연결이 불가능하다는 의미입니다. 잘못된 IP, 차단된 포트, 또는 피어로 가는 경로가 없는 경우입니다. OpenSent 또는 OpenConfirm에서 멈춘 세션은 대개 파라미터 불일치(AS 번호, 인증, 기능 등)를 의미합니다.

필터링: 필수적인 규율

필터링되지 않은 BGP는 위험합니다. 모든 BGP 세션에는 적절한 필터링이 필요합니다.

Prefix 필터링

Bogon 필터링: 예약된 주소, 미할당 주소, 사설 주소 공간을 거부합니다. 이런 주소들은 글로벌 라우팅 테이블에 등장해서는 안 됩니다.

길이 필터링: IPv4의 경우 /24보다 길거나, IPv6의 경우 /48보다 긴 prefix를 거부합니다. 필요 이상으로 구체적이거나 하이재킹 시도일 수 있습니다. IPv4의 경우 /8보다 짧은 prefix도 거부합니다. 뭔가 잘못된 것입니다.

고객 검증: 고객이 알려야 하는 특정 prefix만 허용합니다. 명시적인 prefix 목록을 관리하세요.

AS Path 필터링

자신의 AS 필터링: 자신의 AS 번호가 포함된 경로를 거부합니다(루프 방지).

사설 AS 필터링: 공개 라우팅에서 사설 ASN(64512-65534, 4200000000-4294967294)이 포함된 경로를 거부합니다.

길이 필터링: 지나치게 긴 AS path(50개 이상의 AS는 의심스러움)를 거부합니다.

RPKI/ROV

RPKI(Resource Public Key Infrastructure)는 prefix를 출처로 알리는 AS가 실제로 그렇게 할 권한이 있는지를 암호학적으로 검증합니다. ROV(Route Origin Validation)는 RPKI 데이터를 기준으로 들어오는 경로를 확인합니다.

  • Valid: 출처 AS가 RPKI 레코드와 일치
  • Invalid: 출처 AS가 일치하지 않음(잠재적 하이재킹)
  • Unknown: RPKI 레코드 없음

RPKI 도입이 늘고 있습니다. Invalid 경로를 삭제하는 것이 점점 표준 관행이 되어 가고 있습니다.

iBGP 확장성

iBGP에는 풀 메시 요건이라는 확장성 문제가 있습니다.

왜 풀 메시인가?

iBGP는 AS path를 수정하지 않습니다. 모든 라우터가 같은 AS에 있기 때문에 수정할 수 없습니다. AS path 변경 없이는 루프 방지 수단이 없습니다. 그래서 iBGP는 단순한 규칙을 씁니다. iBGP를 통해 학습한 경로를 다른 iBGP 이웃에게 재광고하지 않는 것입니다.

이는 모든 라우터가 외부에서 경로를 학습한 라우터로부터 직접 경로를 받아야 한다는 의미입니다. 라우터가 N개라면 N(N-1)/2개의 세션이 필요합니다. 10대면 45개, 50대면 1,225개의 세션이 필요합니다.

라우트 리플렉터

라우트 리플렉터는 "재광고 금지" 규칙을 통제된 방식으로 깨뜨립니다. 라우트 리플렉터는 다음을 수행합니다.

  • 클라이언트로부터 경로를 수신하고
  • 다른 클라이언트에게 반영(reflect)하며
  • 루프 감지를 위한 cluster 정보를 추가합니다.

풀 메시 대신 라우터들이 라우트 리플렉터와 피어링합니다. 두 개의 라우트 리플렉터(이중화를 위해)로 전체 AS를 서비스할 수 있습니다.

트레이드오프: 라우트 리플렉터가 전체 토폴로지를 파악하지 못하면 최적이 아닌 라우팅이 발생할 수 있습니다. 신중하게 설계하세요.

Confederation

Confederation은 AS를 하위 AS로 나눕니다. 내부 라우팅은 하위 AS 간에 eBGP와 유사한 방식을 사용하여 계층적 라우팅의 확장성 이점을 제공합니다. 라우트 리플렉터보다 복잡하지만 매우 큰 네트워크나 조직 경계가 있는 경우에 유용합니다.

보안 현실

BGP는 인터넷이 작고 운영자들이 서로를 신뢰하던 시절에 설계되었습니다. 그 신뢰 모델은 오늘날의 규모에서 통하지 않습니다.

Prefix 하이재킹

공격자가 자신이 소유하지 않은 prefix를 알립니다. 트래픽이 합법적인 소유자 대신 공격자에게 흘러갑니다. 원인은 우발적인 잘못된 설정에서 의도적인 도청까지 다양합니다.

방어 수단: RPKI/ROV(출처 검증), 모니터링(예상치 못한 알림 감지), 필터링(전파 방지).

경로 누출

네트워크가 정책을 위반하여 경로를 재광고합니다. 일반적으로 트랜짓 경로를 다른 트랜짓 공급자에게 알려, 자신이 통과해서는 안 될 트래픽의 경유지가 되는 경우입니다.

방어 수단: 관계 유형에 따른 엄격한 필터링, NO_EXPORT community, 모니터링.

세션 보안

BGP는 TCP 위에서 실행됩니다. 세션 하이재킹, RST 공격, 자원 고갈이 모두 가능합니다.

방어 수단: MD5 인증(취약하지만 없는 것보다 낫습니다), GTSM(직접 연결된 이웃에서 오지 않았음을 나타내는 TTL을 가진 패킷 거부), TCP-AO(더 강력한 인증이지만 배포는 제한적).

타이머와 수렴

홀드 타임과 Keepalive

기본값: 홀드 타임 180초, keepalive 60초. keepalive가 세 번 누락되면 세션이 끊어진 것으로 판단합니다.

공격적인 타이머(3초 keepalive, 9초 홀드)는 장애를 빠르게 감지하지만 CPU 부하를 높이고 순간적인 혼잡으로 인한 오탐 위험도 커집니다.

BFD(Bidirectional Forwarding Detection)는 공격적인 BGP 타이머 없이 1초 미만의 장애 감지를 제공합니다. 권장되는 방식입니다.

광고 간격

eBGP는 동일한 이웃에게 동일한 prefix의 업데이트 사이에 30초를 기다립니다(MRAI—Minimum Route Advertisement Interval). iBGP 기본값은 0입니다.

이는 진동을 완화하지만 수렴을 지연시킵니다. 경로 변경에 대한 인터넷 전체의 수렴 시간은 초 단위가 아닌 분 단위로 측정됩니다.

경로 댐프닝

경로 댐프닝은 flap에 대한 패널티를 누적하여 불안정한 경로를 억제합니다. 임계값을 초과하면 해당 경로가 억제됩니다.

실제로는 정상적인 수렴 이벤트를 겪는 합법적인 경로마저 억제하는 경우가 많습니다. 대부분의 운영자는 이 기능을 비활성화합니다.

BGP 경로 선택에 관한 자주 묻는 질문

BGP가 그냥 가장 빠른 경로를 선택하지 않는 이유는 무엇인가요?

BGP에는 "빠름"이라는 개념이 없습니다. 지연 시간, 대역폭, 패킷 손실을 측정하지 않습니다. AS 경로 길이는 성능의 형편없는 대리 지표입니다. 두 홉 경로가 네 홉 경로보다 느릴 수 있습니다. BGP는 성능이 아닌 정책 준수와 안정성에 최적화되어 있습니다. 성능 기반 라우팅이 필요하다면 추가 도구가 필요합니다. 실제 상황을 측정하고 대응할 수 있는 트래픽 엔지니어링, SD-WAN, 또는 오버레이 네트워크가 필요합니다.

Local preference와 MED의 차이는 무엇인가요?

Local preference는 AS의 아웃바운드 트래픽, 즉 어느 출구를 사용할지를 제어합니다. MED는 인바운드 트래픽에 영향을 줍니다. 이웃이 어느 진입점을 사용해야 하는지입니다. Local preference는 AS 내에서 공유되며 외부로는 전송되지 않습니다. MED는 이웃에게 전송되지만 그들의 결정에만 영향을 미치고 내 결정에는 영향을 미치지 않습니다. Local preference는 완전히 내가 제어합니다. MED는 이웃이 무시할 수 있는 제안일 뿐입니다.

라우트 리플렉터가 최적이 아닌 라우팅을 유발하는 이유는 무엇인가요?

라우트 리플렉터는 자신이 아는 최선의 경로만 알립니다. 라우트 리플렉터가 전달 경로에 없다면, 자신의 관점에서는 최적이지만 클라이언트에게는 최적이 아닌 경로를 선택할 수 있습니다. 클라이언트는 더 나은 대안을 볼 수 없습니다. 올바른 설계는 라우트 리플렉터를 네트워크 집성 지점에 배치하거나 완전한 가시성을 갖춘 전용 하드웨어에서 운영하는 것입니다.

네트워크들이 MED를 무시하는 이유는 무엇인가요?

MED는 이웃이 내 라우팅에 영향을 미칠 수 있게 합니다. 그들에게 도달하기 위해 어느 진입점을 쓸지를요. 하지만 내 라우팅은 내 비즈니스 결정입니다. 그들이 선호하는 진입점을 사용하면 비용이 많이 드는 링크에 더 많은 트래픽이 몰릴 수 있습니다. 많은 네트워크들이 자체 비용을 기준으로 local preference를 설정하고 MED를 완전히 무시하거나, 라우팅 영향력에 대한 비용을 지불하는 고객으로부터의 MED만 수용합니다.

이 페이지가 도움이 되었나요?

😔
🤨
😃