본문으로 바로가기

Routing Protocol - BGP (Border Gateway Protocol)

category 네트워크/All about Network 2020. 3. 3. 15:33
BGP (Border Gateway Protocol)

BGP (Border Gateway Protocol)서로 다른 조직의 네트워크를 연결할 때 사용하는 라우팅 프로토콜이다. 기업체 또는 학교나 정부 기관등이 2개 이상의 ISP와 연결할 때 BGP를 사용한다. 그리고 ISP들끼리 네트워크를 연결할 때도 BGP를 사용한다. 하나의 링크만을 사용해서 연결하는 것을 싱글 호밍(Single homing)이라고 하며, 두 개 이상의 링크를 연결해서 사용하는 것을 멀티 호밍(Multi homing)이라고 한다. 대부분의 BGP멀티 호밍을 사용한다. 또한 BGP를 설정할 때는 하나의 BGP 번호AS (Autonomous System) 번호를 부여한다. 동일한 네트워크 내부에서 사용하는 BGP를 내부 BGP, iBGP(internal BGP)라고 하며 서로 다른 네트워크에서 사용하는 BGP를 외부 BGP, eBGP(external BGP)라고 한다.


BGP는 신뢰성 있는 통신인 TCP 포트 179번을 사용하여 유니캐스트 방식으로 라우팅 정보를 전송한다. 현재 사용되는 BGP는 버전 4로 BGP4로 부른다. 또한 IGP랑은 다르게 BGP는 조직간에 계약된 Policy(정책)에 따라 최적 경로를 결정한다. IGP는 다른 조직에 관여받지 않고 라우팅 정책을 설정할 수 있으나 BGP는 수많은 AS로 구성되어 있고 그 중 하나인 해당 조직의 AS에서 라우팅 정책을 설정하여 원하는 라우팅이 이루어지게 해야한다.


BGP는 장애가 발생하면 하나의 국가, 크게는 전 세계의 네트워크에 영향을 미칠 수 있다. 일반적인 조직에서 IGP의 네트워크 수는 많아봐야 수천개를 넘지 않지만 BGP는 보통 수만 개에서 수십만 개 이상의 네트워크가 라우팅 테이블에 인스톨 된다.



장비 기본 설정 & 기본 설정 파일
Router>en
Router#conf t
Router(config)#hostname R1
R1(config)#enable secret cisco
R1(config)#no ip domain-lookup

R1(config)#line console 0
R1(config-li)#logging sync
R1(config-li)#exec-time 0
R1(config-li)#exit

ISP(config)#line vty 0 4
ISP(config-li)#password cisco
ISP(config-li)#exit


BGP 설정을 위한 IGP 선행 설정

BGP를 설정하기 전 동일한 AS 내부에서는 IGP가 동작해야한다. IGP가 필요한 가장 큰 이유는 AS 내부에서의 라우팅 때문이다. R1과 R2에는 OSPF 라우팅 프로토콜을, R3과 R4에는 EIGRP 라우팅 프로토콜을 각각 설정한다. R2와 R3가 연결되는 포인트 투 포인트, 시리얼 인터페이스 구간은 어느 AS에도 소속되지 않으며, 이 구간을 BGP DMZ라고 한다.

R1(config)#router ospf 1
R1(config-router)#router-id 1.1.1.1  
R1(config-router)#network 10.10.10.1 0.0.0.0 area 0
R1(config-router)#networ 10.10.12.1 0.0.0.0 area 0

R2(config)#router ospf 1
R2(config-router)#router-id 1.1.2.2
R2(config-router)#network 10.10.12.2 0.0.0.0 area 0
R2(config-router)#network 10.10.20.2 0.0.0.0 area 0
R3(config)#router eigrp 1
R3(config-router)#network 10.10.30.3 0.0.0.0
R3(config-router)#network 10.10.34.3 0.0.0.0

R4(config)#router eigrp 1
R4(config-router)#network 10.10.34.4 0.0.0.0
R4(config-router)#network 10.10.40.4 0.0.0.0


기본적인 BGP 설정 & 디폴트 루트

인접한 BGP 라우터를 BGP 피어(peer)또는 네이버(Neighbor)라고 하며, 서로 다른 BGP에 속하는 네이버를 eBGP(external BGP) 네이버 또는 eBGP 피어라고 한다. 동일한 AS에 속하는 네이버를 iBGP(interior BGP) 네이버 또는 iBGP 피어라고 한다. R2와 R3eBGP 네이버이며 R1과 R2, R3와 R4iBGP 네이버이다. R2와 R3에 각각 eBGP를 설정한다.

R2(config)#router bgp 65001
R2(config-router)#bgp router-id 1.1.2.2
R2(config-router)#neighbor 10.10.23.3 remote-as 65002
R2(config-router)#network 10.10.10.0 mask 255.255.255.0
R2(config-router)#network 10.10.12.0 mask 255.255.255.0
R2(config-router)#network 10.10.20.0 mask 255.255.255.0

R3(config)#router bgp 65002
R3(config-router)#bgp router-id 1.1.3.3
R3(config-router)#neighbor 10.10.23.2 remote-as 65001
R3(config-router)#network 10.10.30.0 mask 255.255.255.0
R3(config-router)#network 10.10.34.0 mask 255.255.255.0
R3(config-router)#network 10.10.40.0 mask 255.255.255.0

ⅰ. router bgp 65001 : router bgp 명령어와 함께 AS 번호를 지정하면서 BGP 설정모드로 들어간다. AS 번호는 2바이트, 4바이트[각주:3] 두 종류가 있다. 2바이트 AS 번호 중 64512~65534 까지는 사설 AS 번호이다. IP주소와 마찬가지로 IANA에서 공인 AS 번호를 부여한다.

ⅱ. bgp router-id 1.1.2.2 : BGP 라우터 ID를 지정한다. 지정하지 않으면 OSPF와 똑같은 방식으로 라우터 ID를 지정한다. 하지만 Router ID는 트러블슈팅 등에서 중요하므로 직접 지정하는 것이 좋다.

ⅲ. neighbor 10.10.23.3 remote-as 65002 : neighbor 명령어와 함께 eBGP 네이버의 IP 주소해당 네이버가 소속된 AS 번호를 지정한다. 네이버의 IP 주소는 특별한 경우를 제외하고는 네이버와 직접 연결된 넥스트 홉 IP 주소를 사용한다. BGP는 IGP와 다르게 자동으로 네이버가 지정되지 않으므로 꼭 지정해줘야한다.

ⅳ. network 10.10.10.0 mask 255.255.255.0 : BGP를 통하여 다른 라우터들에게 전송할 네트워크를 지정한다. 서브넷팅되지 않은 네트워크를 지정할 때는 mask 옵션을 사용하여 서브넷 마스크를 지정할 필요가 없다. 설정한 것 처럼 해당 네트워크가 라우터에 접속된 것이 아니여도 network 명령어를 사용할 수 있지만 라우팅 테이블에는 반드시 저장되어있어야 한다.


R2와 R3 사이의 두 AS 사이에 있는 네트워크DMZ 네트워크라고하며 DMZ는 BGP에 포함시키지 않는다.


R1에서 R3로 ping을 보내면 정상적으로 ping이 가는 것을 확인할 수 있으나, R1에서 R4로 ping을 보내면 비정상적으로 ping이 빠지는 것을 확인할 수 있다.

R1#ping 10.10.40.4 source 10.10.10.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.10.40.4, timeout is 2 seconds:
Packet sent with a source address of 10.10.10.1 
.....

이 이유는 R1에는 BGP가 설정되어있지 않았고, 결과적으로 라우팅 테이블에 10.10.30.0/24 등 상대 네트워크인 AS65002의 네트워크가 없기 때문이다. 이를 해결하기 위해서는 eBGP가 설정된 R2와 R3에서 각각 '디폴트 루트'를 설정하여 OSPF와 EIGRP를 통하여 내부 네트워크 방향으로 광고하도록 한다.

R2(config)#router ospf 1
R2(config-router)#default-information originate always

R3(config)#int e0/0
R3(config-if)#ip summary-address eigrp 1 0.0.0.0 0.0.0.0

설정 후 라우팅 테이블을 확인해보면 각각 OSPF와 EIGRP를 통하여 광고받은 디폴트 루트(O* E2, D*)가 등록된 것을 확인할 수 있으며, 동시에 ping이 가는 것을 확인할 수 있다.

R1#sh ip route
O*E2  0.0.0.0/0 [110/1] via 10.10.12.2, 00:00:59, Ethernet0/0
      10.0.0.0/8 is variably subnetted, 5 subnets, 2 masks

R4#sh ip route
D*    0.0.0.0/0 [90/307200] via 10.10.34.3, 00:50:32, Ethernet0/0
      10.0.0.0/8 is variably subnetted, 4 subnets, 2 masks


BGP 테이블 (Table)

위에서 언급했지만 BGP는 네이버에게서 BGP 라우팅 정보를 수신하면 입력 정책을 적용한 다음 BGP 테이블에 저장한다. 먼저 BGP 경로 중에서 최적의 경로를 선택하고, 다른 라우팅 프로토콜과 AD(Administrative Distance)를 비교한 다음 라우팅 테이블에 저장한다. 그리고 BGP 테이블에 있는 네트워크에 출력 정책을 적용한 다음 인접 라우터에게 라우팅 정보를 전송한다. show ip bgp를 통하여 BGP 테이블을 확인할 수 있다.

R2#show ip bgp
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
 *>  10.10.10.0/24    10.10.12.1              20         32768 i
 *>  10.10.12.0/24    0.0.0.0                  0         32768 i
 *>  10.10.20.0/24    0.0.0.0                  0         32768 i
 *>  10.10.30.0/24    10.10.23.3               0             0 65002 i
 *>  10.10.34.0/24    10.10.23.3               0             0 65002 i
 *>  10.10.40.0/24    10.10.23.3          307200             0 65002 i

BGP table versionBGP 테이블이 변화된 횟수를 의미한다. 규모가 큰 네트워크에서는 이 값도 매우 크지만 규모가 작은 네트워크에서 이 값이 크다면 네트워크가 불안정하다는 뜻이 될 수 있으므로 확인해봐야 한다. 그리고 목적지 네트워크와 목적지 네트워크가 연결되는 넥스트 홉 주소 IP, 경로를 정하는 값들과 해당 네트워크가 거쳐온 AS의 값이 Path에 표시된다.


BGP 네이버 (Neighbor) 테이블 (Table)

BGP의 네이버를 확인하기 위해서는 show ip bgp neighbor 명령어를 사용하여 네이버를 확인할 수 있다. 그러나 neighbor 옵션은 너무나 많은 bgp 정보를 가지고 있어 보기 불편할 수 있다. 따라서 neighbor 옵션이 아닌 summary 요약 옵션을 사용하여 요약된 정보만을 확인할 수 있다.

R2#show ip bgp summary
BGP router identifier 1.1.2.2, local AS number 65001
BGP table version is 7, main routing table version 7
6 network entries using 840 bytes of memory
6 path entries using 480 bytes of memory
4/4 BGP path/bestpath attribute entries using 576 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 1920 total bytes of memory
BGP activity 6/0 prefixes, 6/0 paths, scan interval 60 secs

Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
10.10.23.3      4        65002      75      76        7    0    0 01:04:36        3

여기서 확인해야할 옵션은 State/PfxRcd인데, 네이버와의 상태와 광고 받은 네트워크의 수(Prefix Received)를 표시한다. 처음 네이버를 구성할 때는 일시적으로 Active나 Idle 상태가 표시되나 약 30초 이후부터는 반드시 상태가 아닌 광고 받은 네트워크의 수가 표시되어야 한다.


  1. ROUTER, SWITCH는 각각 L3 IOU, L2 IOU 이미지를 사용하였다. [본문으로]
  2. 복사하여 터미널 프로그램에 붙여넣기 하면 편하게 사용할 수 있다. [본문으로]
  3. 2바이트는 65,536, 4바이트는 1,048,576이다. 각각 2^8, 2^16이다. [본문으로]

댓글을 달아 주세요