IT·테크/인프라

BGP — AS와 AS 사이를 정책으로 잇는 라우팅 프로토콜

레루루 2026. 8. 14. 13:51
반응형

이 글은 2021년 11월 기준 기록입니다.

BGP는 조직과 조직 사이를 잇는다

BGP는 서로 다른 AS(Autonomous System) 사이에서 사용하는 라우팅 프로토콜입니다. 서로 다른 인터넷 간을 연결하거나, 일반 네트워크를 두 개 이상의 ISP와 연결할 때 사용합니다.

 

동작 방식부터 IGP와 다릅니다. 일반적으로 멀티캐스트(UDP)를 활용하는 IGP와 달리 BGP는 유니캐스트(TCP 179)를 활용합니다. 경로를 고르는 기준도 다릅니다. 대역폭이나 홉 수 같은 물리적 지표가 아니라, 조직 간에 계약된 정책에 따라 최적 경로를 결정합니다.

 

한 AS 안에서 동작하는 라우터가 여러 개일 경우에는 AS 내부에 IGP를 설정해야 합니다. 이유가 네 가지입니다. BGP 네이버로 가는 경로를 알리기 위해, BGP 넥스트 홉 문제를 해결하기 위해, BGP 싱크 문제를 해결하기 위해, 그리고 AS 내부 라우팅을 위해서입니다.

 

서로 다른 AS를 연결하는 설정을 eBGP, 동일한 AS 안의 라우터 설정을 iBGP라고 합니다.

eBGP는 직접 연결된 넥스트 홉으로 네이버를 맺는다

인접한 BGP 라우터를 BGP 피어(peer) 또는 BGP 네이버(neighbor)라고 합니다. 서로 다른 AS에 속하면 eBGP 피어, 동일한 AS에 속하면 iBGP 피어입니다.

// 자신의 AS 번호를 입력하여 bgp 설정 진입
R1(config)#router bgp 1
// 라우터 id는 루프백 주소 활용하는 것이 좋음
R1(config-router)#bgp router-id 1.1.1.1
// eBGP 네이버는 일반적으로 직접 연결된 넥스트홉 주소를 사용
R1(config-router)#neighbor 1.1.12.2 remote-as 234
// 네트워크 광고 시 서브넷되지 않았으면 mask 부분 생략 가능
R1(config-router)#network 1.1.1.0 mask 255.255.255.0

라우터 ID는 OSPF와 동일한 방식으로 자동 지정되지만 직접 지정하는 편이 낫습니다.

 

여기서 BGP의 성격을 드러내는 두 가지가 있습니다. 첫째, BGP는 반드시 네이버를 직접 지정해야 합니다. 헬로 패킷으로 알아서 찾아 주지 않습니다. 둘째, BGP는 network 명령으로 광고할 때 자신의 네트워크가 아니어도 가능합니다. 다만 반드시 라우팅 테이블에 저장된 네트워크만 광고할 수 있습니다.

 

두 AS 사이의 네트워크는 DMZ 네트워크라고 부르며, 일반적으로 BGP에 포함시키지 않습니다.

R2(config)#router bgp 234
R2(config-router)#bgp router-id 1.1.2.2
R2(config-router)#neighbor 1.1.12.1 remote-as 1
R2(config-router)#net 1.1.2.0 mask 255.255.255.0

iBGP는 루프백 주소로 네이버를 맺는다

iBGP에서는 일반적으로 네이버를 지정할 때 네이버 라우터의 루프백 주소를 사용합니다. 물리 인터페이스 하나가 죽어도 다른 경로로 세션이 유지되기 때문입니다. 그리고 AS 내의 모든 라우터가 서로를 네이버로 지정한 형태를 완전 메시(full mesh) 구조라고 합니다.

R2(config)#router bgp 234
R2(config-router)#neighbor 1.1.3.3 remote-as 234
R2(config-router)#neighbor 1.1.3.3 update-source lo0
R2(config-router)#neig 1.1.4.4 remote-as 234
R2(config-router)#nei 1.1.4.4 update-source lo0

R3(config)#router bgp 234
R3(config-router)#bgp router-id 1.1.3.3
R3(config-router)#neig 1.1.2.2 remote-as 234
R3(config-router)#neig 1.1.2.2 update-source lo0
R3(config-router)#nei 1.1.4.4 remote-as 234
R3(config-router)#nei 1.1.4.4 update-source lo0
R3(config-router)#net 1.1.3.0 mask 255.255.255.0

R4(config)#router bgp 234
R4(config-router)#bgp router-id 1.1.4.4
R4(config-router)#nei 1.1.2.2 remote-as 234
R4(config-router)#nei 1.1.2.2 update-source lo0
R4(config-router)#nei 1.1.3.3 remote-as 234
R4(config-router)#nei 1.1.3.3 update-source lo0
R4(config-router)#net 1.1.4.0 mask 255.255.255.0

루프백 주소로 세션을 맺으려면 패킷의 출발지 주소도 루프백이어야 하므로 update-source lo0이 함께 붙습니다.

BGP 테이블은 라우팅 테이블과 따로 유지된다

OSPF의 링크 상태 데이터베이스나 EIGRP의 토폴로지 테이블처럼, BGP도 BGP 테이블을 별도로 유지합니다. 수신한 라우팅 정보를 BGP 테이블에 저장하고, 최적 경로를 선택하고, 라우팅 테이블과 비교합니다.

// BGP 테이블 확인
R2#sh ip bgp

// version은 테이블이 변경된 횟수
// 소규모 네트워크에서 version이 크면, 네트워크가 문제가 있는 것
BGP table version is 7, local router ID is 1.1.2.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

 Network          Next Hop            Metric LocPrf Weight Path
// *은 넥스트홉 문제가 없는 경로
// >는 최적 경로
// r은 RIB-failure 최적 경로인데, IGP보다 AD가 높아서 라우팅 테이블에
// 설치되지 못한 경로
// i는 iBGP 네이버에게 광고받은 네트워크
*>  1.1.1.0/24       1.1.12.1                 0             0 1 i
*>  1.1.2.0/24       0.0.0.0                  0         32768 i
r>i 1.1.3.0/24       1.1.3.3                  0    100      0 i
r>i 1.1.4.0/24       1.1.4.4                  0    100      0 i

version은 테이블이 변경된 횟수를 나타냅니다. 소규모 네트워크에서 version이 크다면 네트워크에 문제가 있다는 신호입니다.

네이버 상태는 별도로 확인합니다.

// BGP 네이버 테이블 확인
R2#sh ip bgp nei

// 요약 정보 표시
R2#sh ip bgp summary
BGP router identifier 1.1.2.2, local AS number 234
BGP table version is 7, main routing table version 7
4 network entries using 576 bytes of memory
4 path entries using 320 bytes of memory
3/3 BGP path/bestpath attribute entries using 456 bytes of memory
1 BGP AS-PATH entries using 24 bytes of memory
0 BGP route-map cache entries using 0 bytes of memory
0 BGP filter-list cache entries using 0 bytes of memory
BGP using 1376 total bytes of memory
BGP activity 4/0 prefixes, 4/0 paths, scan interval 60 secs

Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
1.1.3.3         4          234      25      26        7    0    0 00:19:09        1
1.1.4.4         4          234      23      26        7    0    0 00:17:47        1
1.1.12.1        4            1      38      40        7    0    0 00:31:02        1

BGP가 동작하려면 세 가지 문제를 풀어야 한다

기본적으로 BGP가 동작하려면 BGP와 IGP의 동기화, 넥스트 홉 문제, 스플릿 호라이즌 문제가 해결되어야 합니다. 이 세 가지가 BGP 설정의 대부분을 차지합니다.

동기 — BGP가 아는 것은 IGP도 알아야 한다

BGP 동기BGP가 알고 있는 네트워크는 IGP도 알고 있어야 한다는 규칙입니다. AS 내부에 BGP를 모르는 라우터가 섞여 있으면 그 라우터에서 패킷이 버려지기 때문입니다. 해결 방법은 세 가지입니다. no sync 명령어를 쓰거나, BGP를 IGP에 재분배하거나, 컨페더레이션을 사용하는 것입니다.

 

첫째, no sync 명령어입니다. 연속적인 라우터에 모두 BGP가 설정되어 있다면 동기 법칙 자체가 필요 없습니다. 모든 라우터가 BGP로 동작하므로 IGP가 몰라도 라우팅이 가능하기 때문입니다. 이런 경우 no synchronization 명령으로 동기 법칙을 적용하지 않습니다. 기본적으로 최근 라우터 이미지에는 no sync가 적용되어 있습니다.

// 동기 법칙 확인하도록 설정
R3(config)#router bgp 234
R3(config-router)#synchronization

R3#sh ip bgp 1.1.1.0
BGP routing table entry for 1.1.1.0/24, version 4
Paths: (1 available, best #1, table default)
Not advertised to any peer
Refresh Epoch 1
1
1.1.12.1 (metric 307200) from 1.1.2.2 (1.1.2.2)
Origin IGP, metric 0, localpref 100, valid, internal, not synchronized, best
rx pathid: 0, tx pathid: 0x0

R3(config)#router bgp 234
R3(config-router)#no sync

R3(config-router)#do sh ip bgp 1.1.1.0
BGP routing table entry for 1.1.1.0/24, version 4
Paths: (1 available, best #1, table default)
Not advertised to any peer
Refresh Epoch 1
1
1.1.12.1 (metric 307200) from 1.1.2.2 (1.1.2.2)
Origin IGP, metric 0, localpref 100, valid, internal, best
rx pathid: 0, tx pathid: 0x0

동기를 켰을 때 보이던 not synchronized 표시가 no sync 이후 사라진 것을 확인할 수 있습니다.

 

둘째, BGP를 IGP에게 재분배하는 방법입니다. 외부 AS와 연결되는 경계 라우터에서 BGP를 IGP에 재분배합니다.

// 재분배하기
R2(config)#router eigrp 1
R2(config-router)#redistribute bgp 234 metric 1000 1 1 1 1500

다만 위험이 따릅니다. BGP 네트워크의 수가 많은데 그것을 IGP로 재분배하면 라우터가 다운될 수 있습니다.

// 재분배 제거
R2(config)#router eigrp 1
R2(config-router)#no redistribute bgp 234

// 이후 테스트를 위해서 234의 bgp 제거
R2(config)#no router bgp 234
R3(config)#no router bgp 234
R4(config)#no router bgp 234

 

셋째, 컨페더레이션입니다. 하나의 AS를 서브 AS(sub-AS)로 분할하고, 분할된 서브 AS들을 eBGP로 연결합니다. 그러면 iBGP 정보를 IGP가 알아야 하는 동기 법칙이 필요 없어지고, eBGP 간에 사용할 수 있는 라우팅 정책들도 적용할 수 있습니다.

컨페더레이션 eBGP는 일반 eBGP와 몇 가지가 다릅니다. 컨페더레이션 외부에서 광고받은 네트워크의 넥스트 홉은 전체 컨페더레이션을 통과하는 동안 바뀌지 않고, MED(메트릭)도 서브 AS 간에 변경되지 않으며, 로컬 프레퍼런스도 변경되지 않습니다. 그리고 외부로 광고될 때는 서브 AS 번호가 모두 제거됩니다.

// 컨페더레이션 설정
// BGP 번호는 사설 AS 번호 아무거나 사용
R2(config)#router bgp 65002
R2(config-router)#bgp router-id 1.1.2.2

// 컨페더레이션 설정할 원래 BGP 번호 지정
R2(config-router)#bgp confederation identifier 234

// 컨페더레이션 네이버(인접 라우터) 번호 지정
R2(config-router)#bgp confederation peers 65003

// 외부 AS와 연결되는 부분은 동일함
R2(config-router)#neig 1.1.12.1 remote-as 1

// 내부 AS와 연결되는 부분은 동일한데, eBGP인 것처럼 작동하므로 ebgp-multihop
// 설정이 추가됨
// 네이버 AS 번호는 서브 AS 번호로 지정
// ebgp-multihop은 양쪽 네이버 라우터를 포함해서 중간에 존재하는 라우터 수를 지정
R2(config-router)#neig 1.1.3.3 remote-as 65003
R2(config-router)#nei 1.1.3.3 update-source lo0
R2(config-router)#nei 1.1.3.3 ebgp-multihop 2
R2(config-router)#network 1.1.2.0 mask 255.255.255.0

R3(config)#router bgp 65003
R3(config-router)#bgp router-id 1.1.3.3
R3(config-router)#bgp confederation identifier 234
R3(config-router)#bgp confederation peers 65002 65004
R3(config-router)#nei 1.1.2.2 remote-as 65002
R3(config-router)#nei 1.1.2.2 update-source lo0
R3(config-router)#nei 1.1.2.2 ebgp-multihop 2
R3(config-router)#nei 1.1.4.4 remote-as 65004
R3(config-router)#nei 1.1.4.4 upd lo0
R3(config-router)#nei 1.1.4.4 ebgp 2
R3(config-router)#net 1.1.3.0 mask 255.255.255.0

R4(config)#router bgp 65004
R4(config-router)#bgp router-id 1.1.4.4
R4(config-router)#bgp confederation identifier 234
R4(config-router)#bgp confederation peers 65003
R4(config-router)#nei 1.1.3.3 remote-as 65003
R4(config-router)#nei 1.1.3.3 up lo0
R4(config-router)#nei 1.1.3.3 ebgp 2
R4(config-router)#net 1.1.4.0 mask 255.255.255.0
// 다음 테스트 위해서 설정 제거
R2(config)#no router eigrp 1
R2(config)#no router bgp 65002

R3(config)#no router eigrp 1
R3(config)#no router bgp 65003

R4(config)#no router eigrp 1
R4(config)#no router bgp 65004

광고하려는 마스크와 라우팅 테이블이 정확히 일치해야 한다

특정 네트워크를 BGP에 포함시킬 때는, mask 다음에 지정하는 서브넷 마스크와 정확히 일치하는 네트워크가 라우팅 테이블에 존재해야 합니다. 루프백 인터페이스는 기본적으로 32비트로 광고되므로, 24비트로 전송해야 한다면 손을 봐야 합니다.

// R234에 OSPF 설정
R2(config)#router ospf 1
R2(config-router)#router-id  1.1.2.2
R2(config-router)#net 1.1.2.2 0.0.0.0 area 0
R2(config-router)#net 1.1.12.2 0.0.0.0 area 0
R2(config-router)#net 1.1.23.2 0.0.0.0 area 0
R2(config-router)#passive-interface e0/0.12

R3(config)#router ospf 1
R3(config-router)#router-id 1.1.3.3
R3(config-router)#net 1.1.3.3 0.0.0.0 area 0
R3(config-router)#net 1.1.23.3 0.0.0.0 area 0
R3(config-router)#net 1.1.34.3 0.0.0.0 area 0

R4(config)#router ospf 1
R4(config-router)#router-id 1.1.4.4
R4(config-router)#net 1.1.4.4 0.0.0.0 area 0
R4(config-router)#net 1.1.34.4 0.0.0.0 area 0

R2(config)#router bgp 234
R2(config-router)#bgp router-id 1.1.2.2
R2(config-router)#nei 1.1.12.1 remote-as 1
R2(config-router)#net 1.1.2.0 mask 255.255.255.0
R2(config-router)#net 1.1.3.0 mask 255.255.255.0
R2(config-router)#net 1.1.4.0 mask 255.255.255.0

R3(config)#int lo0
R3(config-if)#ip ospf network point-to-point

R4(config)#int lo0
R4(config-if)#ip ospf network point-to-point

마지막 두 설정이 핵심입니다. 루프백을 포인트 투 포인트 네트워크로 지정해야 24비트로 광고되고, 그래야 net 1.1.3.0 mask 255.255.255.0이 라우팅 테이블의 항목과 일치합니다.

넥스트 홉 — 광고받은 주소가 라우팅 가능해야 한다

넥스트 홉은 목적지 네트워크로 가기 위한 인접 라우터입니다. IGP의 넥스트 홉은 물리적으로 접속된 인접 라우터의 인터페이스 주소이지만, BGP는 다릅니다.

 

멀티액세스 네트워크에서는 처음 라우팅 정보를 보낸 라우터가 넥스트 홉이 되고 이후 변경되지 않습니다. 다른 AS로 넘어갈 때는 그 AS와 연결되는 라우터가 넥스트 홉이 됩니다. 그리고 BGP는 넥스트 홉의 주소로 네이버를 설정할 때 사용한 IP를 씁니다.

문제는 여기서 생깁니다. BGP는 광고받은 네트워크의 넥스트 홉 주소가 라우팅 가능한 것이어야 사용할 수 있습니다. AS 내부의 라우터가 DMZ 주소를 모르면 그 경로를 쓸 수 없습니다. 해결 방법은 두 가지입니다.

 

첫째, DMZ를 IGP에 포함시킵니다.

R2(config)#router ospf 1
R2(config-router)#net 1.1.12.2 0.0.0.0 area 0
R2(config-router)#passive-interface e0/0.12

// 설정 제거
R2(config-router)#no net 1.1.12.2 0.0.0.0 area 0
R2(config-router)#no passive-interface e0/0.12

passive-interface를 함께 쓰는 이유는, 네트워크는 IGP에 알리되 외부 AS 쪽으로 IGP 광고가 새어 나가지는 않게 하기 위해서입니다.

 

둘째, next-hop-self 옵션을 사용합니다. 네이버를 설정할 때 넥스트 홉 IP 주소를 자기 자신으로 바꾸는 방법입니다.

R2(config)#router bgp 234
R2(config-router)#nei 1.1.3.3 next-hop-self
R2(config-router)#nei 1.1.4.4 next-hop-self

스플릿 호라이즌 — iBGP로 받은 것은 iBGP로 못 보낸다

BGP도 거리 벡터 라우팅 프로토콜이므로 스플릿 호라이즌 규칙의 적용을 받습니다. 구체적으로는 iBGP로 광고받은 네트워크는 iBGP로 광고하지 못합니다. 그래서 AS 안의 라우터 셋이 일렬로 늘어서 있으면 양 끝이 서로의 정보를 받지 못합니다.

// router 234에
R2(config)#no router bgp 234
R3(config)#no router bgp 234
R4(config)#no router bgp 234

해결 방법은 완전 메시, 루트 리플렉터, 컨페더레이션 세 가지입니다.

 

완전 메시는 모든 iBGP 라우터 간에 네이버를 설정하는 방법입니다. 소규모 네트워크에서 쓰면 편리하지만, 라우팅 테이블이 커지는 문제가 있을 수 있습니다.

R2(config)#router bgp 234
R2(config-router)#nei 1.1.4.4 remote 234
R2(config-router)#nei 1.1.4.4 up lo0
R2(config-router)#nei 1.1.4.4 next-hop-self

R4(config)#router bgp 234
R4(config-router)#nei 1.1.2.2 remote 234
R4(config-router)#nei 1.1.2.2 up lo0

// 이후 내용을 위해 R2-4 간에 네이버 해제
R2(config-router)#no nei 1.1.4.4
R4(config-router)#no nei 1.1.2.2

 

루트 리플렉터는 특정 라우터를 루트 리플렉터로 만들고 루트 리플렉터 클라이언트를 지정하는 방법입니다. 지정된 클라이언트로는 스플릿 호라이즌을 적용하지 않습니다.

R3(config)#router bgp 234
R3(config-router)#nei 1.1.2.2 route-reflector-client
R3(config-router)#nei 1.1.4.4 route-reflector-client

관련 용어를 한 번에 정리하면 다음과 같습니다.

  • 루트 리플렉터 — BGP 스플릿 호라이즌 규칙을 면제받은 라우터입니다. 루트 리플렉터는 다른 루트 리플렉터의 클라이언트가 될 수 있습니다.
  • 루트 리플렉터 클라이언트route-reflector-client 명령어로 지정된 라우터입니다.
  • 비 클라이언트(nonclient) — 루트 리플렉터와 네이버이지만 클라이언트는 아닌 라우터입니다.
  • 클러스터(cluster) — 루트 리플렉터와 그 클라이언트의 집합입니다.
  • 클러스터 ID — 루트 리플렉터의 라우터 ID를 클러스터 ID로 사용합니다. 여러 개의 루트 리플렉터와 클라이언트를 하나의 클러스터로 묶으려면 bgp cluster-id ?로 값을 직접 지정합니다.
  • 클러스터 리스트 — 특정 경로가 통과해 온 클러스터의 ID 목록입니다. 클러스터 외부에서 받은 라우팅 정보에 자신이 속한 클러스터의 ID가 있으면 라우팅 루프가 발생한 것이므로 무시합니다.
  • 오리지네이터 ID — 루트 리플렉터가 만드는 옵셔널 논트랜지티브 속성으로, 현재의 AS에서 특정 경로를 BGP에 포함시킨 라우터의 ID입니다. 해당 AS 내부에서만 사용되며, 광고받은 경로의 오리지네이터 ID가 자기 자신이면 무시합니다.

루프 방지는 두 겹으로 이루어집니다. 클러스터 리스트는 AS 내부에서, 오리지네이터 ID는 클러스터 내부에서 루프를 방지합니다.

루트 리플렉터의 동작 방식은 정보를 어디서 받았느냐에 따라 갈립니다. eBGP 네이버에게 수신한 라우팅 정보는 모든 클라이언트와 비 클라이언트에게 전송합니다. 비 클라이언트에게서 수신한 라우팅 정보는 모든 클라이언트에게 전송하지만 비 클라이언트에게는 전송하지 않습니다. 클라이언트에게서 수신한 정보는 모든 클라이언트와 비 클라이언트에게 전송합니다. 설정할 때는 물리적으로 연결된 라우터를 클라이언트로 지정해야 합니다.

 

컨페더레이션으로도 스플릿 호라이즌을 해결할 수 있습니다. 서브 AS 간은 eBGP로 동작하므로 iBGP의 스플릿 호라이즌이 적용되지 않기 때문입니다.

// 기존 bgp 234 설정 삭제
// 2개의 서브 AS로 설정
R2(config)#router bgp 65023
R2(config-router)#bgp router-id 1.1.2.2
R2(config-router)#bgp confederation identifier 234
R2(config-router)#nei 1.1.12.1 remote 1
R2(config-router)#nei 1.1.3.3 remote-as 65023
R2(config-router)#nei 1.1.3.3 update-source lo0
R2(config-router)#nei 1.1.3.3 next-hop-self
R2(config-router)#net 1.1.2.0 mask 255.255.255.0

R3(config)#router bgp 65023
R3(config-router)#bgp router-id 1.1.3.3
R3(config-router)#bgp confederation identifier 234
R3(config-router)#bgp confederation peers 65004
R3(config-router)#nei 1.1.2.2 remote 65023
R3(config-router)#nei 1.1.2.2 up lo0
R3(config-router)#nei 1.1.4.4 remote 65004
R3(config-router)#nei 1.1.4.4 up lo0
R3(config-router)#nei 1.1.4.4 ebgp-multihop 2
R3(config-router)#net 1.1.3.0 mask 255.255.255.0

R4(config)#no router bgp 234
R4(config)#router bgp 65004
R4(config-router)#bgp router-id 1.1.4.4
R4(config-router)#bgp confederation identifier 234
R4(config-router)#bgp confederation peers 65023
R4(config-router)#nei 1.1.3.3 remote 65023
R4(config-router)#nei 1.1.3.3 up lo0
R4(config-router)#nei 1.1.3.3 ebgp-multihop 2
R4(config-router)#net 1.1.4.0 mask 255.255.255.0

속성은 메트릭을 대신해 순서대로 비교된다

IGP에서 메트릭에 해당하는 것이 BGP에서는 속성입니다. 다만 BGP는 모든 속성 값을 다 알아야 하는 것이 아니고, 여러 속성을 종합해 하나의 숫자로 계산하지도 않습니다. 각 속성을 우선순위별로 차례차례 비교합니다.

 

속성은 지원 의무와 전달 의무에 따라 네 가지로 분류됩니다.

  • 웰논 멘디터리(well known mandatory) — 모든 BGP 라우터가 지원해야 하고, 반드시 포함되어야 하는 정보
  • 웰논 디스크래셔너리(well known discretionary) — 모든 BGP 라우터가 지원하지만, 반드시 포함될 필요는 없는 정보
  • 옵셔널 트랜지티브(optional transitive) — 모든 BGP 라우터가 지원할 필요는 없지만, 반드시 넘겨주어야 하는 정보
  • 옵셔널 논트랜지티브(optional nontransitive) — 모든 BGP 라우터가 지원할 필요도 없고, 전송할 필요도 없는 정보

오리진 — 어떻게 BGP에 들어왔는가

오리진은 해당 네트워크를 BGP에 포함시킨 방법을 나타내는 웰논 멘디터리 속성으로, IGP·EGP·incomplete 세 값을 가집니다. sh ip bgp의 path 부분에서 i, e, ?로 확인합니다.

 

IGP(i)network 명령어를 통해 포함시킨 네트워크입니다. EGP(e)는 BGP 이전의 프로토콜인 EGP를 사용해 포함시킨 것으로, 코드만 존재하고 사용하지 않습니다. incomplete(?)는 IGP나 EGP가 아닌 방법, 곧 재분배를 통해 BGP에 포함된 네트워크입니다.

// 재분배 네트워크 포함시켜보기
R1(config)#int lo1
R1(config-if)#ip add 201.1.0.1 255.255.255.0
R1(config-if)#exit
// 자신의 네트워크 중 특정 네트워크만 사용하기 위해 route-map 이용
// route-map 이름을 Lo1로 지정하고 lo1 인터페이스를 포함시킴
R1(config)#route-map Lo1
R1(config-route-map)#match int lo 1
R1(config-route-map)#exit
// bgp 설정에서 직접 연결된 네트워크 중 루트맵에 해당하는 네트워크만 재분배
R1(config)#router bgp 1
R1(config-router)#redistribute connected route-map Lo1
// 확인
R1#sh ip bgp
Network          Next Hop            Metric LocPrf Weight Path
*>  201.1.0.0        0.0.0.0                  0         32768 ?

재분배로 들어왔으므로 ?가 붙었습니다.

 

오리진은 경로 결정 기준으로도 쓰입니다. 다른 조건이 같을 때 우선순위는 IGP, EGP, incomplete 순입니다. 그리고 축약 경로의 오리진은 축약 전 상세 네트워크의 오리진 중 우선순위가 높은 것을 따릅니다.

// 축약해보기
// lo1과 축약하기 위해 201.1.1.0 네트워크로 지정
R1(config)#int lo2
R1(config-if)#ip add 201.1.1.1 255.255.255.0
// 축약
R1(config)#router bgp 1
R1(config-router)#net 201.1.1.0
R1(config-router)#aggregate-address 201.1.0.0 255.255.254.0
// 확인
R1#sh ip bgp
Network          Next Hop            Metric LocPrf Weight Path
*>  201.1.0.0        0.0.0.0                  0         32768 ?
*>  201.1.0.0/23     0.0.0.0                            32768 i
*>  201.1.1.0        0.0.0.0                  0         32768 i

?인 경로와 i인 경로를 축약했더니 축약 경로의 오리진이 i가 되었습니다.

// 설정 제거
R1(config)#router bgp 1
R1(config-router)#no aggregate-address 201.1.0.0 255.255.254.0

AS 경로 — 지나온 AS를 기록해 루프를 막는다

AS 경로는 해당 네트워크까지 가는 경로상에 있는 AS 번호들을 기록해 놓은 속성으로, AS 세트와 AS 시퀀스 두 형태가 있습니다.

AS 시퀀스는 해당 네트워크가 소속된 AS가 가장 오른쪽에 기록되고, 현재 AS와 가장 인접한 AS가 왼쪽에 기록됩니다. 동일한 AS 내에서는 AS 번호가 추가되지 않습니다.

// AS 시퀀스 확인
R4#sh ip bgp
Network          Next Hop            Metric LocPrf Weight Path
*>i 2.2.1.0/24       2.2.13.1                 0    100      0 1 i
*>i 2.2.2.0/24       2.2.13.1                 0    100      0 1 2 i
r>i 2.2.3.0/24       2.2.3.3                  0    100      0 i
*>  2.2.4.0/24       0.0.0.0                  0         32768 i
*>i 201.1.0.0        2.2.13.1                 0    100      0 1 ?
*>i 201.1.1.0        2.2.13.1                 0    100      0 1 i

AS 세트는 AS 번호를 순서 없이 기록한 것으로, 일반적으로 축약 네트워크에 사용됩니다.

// 축약해서 AS 세트 확인해보기
R2(config)#int lo1
R2(config-if)#ip add 201.1.2.1 255.255.255.0
R2(config-if)#ip add 201.1.3.1 255.255.255.0 sec
R2(config-if)#exit

R2(config)#router bgp 2
R2(config-router)#net 201.1.2.0
R2(config-router)#net 201.1.3.0

R3(config)#router bgp 34
R3(config-router)#aggregate-address 201.1.0.0 255.255.252.0 as-set
// 확인
R4#sh ip bgp
*>i 201.1.0.0/22     2.2.3.3                  0    100      0 {1,2} ?

중괄호로 묶인 {1,2}가 AS 세트입니다.

 

AS 경로는 라우팅 루프 방지에 사용됩니다. eBGP 네이버에게서 라우팅 정보를 수신한 BGP 라우터는 AS 경로를 확인하고, 자신의 AS 번호가 포함되어 있으면 루프가 발생한 것이므로 폐기합니다. 그리고 다른 조건이 같다면 AS 경로가 짧은 경로가 선택됩니다.

넥스트 홉

웰논 멘디터리 속성으로, 해당 네트워크로 가는 넥스트 홉을 표시합니다. 자신이 BGP에 포함시킨 네트워크는 넥스트 홉이 0.0.0.0으로 표시됩니다.

MED — 들어오는 트래픽의 입구를 정한다

MED는 인접 AS에서 입력되는 트래픽의 입력 경로를 지정할 때 사용하는 속성으로, BGP의 메트릭이라고도 합니다. 다른 조건이 같다면 MED 값이 낮은 것을 선택합니다.

 

MED가 결정되는 방식은 iBGP와 eBGP가 다릅니다. iBGP 간에는 MED 값이 변경 없이 전송됩니다. eBGP 간에는 iBGP에게서 수신한 MED 값은 무시하고, 자신이 BGP에 포함시킨 네트워크의 MED 값은 전송하며, 라우팅 테이블의 메트릭 값을 사용합니다.

이 속성을 어떻게 쓰느냐에 따라 두 가지 라우팅 전략이 나옵니다.

 

최적 출구 라우팅은 ISP가 MED 값을 사용해 다른 AS를 위한 최선의 라우팅을 한 후에 트래픽을 넘기는 것입니다. 외부 AS와 연결되는 모든 BGP 라우터에서 특정 네트워크나 전체 네트워크를 BGP에 포함시키면 됩니다. 내부 링크 사용을 최소화하면서 AS 간의 고속 링크를 활용할 수 있는 설정입니다.

 

근접 출구 라우팅은 eBGP로 MED 값을 전송할 때 iBGP에게서 수신한 MED 값을 무시하는 방식입니다. 수신 측에서는 MED 값이 비어 있으면 0으로 간주합니다. 내부 링크가 고속이고 AS 간 링크들의 속도가 비슷할 때 활용할 수 있는 설정입니다.

로컬 프레퍼런스 — 나가는 경로를 정한다

MED가 들어오는 트래픽을 다룬다면, 로컬 프레퍼런스는 AS 외부로 나가는 경로를 결정할 때 사용합니다. iBGP 간에만 전달되고, 디폴트 값은 100이며, 높은 값을 가지는 경로가 우선됩니다. eBGP에게 광고를 받을 때 해당 경로에 대해 값을 적용합니다.

// 루트맵을 활용한 로컬 프레퍼런스 값 설정
R3(config)#route-map LP
R3(config-route-map)#set local-preference 1000
R3(config-route-map)#exit

R3(config)#router bgp 34
R3(config-router)#nei 2.2.13.1 route-map LP in

// 로컬 프레퍼런스 값 적용하기 위해 bgp 초기화
R3(config)#do clear ip bgp * soft
// 확인
R3(config)#do sh ip bgp 2.2.2.0
BGP routing table entry for 2.2.2.0/24, version 9
Paths: (1 available, best #1, table default)
Advertised to update-groups:
2
Refresh Epoch 3
12
2.2.13.1 from 2.2.13.1 (2.2.1.1)
Origin IGP, metric 11, localpref 1000, valid, external, best
rx pathid: 0, tx pathid: 0x0

localpref가 기본값 100 대신 1000으로 바뀐 것을 확인할 수 있습니다.

축약과 관련된 속성들

아토믹 애그리기트는 축약으로 인해 원래 가지고 있던 AS 경로가 없어졌을 수 있음을 표시하는 속성입니다.

// 확인
R1(config)#int lo1
R1(config-if)#ip add 201.1.16.1 255.255.255.0
R1(config-if)#ip add 201.1.17.1 255.255.255.0 sec
R1(config-if)#ip add 201.1.18.1 255.255.255.0 sec
R1(config-if)#ip add 201.1.19.1 255.255.255.0 sec

R1(config-if)#router bgp 12
R1(config-router)#net 201.1.16.0
R1(config-router)#net 201.1.17.0
R1(config-router)#net 201.1.18.0
R1(config-router)#net 201.1.19.0

// 축약
R3(config)#router bgp 34
R3(config-router)#aggregate-address 201.1.16.0 255.255.252.0

애그리게이터는 축약된 네트워크에 표시되는 속성으로, 축약된 AS 번호와 축약한 라우터 ID를 표시합니다.

나머지 속성들

커뮤니티는 옵셔널 트랜지티브 속성으로, 네트워크를 그룹으로 묶어서 설정할 때 사용합니다. AS 내에서 네트워크들을 커뮤니티로 묶으며, 커뮤니티 번호가 미리 정해진 커뮤니티들을 웰논 커뮤니티라고 합니다.

 

오리지네이터 ID는 옵셔널 논트랜지티브 속성으로, 루트 리플렉터가 만듭니다. 특정 경로를 BGP에 포함시킨 라우터의 라우터 ID입니다.

 

클러스터 리스트도 옵셔널 논트랜지티브 속성으로, 통과해 온 클러스터의 ID를 나열한 것입니다. 루트 리플렉터가 라우팅 루프를 방지하기 위해 사용합니다.

 

웨이트는 엄밀히 말하면 BGP 속성이 아니라 시스코 라우터에서 경로 결정을 할 때 사용하는 값입니다. 웨이트 값이 높은 경로가 우선되며, 로컬 프레퍼런스처럼 외부로 나가는 경로를 결정할 때 사용합니다. 다른 BGP 네이버에게는 영향을 주지 않습니다. 기본 웨이트 값은 자신이 직접 BGP에 포함시킨 네트워크가 32768이고, 다른 라우터에게서 받은 네트워크는 0입니다.

경로 결정은 열세 단계를 순서대로 밟는다

앞서 본 속성들이 실제로 적용되는 순서입니다. 위에서부터 차례로 비교해, 승부가 나면 거기서 멈춥니다.

  1. 웨이트가 가장 큰 경로
  2. 로컬 프레퍼런스가 가장 큰 경로
  3. 현재 라우터가 BGP에 포함시킨 경로
  4. AS 경로 길이가 짧은 경로
  5. 오리진 코드 비교(i, e, ?)
  6. MED가 가장 작은 경로
  7. eBGP로 받은 경로
  8. BGP 넥스트 홉까지 IGP 메트릭이 가장 작은 경로
  9. 부하 분산이 적용된 경우, 모두 저장
  10. 모두 외부 경로일 경우, 먼저 광고받은 경로
  11. 라우터 ID가 가장 낮은 네이버에게서 받은 경로
  12. 루트 리플렉터를 사용하는 경우, 클러스터 리스트가 가장 짧은 경로
  13. BGP 설정 시 neighbor 명령어에서 사용한 IP 주소가 가장 낮은 경로
반응형