BGP(Border Gateway Rrotocol) 라우터는 일반적으로 동일한 목적지로 가는 여러 경로를 수신하고, IGP와 마찬가지로 각 목적지로 가는 쵲거의 경로를 선택해야 한다.
IGP는 Metric이 가장 낮은 경로를 선택한다. (OSPF는 가장 낮은 비용의 경로를 선택) 그러나 BGP는 여러 속성을 기반으로 최적의 경로를 선택한다.
Priority
Attribute
분류
1
Weight
well-known mandatory
2
Local Preference
3
Originate
4
AS path length
5
Origin code
well-known mandatory
6
MED
optional non-transitive
7
eBGP path over iBGP path
8
Shortest IGP path to BGP next hop
9
Oldest path
10
Router ID
11
Neighbor IP address
1. Weight
가중치가 가장 높은 경로를 우선한다.
해당 라우터에만 적용되는 값이며 시스코에서만 사용된다.
BGP 라우터 간에는 교환되지 않는다.
로컬 프레퍼런스와 같이 외부로 가는 경로를 결정할 때 사용된다.
로컬 프레퍼런스는 다른 iBGP 네이버에게 전송되어 경로 결정에 영햐을 주는 반면, 웨이트는 다른 BGP 네이버에게 영향을 주지 않는다.
2. Local Preference (well-known discretionary)
AS 외부로 나가는 아웃바운드 경로를 결정할 때 사용.(인접 AS에서 들어오는 경로를 조정할 때 사용하는 MED와 반대)
AS 내의 iBGP 피어간에만 전달된다.
eBGP 라우터에게는 보내지 않는다.
높은 값이 우선하며, 기본값은 100이다.
3. Originate
로컬 라우터에서 시작된 경로를 우선한다. 즉, 다른 peer 라우터에 의해 BGP 테이블에 설치한 경로보다 로컬 라우터가 직접 포함한 경로(network)를 선호함.
BGP netowrk 명령어, redistribution, aggregation(축약)을 통해 BGP 테이블에서 경로를 가져올 수 있다.
IGP 처럼 네트워크 명령어 또는 재분배로 광고할 수 있지만 BGP에서 network 명령어는 동작 방식이 다르다. IGP에서는 network 명령을 사용하여 network 범위에 속하는 모든 인터페이스에서 IGP를 활성화 한다. BGP에서는 인터페이스와 관계가 없고, 라우팅 테이블만 확인한다. (network 명령과 일치하는 네트워크를 찾으면 BGP 테이블에 설치)
4. AS Path
AS 경로는 해당 네트워크까지 가는 경로상에 있는 AS의 번호들을 기록해 놓은 속성.
AS_SET와 AS_SEQUENCE 가 있다.
AS_SEQUENCE는 해당 네트워크까지 소속된 AS 번호가 가장 오른쪽에 기록되고, 현재의 AS와 인접한 AS 번호가 가장 왼쪽에 기록된다.
5. Origin Code
특정 네트워크를 BGP에 포함시킨 방법을 표시한다.
IGP(i),EGP(e), incomplete(?) 세 가지의 오리진 코드가 있다. - IGP(i) : network 명령어를 사용하여 BGP에 포함된 네트워크를 의미하며, 직접 광고했음을 나타낸다. - incomplete(?): network 명령어가 아닌 방법으로 BGP에 재분배된 네트워크를 의미한다.
축약된 경로의 오리진은 축약전의 상세 네트워크 중에서 가장 높은 순위의 오리진 코드를 갖는다.
AS 간에 교환되며, 이틑 통해 인접 AS에서 현재의 AS로 진입하기 위해 어떤 경로를 사용해야 하는지 알 수 있다.
MED는 인접 라우터에게 자신의 AS에 어떻게 들어와야 하는지 인입 경로를 광고할 때 사용.
MED 값이 가장 낮은 경로를 선호한다.
7. eBGP path voer iBGP path
특정 경로에대해서 iBGP와 eBGP 두 개의 경로를 아는 경우. iBGP 경로보다 eBGP 경로를 선호한다.
Administrative Distance 와 혼동하면 안된다. BGP 라우터는 먼저 BGP 테이블에서 최적 경로를 파악하고, 그 다음 라우팅 테이블에 저장을 할지 판단할 때 AD를 확인한다. (동일 경로에 대해서 정적 또는 IGP 경로가 있는 경우) 즉, iBGP 경로와 eBGP 경로는 BGP 테이블에서 이미 결정되므로 AD 값은 비교하지 않는다.
BGP는 디스턴스 벡터 라우팅 프로토콜로 Routing Loop을 방지하기 위한 메커니즘으로 Split Horizion Rule이 적용되며, 룰은 다음과 같다 'iBGP 라우터는 iBGP를 통해 학습된 경로를 다른 iBGP 피어에게 재광고하지 않는다.' 이처럼 동작하는 이유는 서로 다른 AS 간에 eBGP를 사용할 때 BGP는 라우팅 루프를 방지하기 위해 AS_Path 속성을 사용한다. 그러나 AS 내에서는 AS 번호가 변경되지 않으므로 이러한 루프 방지 메커니즘을 사용할 수 없기 때문이다.
BGP 스플릿 호라이즌 룰을 해결하는 방법.
Full Mesh 설정
Route Reflector 설정
Confederation 설정
예시 1)
스플릿 호라이즌이 동작하지 않으면 R1은 자신이 생성한 iBGP 업데이트 메시지를 수신하게 된다.
split horizon이 적용되면, R2는 R1에서 학습한 iBGP 네트워크 정보를 R3으로 광고 하지 않는다.
즉, AS 내의 모든 iBGP 라우터가 네트워크 정보를 학습하려면 AS 내 모든 iBGP 라우터가 다른 모든 iBGP 라우터와 이웃이 되어야 한다. Full Mesh iBGP 피어링 설정이 되어야 하며, 대규모 AS에서는 관리가 어려워지고 리소스가 많이 소모될 수 있기 때문에 BGP Route Reflector를 사용할 수 있다.
예시 2)
R2#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 1.1.1.1/32 1.1.12.1 0 0 1 i
R3#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*>i 1.1.1.1/32 2.2.2.2 0 100 0 1 i
R4#sh ip bgp
R4의 BGP 테이블에는 1.1.1.1/32 네트워크가 없다.
R3이 iBGP 네이버인 R2에게서 수신한 1.1.1.1/32 네트워크를 BGP 스플릿 호라이즌 룰 때문에 또 다른
iBGP 네이버인 R4에게 전송하지 못하기 때문이다.
구성 예2)의 R2에서 R3 외에 R4에 대한 네이버 설정을 추가한다. R2는 1.1.1.1 네트워크에 대한 라우팅 정보를 R3, R4에게 동시에 전송한다. full mesh 설정 방법은 iBGP로 수신한 라우팅 정보를 iBGP로 전송할 필요가 없기 때문에 BGP 스플릿 호라이즌 문제가 해결된다.
R2#sh run | s r b
router bgp 234
bgp router-id 2.2.2.2
network 2.2.2.2 mask 255.255.255.255
neighbor 1.1.12.1 remote-as 1
neighbor 3.3.3.3 remote-as 234
neighbor 3.3.3.3 update-source Loopback0
neighbor 3.3.3.3 next-hop-self
neighbor 4.4.4.4 remote-as 243
neighbor 4.4.4.4 update-source Loopback0
neighbor 4.4.4.4 next-hop-self
R4#sh run | s r b
router bgp 234
bgp router-id 4.4.4.4
network 4.4.4.4 mask 255.255.255.255
neighbor 2.2.2.2 remote-as 234
neighbor 2.2.2.2 update-source Loopback0
neighbor 3.3.3.3 remote-as 234
neighbor 3.3.3.3 update-source Loopback0
2. Route Reflector
특정 라우터가 루트 리플렉터가 되면 iBGP 네이버 중에서 Route Reflector Client에 대해서는 스플릿 호라이즌 룰을 적용하지 않는다.
루트 리플렉터 라우터는 iBGP로 받은 정보를 다른 iBGP로 광고할 수 있다.
Full Mesh로 설정해야 하는 번거로움을 피할 수 있다.
루트 리플렉터 라우터는 다른 루트 리플렉터 라우터의 클라이언트가 될 수 있다.
R2#sh run | s r o
router ospf 234
network 1.1.23.0 0.0.0.255 area 0
network 2.2.2.0 0.0.0.255 area 0
R2#sh run | s r b
router bgp 234
bgp router-id 2.2.2.2
network 2.2.2.2 mask 255.255.255.255
neighbor 1.1.12.1 remote-as 1
neighbor 3.3.3.3 remote-as 234
neighbor 3.3.3.3 update-source Loopback0
neighbor 3.3.3.3 next-hop-self
no neighbor 4.4.4.4 ◀
R3#sh run | s r o
router ospf 234
network 1.1.23.0 0.0.0.255 area 0
network 1.1.34.0 0.0.0.255 area 0
network 3.3.3.0 0.0.0.255 area 0
R3#sh run | s r b
router bgp 234
bgp router-id 3.3.3.3
network 3.3.3.3 mask 255.255.255.255
neighbor 2.2.2.2 remote-as 234
neighbor 2.2.2.2 update-source Loopback0
neighbor 2.2.2.2 route-reflector-client ◀
neighbor 4.4.4.4 remote-as 234
neighbor 4.4.4.4 update-source Loopback0
neighbor 4.4.4.4 route-reflector-client ◀
R4#sh run | s r o
router ospf 234
network 1.1.34.0 0.0.0.255 area 0
network 4.4.4.0 0.0.0.255 area 0
R4#sh run | s r b
router bgp 234
bgp router-id 4.4.4.4
network 4.4.4.4 mask 255.255.255.255
neighbor 3.3.3.3 remote-as 234
neighbor 3.3.3.3 update-source Loopback0
no neighbor 2.2.2.2 ◀
3. Confederation 설정
컨페더레이션 사용시 iBGP 네이버가 eBGP 네이버로 변경되기 때문에 'iBGP로 받은 네트워크는 iBGP로 광고하지 못한다'는 스플릿 호라이즌 룰 자체가 적용되지 않는다.
-------------- SW-1 --------------
# sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 1.1.1.1/32 0.0.0.0 0 32768 i
*> 2.2.2.2/32 1.1.12.2 0 0 234 i
*> 3.3.3.3/32 1.1.12.2 0 234 i
*> 4.4.4.4/32 1.1.12.2 0 234 i
# sh ip rou bgp
B 2.2.2.2 [20/0] via 1.1.12.2, 00:06:14
B 3.3.3.3 [20/0] via 1.1.12.2, 00:03:30
B 4.4.4.4 [20/0] via 1.1.12.2, 00:03:00
-------------- SW-2 --------------
# sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 1.1.1.1/32 1.1.12.1 0 0 1 i
*> 2.2.2.2/32 0.0.0.0 0 32768 i
r>i 3.3.3.3/32 3.3.3.3 0 100 0 i
r>i 4.4.4.4/32 4.4.4.4 0 100 0 i
# sh ip rou bgp
B 1.1.1.1/32 [20/0] via 1.1.12.1, 00:06:14
-------------- SW-3 --------------
# sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*>i 1.1.1.1/32 1.1.12.1 0 100 0 1 i
r>i 2.2.2.2/32 2.2.2.2 0 100 0 i
*> 3.3.3.3/32 0.0.0.0 0 32768 i
r>i 4.4.4.4/32 4.4.4.4 0 100 0 i
# sh ip rou bgp
B 1.1.1.1/32 [200/0] via 1.1.12.1, 00:04:45
-------------- SW-4 --------------
# sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*>i 1.1.1.1/32 1.1.12.1 0 100 0 1 i
r>i 2.2.2.2/32 2.2.2.2 0 100 0 i
r>i 3.3.3.3/32 3.3.3.3 0 100 0 i
*> 4.4.4.4/32 0.0.0.0 0 32768 i
# sh ip rou bgp
B 1.1.1.1/32 [200/0] via 1.1.12.1, 00:04:17
iBGP 구성
동일 AS에 포함된 모든 BGP 라우터를 iBGP로 지정하는 Full Mesh 방식 사용.
내부 BGP가 제대로 동작하려면 각 iBGP 라우터는 AS 내의 다른 모든 iBGP 라우터와 피어링되어야 한다. eBGP와 달리 iBGP 피어링은 직접 연결될 필요가 없다.
iBGP 피어링에는 루프백을 사용하는 경우가 많고, 루프백은 한 경로에 장애가 발생하더라도 IGP가 루프백으로 연결되는 다른 경로를 찾을 수 있기 때문에 유용하다.
-------------- SW-2 --------------
O 1.1.34.0/24 [110/2] via 1.1.23.3, 00:07:03, GigabitEthernet1/2
O 3.3.3.3 [110/2] via 1.1.23.3, 00:07:03, GigabitEthernet1/2
O 4.4.4.4 [110/3] via 1.1.23.3, 00:07:03, GigabitEthernet1/2
-------------- SW-3 --------------
O 1.1.12.0/24 [110/2] via 1.1.23.2, 00:07:07, GigabitEthernet1/2
O 2.2.2.2 [110/2] via 1.1.23.2, 00:07:07, GigabitEthernet1/2
O 4.4.4.4 [110/2] via 1.1.34.4, 00:07:07, GigabitEthernet1/3
-------------- SW-4 --------------
O 1.1.12.0/24 [110/3] via 1.1.34.3, 00:06:58, GigabitEthernet1/3
O 1.1.23.0/24 [110/2] via 1.1.34.3, 00:07:08, GigabitEthernet1/3
O 2.2.2.2 [110/3] via 1.1.34.3, 00:06:58, GigabitEthernet1/3
O 3.3.3.3 [110/2] via 1.1.34.3, 00:07:08, GigabitEthernet1/3
BGP는 광고받은 네트워크의 next hop 주소가 라우팅 가능한 것이어야만 해당 네트워크를 사용할 수 있다.
예) SW2, SW3, SW4에서 AS1에 속한 1.1.1.1/32 네트워크의 next hop은 AS 1과 AS 234를 연결하는 SW1의 인터페이스의 주소인 1.1.12.1이다. 따라서 AS 234에 속한 각 라우터에서 1.1.1.1/32 네트워크와 통신이 되려면 next hop 주소가 포함된 1.1.12.0 네트워크로 라우팅이 가능해야 한다.
SW1이 광고하는 1.1.1.1 네트워크의 next hop 1.1.12.0 네트워크를 AS 234에 소속된 라우터들에게 알리기 위해 OSPF에 포함 시킨다.
AS 1로 전송되는 불필요한 OSPF Hello 패킷을 차단한다.
SW-3#sh ip bgp 1.1.1.1
----- 적용 전
BGP routing table entry for 1.1.1.1/32, version 9
Paths: (1 available, no best path)
Not advertised to any peer
Refresh Epoch 1
1
1.1.12.1 (inaccessible) from 2.2.2.2 (2.2.2.2)
Origin IGP, metric 0, localpref 100, valid, internal
----- 적용 후
Paths: (1 available, best #1, table default)
Not advertised to any peer
Refresh Epoch 1
1
1.1.12.1 (metric 2) from 2.2.2.2 (2.2.2.2)
Origin IGP, metric 0, localpref 100, valid, internal, best
2. next-hop-self 옵션 사용
SW2에서 네이버를 설정하면서 next hop IP 주소를 SW3, SW4가 알고 있는 SW2 자신의 주소로 변경한다.
SW-2(config-router)#do sh run | s r b
router bgp 234
neighbor 3.3.3.3 update-source Loopback0
neighbor 4.4.4.4 update-source Loopback0
SW-3#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*>i 1.1.1.1/32 2.2.2.2 0 100 0 1 i
SW-3#sh ip bgp 1.1.1.1
BGP routing table entry for 1.1.1.1/32, version 12
Paths: (1 available, best #1, table default)
2.2.2.2 (metric 2) from 2.2.2.2 (2.2.2.2)
Origin IGP, metric 0, localpref 100, valid, internal, best
IOS-XR eBGP 구성시 RPL을 만들고, RPL을 eBGP neighbor 구성 아래의 route-policy에 생성한 RPL을 in/out에 추가한다. 그리고 eBGP경로를 import, export 하기 위해 BGP 프로세스 루트 아래와 neighbor 세션에 대해 address-family를 설정해야 한다.