|
|
 |
|
목차 |
|
|
|
1. Border Gateway Protocol의 개요
BGP (Border Gateway Protocol)는 AS(Autonomous System) Number가 다른 네트웍(자치 네트워크)간에 Routing Information을 주고 받는 Exterior Gateway Protocol로 현재 BGP는 Version 4가 이용되고 있는데 이것을 간단히 줄여 BGP라고 한다.
|
1.1 BGP는 어디에 쓰이는가?
BGP는 Policy routing으로 문자그대로 네트워크 경로의 결정이 라우터가 수행하는 것이 아니라네트워크를 운영하는 운영자에 의해서 결정되는 Routing Protocol이다.
BGP는 위에서도 언급했듯이 AS number가 다른 두 네트워크간에 Routing Information을 주고 받을 때 이용할 수 있는 EGP(Exterior Gateway Protocol)이다. 따라서 동일한 AS(자치네트워크)안에서의 라우팅은 RIP, OSPF, EIGRP와같은 IGP(Interior Gateway Protocol)를 이용하는 것이 바람직하다.
|
1.2 왜 정책 라우팅인가?
위에서 언급한 것처럼 BGP는 네트워크 운영자의 라우팅 정책에 의해 라우팅 경로를 정할 수 있습니다. 예를 들면 ...
위와 같은 network 토폴로지를 가정하고 네트워크 관리자는 BGP를 이용하여 Internetworking환경에서의 원하는 라우팅 경로의 테이블을 구성할 수 있다.
AS100
- 인터넷으로 갈때는 B라우터를 통해 AS200을 경유한다.
- AS300으로 갈때는 라우터C를 통해 직접 간다.
AS200
- AS100에 있는 네트웍은 AS200을 경유하여 인터넷으로 갈 수 있다.
- AS300은 AS100, AS200을 경유하여 인터넷으로 갈 수 없다.
- AS300과의 통신은 인터넷을 경유하도록 한다.
AS300
- AS100에 있는 네트웍은 AS300으로 접속할 있다.
- AS100은 AS300을 경유하여 인터넷으로 갈 수 없다.
- AS200은 AS100, AS300을 경유하여 인터넷으로 갈 수 없다.
-AS200과의 통신은 인터넷을 경유하도록 한다.
이처럼 BGP는 두 개이상의 AS에 접속을하고 위의 예처럼 독자적인 라우팅 정책을 구현해야 할 때 필요하다. 이와같이 독자적인 라우팅 정책을 구현하기 위해서는 Filtering, Route-map, weight, localPreference, MED등 다양한 Routing Information을 제어할 수 옵션을 추가해 주어야 한다.
|
2. 기본적인 BGP 설정
BGP에는 External BGP와 Internal BGP가 있는데. External BGP는 다른 AS에 속한 라우터간에 맺으며, Internal BGP는 같은 AS에 속한 라우터간에 맺는다. 여기서 External BGP는 EBGP로, Internal BGP는 IBGP로 줄여서 표기하기도 한다.
BGP에서 Neighbor간에는 반드시 직접 연결되어 있을 필요가 없으며, 이러한 특징은 다른 Dynamic protocol의 Neighbor와는 다른 의미이다.
AS300에 있는 라우터에서 BGP를 설정하는 방법은 다음과 같다.
Router(config)# router bgp 300
Router(config-router)# neighbor remote-as 1.1.1.1 200
|
AS200에서도 똑같은 작업을 시행한다.
router bgp는 BGP Routing Protocol을 활성화하겠다는 것이며 Local AS num을 함께 입력한다. l neighbor-ip-address는 Neighbor의 IP Address인데 보통 두 라우터를 연결하는 Interface에 할당된 IP Address를 많이 이용하며, 경우에 따라서 연결 Interface장애시 BGP라우팅을 Session을 유지하도록 down될 가능성이 적은 Ethernet과 같은 다른 Interface나 혹은 Loopback Interface에 할당된 IP Address를 이용하기도 한다.
|
2.1 AS-Path, Neighbor란?
BGP는 BGP Session을 맺기 위해 Transport Protocol로 Transmission Control Protocol (TCP)을 이용하며 BGP Session을 맺은 상대측 라우터를 Neighbor 혹은 Peer 라고도 표현된다.(UDP를 이용하는 것은 RIP이있다)
AS-PATH란 해당 목적지까지 갈때 경유하는 AS들의 AS Number들로 구성된 것이다. AS_path에는 경유하는 AS Number만 표시될 뿐이지 해당 AS에서 어떤 경로를 지나왔는지는 표시되지 않는다. 가령 다음과 같이 네트웍이 구성되어 있을 경우 AS100의 입장에서 네트웍 1.0.0.0에 대한 AS_path는 200 300 400 이다.
AS100 ------------AS200 ------------AS300 ---------------AS400 (1.0.0.0)
위의 예로써 설명을 하면 AS400에 있는 라우터는 AS300에 있는 라우터에게 130.100.0.0에 대한 정보를 전달할때 AS_path로 400을 전달한다.
AS300 : 1.0.0.0 400
AS300에 있는 라우터가 AS200에 있는 라우터에게 130.100.0.0에 대한 정보를 전달할때는 자신의 AS Number를 AS_path에 Prepend 시킨 AS_Path 300 400을 전달한다.
AS200 : 1.0.0.0 300 400
AS200에서 AS100으로 정보가 전달될때도 역시
AS100 : 1.0.0.0 200 300 400따라서 동일한 목적지에 대한 AS_path의 길이가 짧을 경우 가까운 곳에 있다고 판단하여 짧은 AS_path를 가진 경로를 선택한다.
이러한 이유 때문에 BGP Routing을 AS_path Routing이라고도 한다. AS_path 300 400의 길이는 2, AS_path 200 300 400의 길이는 3이다. 그러나 이는 네트워크 관리자의 임의데로 Weight나 Local-Preference(IBGP사용시)등의 조정으로 경로를 선택하는 것이 가능하다.
AS_path에는 경유하는 AS에 대한 정보가 담겨 있는데 Split-horizon처럼 AS_path를 가지고 AS간에 Routing Loop을 쉽게 방지할 수 있다.
또한 BGP를 Loop-Free Routing Protocol이라고도 하는데 만약 AS_path에 자신의 AS Number가 표시되어 있다면 그것은 자신이 내보낸 정보이므로 해당 정보를 무시한다. 따라서 BGP Routing은 Routing Loop이 발생하지 않는다.
|
2.2 기본 설정법 - IBGP, EBGP
|
2.2.1 IBGP
IBGP는 한 AS내에 다른 AS와 연결된 2개 이상의 라우터가 있을 경우만 설정하여 이용하는 것이 바람직하다. 즉, EBGP를 운영하고 있는 라우터가 2개 이상일 경우일때만 필요하다는 것이다. 그리고 AS내에 있는 모든 라우터(예를들어 OSPF, RIP만을 운영하는 라우터들)가 IBGP를 설정할 필요는 없으며, EBGP를 운영하고 있는 라우터간에 IBGP를 설정해주면 된다.
EBGP를 운영하고 있는 라우터가 1개일 경우 IBGP 설정은 불필요하다. 이유는IBGP는 외부 AS로부터 받은 정보를 같은 AS내에 있는 다른 EBGP 라우터에 전달, 목적지에 대한 경로를 선택할 수 있도록 하는 역할을 담당하므로 외부와 접속된 EBGP가 1개일 경우 경로는 이미 결정되어 있으므로 IBGP의 역할은 필요없고, 단지 BGP 라우터는 AS 내의 다른 라우터들과는 IGP로 정보를 교환하고, 필요할 경우 BGP와 IGP간에 Routing Information을 Redistribution 하거나 외부로 접속되는 EBGP라우터로 Default Gateway를 설정하면 된다.
IBGP의 또 하나의 특징으로 Full-Mesh 형태로 구성해야 한다는 것이다.
다음의 그림을 보고 설명을 하겠다.
라우터 A, B, C가 각각 EBGP Session 을 라우터E, F, G와 맺고, 라우터A는 라우터B, 라우터B는 라우터C와 IBGP Session을 맺고 라우터A와 라우터C 사이에는 직접 IBGP Session을 맺지 않은 경우이다.
만약 AS400에서 어떤 변화가 발생되면 라우터 E는 그 사실을 라우터A에게 전달할 것이다. 네트웍의 변화에 대한 정보를 얻은 라우터A는 IBGP Session을 맺은 라우터B에게 전달한다. 앞에서도 말했듯이 라우터B는 정보가 같은 AS에 있는 라우터A로부터 왔으므로 그 정보를 IBGP Session을 맺은 라우터C에게 전달하지 않고, EBGP Session을 맺은 라우터F에게만 전달한다. 따라서 변화된 정보가 라우터C를 통해 AS300에까지 전달되지 않는다는 것이다. 그러므로 같은 AS안에 있는 라우터는 다음과 같이 Full-Meshed IBGP Session을 맺어주어야 한다.
|
2.2.2 Loop-Back Interface
IBGP나 EBGP를 사용할 경우에 가상의 인터페이스인 Loop-back Interface를 사용하여 BGP세션을 유지하는 방법이있다.
예를 들어 라우터A, B, C 들은 서로 직접 연결되어 있으며, 모두 Full Mesh 형태로 IBGP Session을 다음과 같이 맺었다고 가정하자.
Router-A# sh running-config
router bgp 100
neighbor 130.100.2.2 remote-as 100
neighbor 130.100.1.2 remote-as 100
Router-B# sh running-config
router bgp 100
neighbor 130.100.2.1 remote-as 100
neighbor 130.100.3.2 remote-as 100
Router-C# sh running-config
router bgp 100
neighbor 130.100.1.1 remote-as 100
neighbor 130.100.3.1 remote-as 100
|
위와 같은 상황에서 라우터A와 라우터C를 직접 연결하는 회선에 장애가 발생하였을 경우 라우터A와 라우터C간의 IBGP Session은 사라지게되는데 이유는 라우터A에서 Neighbor를 라우터 C의회선에 할당된 IP Address를 이용해 지정하였고 회선에 장애가 발생함에 따라 지정된 인터페이스에 도달할 수 없어 IBGP Session을 맺을 수 없기 때문이다.
그러나 IBGP Session은 직접 연결되어 있지 않더라고 맺을 수 있기 때문에 라우터A에서 라우터C와 IBGP Session을 위해 Neighbor를 Ethernet같은 다른 인터페이쪽을을 선언하였더라면 라우터A와 라우터C간의 회선이 끊어졌더라도 IBGP Session을 맺을 수 있었을 것이다. 라우터A는 라우터B를 경유하여 라우터 C의 Ethernet interface에 접속할 수 있기 때문이다.
자 이제 눈치를 채셨겠지만 여기서 Loopback Interface를 사용하면 인터페이스 특성상 이것은
물리적인 Interface가 아니라 가상의 Interface로서 위에서처럼 물리적인 Interface에 장애가 발생함에 따라 그것에 할당된 IP Address등을 이용할수 없게 되는 상황을 방지해 줄 수 있는 것이다.
Loopback Interface를 선언하는 방법은 다음과 같다.
Router(config)# interface loopback number
Router(config-if)# ip address ip-address netmask
number는 0에서 2147483648까지 가능하며, Loopback Interface를 활용한 IBGP Session은 다음과
같이 설정할 수 있다.
Router-A# sh running-config
interface loopback 0
ip address 130.100.5.1 255.255.255.0
router bgp 100
neighbor 130.100.6.1 remote-as 100
neighbor 130.100.6.1 update-source loopback 0
neighbor 130.100.7.1 remote-as 100
neighbor 130.100.7.1 update-source loopback 0
Router-B# sh running-config
interface loopback 0
ip address 130.100.6.1 255.255.255.0
router bgp 100
neighbor 130.100.5.1 remote-as 100
neighbor 130.100.5.1 update-source loopback 0
neighbor 130.100.7.1 remote-as 100
neighbor 130.100.7.1 update-source loopback 0
Router-C# sh running-config
interface loopback 0
ip address 130.100.7.1 255.255.255.0
router bgp 100
neighbor 130.100.5.1 remote-as 100
neighbor 130.100.5.1 update-source loopback 0
neighbor 130.100.6.1 remote-as 100
neighbor 130.100.6.1 update-source loopback 0
|
Loopback Interface를 이용해 IBGP Session을 맺은 경우 반드시 update-source를 함께 선언해주어야 한다. 라우터A에서 update-source를 선언함으로써 라우터B와 라우터C에게 IBGP Session을 위한 Neighbor는 130.100.5.1이라고 알려주게 된다.
|
2.2.3 EBGP
EBGP를 설정하는 방법은 BGP 설정방법은?에서 다루었기 때문에 여기에서는 EBGP 설정과관련된 Multihop, Synchronization에 대해서 알아보도록 하겠다.
IBGP 라우터들은 직접 연결되어 있지 않아도 IBGP Session을 맺을 수 있다. EBGP 라우터들은 대개 전용회선과 같은 것으로 직접 연결되어 EBPG Session을 맺는데 어떠한 이유에서 EBGP 라우터들이 직접 연결될 수 없거나 Serial Link에 할당된 IP Address로 neighbor를 지정하지 않고, Ethernet interface나 Loopback Interface에 할당된 IP Address로 neighbor를 선언하는 경우이다.
이런 경우 neighbor의 IP Address를 선언해 주고 neighbor ebgp-multihop이라는 명령어를 함께 선언해 주어야 한다. 위와 같은 상황에서는 neighbor의 IP Address는 Loopback Interface에 할당된 IP Address를 이용하면 된다.
Multihop이라는 것은 Neighbor를 찾는 라우터의 TTL range를 지정하는 것으로 1-255로 지정할 수 있으므로 EBGP라우터가 지정 Range 안에서 세션을 형성 할 수 있다.
Router-A# sh run
loopback interface 0
ip address 1.1.1.1 255.255.255.0
router bgp 100
neighbor 11.1.1.1 remote-as 200
neighbor 11.1.1.1 ebgp-multihop
neighbor 11.1.1.1 update-source loopback 0
Router-B# sh run
loopback interface 0
ip address 1.1.1.1 255.255.255.0
router bgp 200
neighbor 1.1.1.1 remote-as 100
neighbor 1.1.1.1 ebgp-multihop
neighbor 1.1.1.1 update-source loopback 0
|
이때 주의하여야 할 것은 IBGP에서와 마찬가지로 EBGP 라우터가 loopback interface의 IP Address에 대한 경로를 알고 있어야 한다는 점이다. AS200에 있는 EBGP 라우터가 130.200.0.0에 대한 정보를 AS100의 EBGP 라우터에게 전달할 경우는 별도로 130.200.0.0에 대한 정보를 AS100에 등록해 줄 필요는 없다. 그러나 130.200.0.0에 대한 정보를 AS100의 EBGP 라우터에게 전달하지 않을 경우, 운영자는 라우터A에 130.200.0.0에 대한 Static Route 등을 등록하여 주어야 한다. 라우터B측에서도 마찬가지다.
Router-A# sh run
loopback interface 0
ip address 1.1.1.1 255.255.255.0
router bgp 100
neighbor 11.1.1.1 remote-as 200
neighbor 11.1.1.1 ebgp-multihop
neighbor 11.1.1.1 update-source loopback 0
ip address 11.1.1.1 255.255.255.255 10.1.1.1
Router-B# sh run
loopback interface 0
ip address 1.1.1.1 255.255.255.0
router bgp 200
neighbor 1.1.1.1 remote-as 100
neighbor 1.1.1.1 ebgp-multihop
neighbor 1.1.1.1 update-source loopback 0
ip address 1.1.1.1 255.255.255.255 10.1.1.2
|
|
2.3 Synchronization, Network Advertisement
|
2.3.1 Synchronization
다음으로 Syncronization에 대해서 살펴보도록 하는데 다음의 네트웍 상황을 살펴보자. 라우터B만이 BGP라우터가 아니고 나머지는 모두 BGP 라우터이다. AS100은 AS200과 AS300을 중계하고 있다.
라우터A가 라우터D로부터 Routing에 대한 정보를 전달 받으면 이것을 IBGP Neighbor인 라우터C에게 전달하며, 라우터C는 이 정보를 라우터E에게 전달할 것이다. AS200에 있는 라우터는 D network로 가려는 트래픽을 라우터C에게 전달할 것이다. 그리고 라우터C는 해당 트래픽을 라우터B에게 전달할 것이다. 그런데 아직 라우터B가 라우터A로부터 D network 에 대한 정보를 받지 못했다고 생각해보자. 그러면 당연히 라우터B는 해당 트래픽을 폐기해 버릴 것이다.
BGP에서 다른 두 개 이상의 AS를 연결하는 역할을 하는 AS가 있을 경우 이 AS에 있는 BGP 라우터들은 목적지에 대한 경로를 IGP로부터 모두 얻을때까지는 해당 경로를 다른 BGP 라우터에게 알려주지 않는 것을 Synchronization이라고 한다.
따라서 위와 같은 상황에서 Synchronization이 활성화되어 있다면 라우터C는 라우터A로부터 받은 목적지에 대한 경로정보를 라우터B로부터 모두 전달받을때까지 기다렸다가 이후 라우터E에게 전달한다. 따라서 라우터B에서 트래픽이 폐기되는 것을 방지할 수 있게 된다.
그러나 이러한 Synchronization은 Routing Information의 전달을 지연시키는 요소중의 하나인데 이러한 Synchronization은 다음과 같은 상황에서는 필요하지 않을 수 있다.
* 자신의 AS가 다른 AS간의 트래픽을 중계하지 않을 때
* 다른 AS간의 트래픽을 중계하는 라우터들이 모두 IBGP를 운영할 때
상기의 두 경우인데, 보통의 경우는 BGP 라우팅 정보를 IGP로 Redistribute하는 경우는 거의 없고 직접적인 IBGP를 통해서 라우팅 정보를 교환합니다.
또한 Transit(중계)서비스의 경우는 IX(Internet exchane)서비스를 하는 업체에 국한되고 이서비스를 운영하는 업체에서도 IGP와 BGP의 라우팅 테이블을 Redistribute하는 경우는 거의 없다.
CISCO 라우터의 BGP에서는 기본적으로 Synchronization이 활성화되어 있는데 Synchronization을 비활성화하는 방법은 다음과 같다.
Router(config)# router bgp local-asn
Router(config-router)# no synchronization
|
|
2.3.2 Network Advertisement
RIP, IGRP, OSPF, EIGRP과 같은 IGP를 운영하고 있는 라우터는 맨처음에 Network Address 및 그것에 대한 경로정보를 전달할때 자신에게 직접 접속된 Network Address만을 전달하며, 방법은 이미 익혔듯이 network 명령어를 이용하여 자신에게 접속된 Network Address를 선언하면 된다.
그러나 BGP에서 네트워크 Address를 선언할 경우에는 BGP를 운영하는 라우터에 직접 연결된 네트워크뿐만 아니라 직접 연결 되지 않은 네트워크 까지도 선언할 수 있으며,이를 선언하지 않을겨 경우 BGP 세션을 맺는다 하더라도 서로의 네트워크 라우팅 정보를 전달하지 않으므로 반듸드시 선언해야한다.
Advertising하는 방법은 내부 IGP로 운영된느 네트워크를 Redistrbute하는 방식과 Network라는 Command를 사용하여 선언하는 방법이 있으나, 통상 Network라는 명령어로 선언하는 것을 권하고 있다.
그리고 라우터A와 라우터B는 자신의 AS에 속한 Network Address들을 다음과 같이 모두 선언해 준다.
Router-A#sh run
router bgp 100
neighbor 1.1.1.2 remote-as 200
network 10.1.0.0
network 10.2.0.0
Router-B#sh run
router bgp 200
neighbor 1.1.1.1 remote-as 100
network 10.3.0.0
network 10.4.0.0
|
위와 같이 BGP 라우터를 설정한 경우 라우터 A와 라우터B에서 BGP 정보를 확인해 보자. BGP 정보를 확인하는 방법은 show ip bgp 라는 명령어를 이용하면 된다.
|
|
|
|
|
Comments List
嫄몄
移
移