본문 바로가기

네트워크

[네트워크] 35. BGP (eBGP)

이 게시물은 킹 오브 네트워킹 (피터전)을 공부한 내용을 바탕으로 작성됨.


BGP(Border Gateway Protocol)

 

 

BGP는 서로 다른 조직(AS)의 네트워크를 연결할 때 사용하는 라우팅 프로토콜이다. 예를 들어 서로 다른 두 ISP(Internet Service Provider) network를 연결할 때 사용된다.

 

BGP를 사용할 때 link 한 개를 사용하는 방식을 single homing이라고 하고, 여러 개를 사용하는 방식을 multi homing이라고 한다. 실전에서는 대부분 multi homing을 사용하지만 우리는 입문자이므로 single homing을 이용한 실습을 해본다.

 

또한 BGP에서는 조직 당 하나의 BGP number가 부여되는데, 이 번호를 AS(Autonomous System) 번호라고 한다.

 

BGP는 동일한 네트워크에서도 사용이 가능한데, 이를 내부 BGP(iBGP, internal BGP)라고 한다. 우리는 근본에 더 집중하기 위해 서로 다른 조직의 network를 연결해주는 외부 BGP(eBGP, external BGP)에 대해서만 배워본다.

 

 

 

 

 

IGP와 BGP?

 

IGP(Interior Gateway Protocol)와 BGP(Border Gateway Protocol)은 둘 다 라우팅 프로토콜이며 이름도 비슷하다. 둘의 차이점을 알아보는 것으로 시작하자.

 

 

1. 범위
- IGP: IGP는 단일 자치 영역(AS: Autonomous System) 내에서 사용되는 내부 라우팅 프로토콜. AS는 동일한 관리 권한을 가진 네트워크 그룹을 의미한다. IGP는 AS 내부에서 라우팅 정보를 교환하고 경로를 결정하는 데 사용된다.
- BGP: BGP는 AS 간에 사용되는 외부 라우팅 프로토콜. AS 간에 경로 정보를 교환하고 인터넷에서의 라우팅 결정에 사용된다. BGP는 인터넷의 전체적인 라우팅 정보를 관리하고 AS 간의 경로 선택을 수행한다.

 


2. 라우팅 정책
- IGP: IGP는 AS 내부에서 사용되므로, AS 내에서의 라우팅 정책을 구성하고 조정하는 데 사용된다. AS 내부의 라우팅 결정은 대개 네트워크 관리자의 제어 하에 이루어진다. 또한 하나의 조직 내에서 metric에 따라 가장 빠른 경로를 최적 경로로 선택한다.
- BGP: BGP는 AS 간에 사용되므로, AS 간의 라우팅 정책을 조정하고 인터넷 교환점에서의 경로 선택을 수행한다. AS 간의 라우팅 결정은 다양한 조건과 정책에 의해 영향을 받을 수 있다. IGP와는 다르게 metric 뿐만 아니라 AS 조직 간 계약된 정책에 따라 최적 경로를 선택한다.

 


3. 경로 정보 교환
- IGP: IGP는 주로 링크 상태 정보를 기반으로 라우팅 테이블을 구성하고, 이웃 라우터와 경로 정보를 교환한다. 대표적인 IGP로는 RIP, OSPF, IS-IS 등이 있다.
- BGP: BGP는 AS 간에 경로 정보를 교환하기 위해 TCP를 사용하며, AS 간 경로 및 라우팅 정책을 교환한다. BGP는 대규모 네트워크 환경에서 사용되며, 인터넷의 라우팅 테이블을 관리하는 데 중요한 역할을 한다.

 

 

4. 스케일

- IGP : 장애발생 시 해당 AS의 라우팅에만 영향을 미친다. 담당하는 network의 크기는 많아도 수천개를 넘지 않는다.

- BGP : 잘못되는 경우 한 국가 or 전세계의 네트워크에 영향을 미칠 수도 있다. 담당하는 network의 크기는 수십만 개 이상이 될 수 있다.

 

 

 

 

 

 


 

BGP 네트워크 구축

 

 

 

SW1(config)#vlan 12
SW1(config-vlan)#vlan 34
SW1(config-vlan)#exit

SW1(config)#interface range f0/1-2
SW1(config-if-range)#switchport mode access
SW1(config-if-range)#switchport access vlan 12
SW1(config-if-range)#exit
SW1(config)#interface range f0/3-4
SW1(config-if-range)#switchport mode access
SW1(config-if-range)#switchport access vlan 34




SW2(config)#vlan 10
SW2(config-vlan)#vlan 20
SW2(config-vlan)#vlan 30
SW2(config-vlan)#vlan 40
SW2(config-vlan)#exit
SW2(config)#interface f0/1
SW2(config-if)#switchport mode access
SW2(config-if)#switchport access vlan 10
SW2(config-if)#exit
SW2(config)#interface f0/2
SW2(config-if)#switchport mode access
SW2(config-if)#switchport access vlan 20
SW2(config-if)#exit
SW2(config)#interface f0/3
SW2(config-if)#switchport mode access
SW2(config-if)#switchport access vlan 30
SW2(config-if)#exit
SW2(config)#interface f0/4
SW2(config-if)#switchport mode access
SW2(config-if)#switchport access vlan 40
SW2(config-if)#exit

 

 

SW1, SW2 설정을 해주었다. SW1, SW2는 각 4개의 port를 갖고있는데, SW1의 경우 왼쪽 두 개를 서로 같은 VLAN 12에 설정해주었고, 오른쪽 두 개를 서로 같은 VLAN 34에 설정해주었다. SW2의 경우에는 네 개의 port를 각각 서로 다른 VLAN에 설정해준 것이다. 

 

쉽게 말하면 SW1에서는 왼쪽 두 개와 오른쪽 두 개 port를 서로 각각 다른 network로 설정 해주었고, SW2에서는 네 개의 port를 서로 각각 다른 network로 설정했다.

 

 

 

 

 

R1#show ip route

Gateway of last resort is not set

     1.0.0.0/8 is variably subnetted, 4 subnets, 2 masks
C       1.1.10.0/24 is directly connected, GigabitEthernet0/1
L       1.1.10.1/32 is directly connected, GigabitEthernet0/1
C       1.1.12.0/24 is directly connected, GigabitEthernet0/0
L       1.1.12.1/32 is directly connected, GigabitEthernet0/0

 

 

라우터 설정을 다 마친 후 R1의 라우팅 테이블을 확인하면 위와 같다. R1 자신의 두 interface에 대한 network만 설정되어 있다.

 

 

R1#ping 1.1.12.2

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.12.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 0/0/1 ms

 

 

R1에서 R2의 1.1.12.2으로 ping을 때린 결과이다. 1.1.12.2은 R1의 위쪽 interface와 동일한 VLAN에 속해있으므로 핑이 성공한다. (R1, R2는 같은 네트워크에 있으므로, switch만으로도 연결이 가능하다.)

 

 

 

 


 

IGP 설정

 

BGP를 설정하기 전에 동일한 AS 내에서는 IGP를 먼저 설정해주어야 한다. AS 내부에서의 라우팅은 IGP를 이용하기 때문이다. AS 여러 개에 IGP를 먼저 설정해주고, 그 AS들을 BGP를 이용하여 연결해주는 것이다.

 

 

 

위 구성처럼 AS1, AS2를 나눠보자.

 

R1(config)#router ospf 1
R1(config-router)#router-id 1.1.1.1
R1(config-router)#network 1.1.10.1 0.0.0.0 area 0
R1(config-router)#network 1.1.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 1.1.12.2 0.0.0.0 area 0
R2(config-router)#network 1.1.20.2 0.0.0.0 area 0


R3(config)#router eigrp 1
R3(config-router)#network 1.1.30.3 0.0.0.0
R3(config-router)#network 1.1.34.3 0.0.0.0

R4(config)#router eigrp 1
R4(config-router)#network 1.1.34.4 0.0.0.0
R4(config-router)#network 1.1.40.4 0.0.0.0

 

 

AS를 구성하기 위해 앞에서 배웠던 OSPF와 EIGRP를 잠시 빌려왔다. AS1은 OSPF의 area로 설정해주고, AS2는 EIGRP로 설정해주었다. OSPF와 EIGRP 둘 다 IGP에 속하는 라우팅 프로토콜이므로, IGP를 이용하여 서로 다른 두 개의 AS를 구성한 것이 핵심이다.

 

또한, R2-R3 serial 부분 처럼 두 AS를 연결하는 구간을 BGP DMZ 구간이라고 하는데, 이 구간은 IGP에 포함시키지 않는다는 것도 눈여겨 보자.

 

 

 

R1#show ip route

Gateway of last resort is not set

     1.0.0.0/8 is variably subnetted, 5 subnets, 2 masks
C       1.1.10.0/24 is directly connected, GigabitEthernet0/1
L       1.1.10.1/32 is directly connected, GigabitEthernet0/1
C       1.1.12.0/24 is directly connected, GigabitEthernet0/0
L       1.1.12.1/32 is directly connected, GigabitEthernet0/0
O       1.1.20.0/24 [110/2] via 1.1.12.2, 00:05:03, GigabitEthernet0/0

 

설정을 마친 후 R1의 라우팅 테이블이다. R1-R2가 서로 OSPF로 연결되어 있기 때문에 R2의 1.1.20.0/24 network가 R1의 라우팅 테이블에 등록된 것을 확인할 수 있다.

 

 

 

R3#show ip route

Gateway of last resort is not set

     1.0.0.0/8 is variably subnetted, 7 subnets, 2 masks
C       1.1.23.0/24 is directly connected, Serial0/3/0
L       1.1.23.2/32 is directly connected, Serial0/3/0
C       1.1.30.0/24 is directly connected, GigabitEthernet0/1
L       1.1.30.3/32 is directly connected, GigabitEthernet0/1
C       1.1.34.0/24 is directly connected, GigabitEthernet0/0
L       1.1.34.3/32 is directly connected, GigabitEthernet0/0
D       1.1.40.0/24 [90/7680] via 1.1.34.4, 00:03:41, GigabitEthernet0/0

 

R3도 R4와 EIGRP를 사용하는 한 AS 집단이므로 R4의 network인 1.1.40.0/24가 R3에 등록되어 있는 것을 확인할 수 있다.

 

이로써 IGP 설정이 완료되었다. 이제 BGP로 떠나보자.

 

 

 

 

 

 

eBGP 설정

 

서로 인접한 BGP 라우터를 BGP peer 또는 BGP neighbor라고 한다. 그리고 서로 다른 AS에 속한 neighbor를 eBGP peer 또는 eBGP neighbor라고 한다. 예를 들어 R2-R3가 이웃이라면 이들은 서로 다른 AS에 속하므로 eBGP neighbor이다.

 

반대로 서로 같은 AS에 속한 neighbor는 iBGP peer 또는 iBGP neighbor라고 한다. (예를 들어 R1-R2, R3-R4)

 

eBGP와 iBGP의 설정이 약간 다르므로 구해서 알아두도록 하자.

 

 

1 R2(config)#router bgp 1
2 R2(config-router)#bgp router-id 1.1.2.2
3 R2(config-router)#neighbor 1.1.23.3 remote-as 2
4 R2(config-router)#network 1.1.10.0 mask 255.255.255.0
  R2(config-router)#network 1.1.12.0 mask 255.255.255.0 
  R2(config-router)#network 1.1.20.0 mask 255.255.255.0

 

 

  1. router bgp + AS 번호를 입력하여 BGP config 모드로 진입한다.
  2. bgp router-id 명령어를 이용하여 BGP의 라우터 ID를 지정해준다. 따로 지정해주지 않으면 OSPF에서 그랬던 것 처럼 알아서 라우터 ID가 지정된다. 라우터 ID는 장애발생 등 라우터를 빠르게 파악해야 하는 경우에 유용하므로 직접 설정하는 것이 바람직하다. 
  3. neighbor 명령어를 이용하여 eBGP neighbor의 IP 주소와 해당 neighbor가 소속된 AS 번호를 지정한다. eBGP neighbor의 IP 주소는 특별한 경우가 아니라면 해당 neighbor와 직접 연결된 next hop IP 주소를 사용한다. IGP는 자동으로 neighbor가 지정되는 반면, BGP는 사용자가 직접 neighbor를 지정해주어야 한다. R2의 neighbor로 R3을 지정해주었다.
  4. BGP를 이용하여 neighbor에게 전송할 네트워크를 설정해준다. 여기서는 R2 자신의 AS에 속한 3개의 network를 지정해주었다. subnetting 되지 않은 network를 지정할 때는 mask를 써주지 않아도 된다. 또한, 일반적으로 두 AS사이에 있는 DMZ network는 BGP network에 포함하지 않는다.

 

 

 

 

 

R3(config)#router bgp 2
R3(config-router)#bgp router-id 1.1.3.3
R3(config-router)#neighbor 1.1.23.2 remote-as 1
R3(config-router)#network 1.1.30.0 mask 255.255.255.0
R3(config-router)#network 1.1.34.0 mask 255.255.255.0
R3(config-router)#network 1.1.40.0 mask 255.255.255.0

 

 

R3의 설정은 위와 같다. R3에서는 R2를 neighbor로 설정하였다.

 

 

 

 

R2#show ip route

Gateway of last resort is not set

     1.0.0.0/8 is variably subnetted, 10 subnets, 2 masks
O       1.1.10.0/24 [110/2] via 1.1.12.1, 00:31:27, GigabitEthernet0/0
C       1.1.12.0/24 is directly connected, GigabitEthernet0/0
L       1.1.12.2/32 is directly connected, GigabitEthernet0/0
C       1.1.20.0/24 is directly connected, GigabitEthernet0/1
L       1.1.20.2/32 is directly connected, GigabitEthernet0/1
C       1.1.23.0/24 is directly connected, Serial0/3/0
L       1.1.23.2/32 is directly connected, Serial0/3/0
B       1.1.30.0/24 [20/0] via 1.1.23.3, 00:00:00
B       1.1.34.0/24 [20/0] via 1.1.23.3, 00:00:00
B       1.1.40.0/24 [20/0] via 1.1.23.3, 00:00:00

 

 

BGP 설정을 마친 후 R2에서 라우팅 테이블을 확인한 결과이다. BGP 설정 시 입력해준 세 개의 network가 'B' 코드와 함께 입력되어 있는 것을 확인할 수 있다.

 

 

 

R3#show ip route bgp
B    1.1.10.0/24 [20/0] via 1.1.23.2, 00:00:00
B    1.1.12.0/24 [20/0] via 1.1.23.2, 00:00:00
B    1.1.20.0/24 [20/0] via 1.1.23.2, 00:00:00

 

 

R3 역시 R2에서 설정해준 AS1의 network들의 주소를 라우팅 테이블에 가지고 있다.

 

이제 AS1에 속한 R1, R3에서 AS2의 network인 1.1.30.3에 핑을 때려보자.

 

 

 

 

R2#ping 1.1.30.3

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.30.3, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/6/11 ms




R1#ping 1.1.30.3

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.30.3, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)

 

 

R2는 핑에 성공했다. 하지만 R1은 대실패! 그 이유는 BGP를 R2에만 설정해주었기 때문이다. 따라서 아직 R1에는 BGP 라우팅 정보가 없는데, 이를 해결하기 위해 eBGP가 설정된 R2, R3에서 default root를 설정하여 각자의 내부 AS방향으로 라우팅 정보를 광고하도록 한다.

 

 

 

 

 

R2(config)#router ospf 1
R2(config-router)#default-information originate always
                                                ^
% Invalid input detected at '^' marker.

 

 

책에서는 R2에 default-information originate always 명령어를 입력하면 된다고 하는데, 내 환경에서는 always 명령어가 지원되지 않았다. OSPF Default Route (tistory.com) 이 블로그를 참고하여 해답을 얻었다. 현재 R1에서 R2 network를 defulat network로 설정해야하는 과정이므로, 다음 명령어를 입력하였다.

 

 

R2(config-router)#ip route 0.0.0.0 0.0.0.0 1.1.12.3

 

R2의 network가 1.1.12.2/24 이므로, 대충 1.1.12.3으로 지정해주었더니 R1에서 default network가 R2로 설정되었고, 그에 따라 R2에서 R1로 BGP 라우팅 정보 광고가 수행되었다.

 

 

 

 

R1#show ip route

Gateway of last resort is 1.1.12.2 to network 0.0.0.0

     1.0.0.0/8 is variably subnetted, 5 subnets, 2 masks
C       1.1.10.0/24 is directly connected, GigabitEthernet0/1
L       1.1.10.1/32 is directly connected, GigabitEthernet0/1
C       1.1.12.0/24 is directly connected, GigabitEthernet0/0
L       1.1.12.1/32 is directly connected, GigabitEthernet0/0
O       1.1.20.0/24 [110/2] via 1.1.12.2, 00:55:31, GigabitEthernet0/0
O*E2 0.0.0.0/0 [110/1] via 1.1.12.2, 00:00:03, GigabitEthernet0/0



R1#ping 1.1.30.3

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.30.3, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/5/15 ms

 

 

R1에서 R2를 gateway network로 설정한 후의 R1의 라우팅 테이블이다. Gateway of last resort is 1.1.12.2 를 통해 gateway가 R2로 잘 설정되어 있음을 확인할 수 있다. 그에따라 R1은 R2의 라우팅 정보를 수신할 수 있고, AS2에 위치한 1.1.30.3 network로 ping이 가능하다.

 

 

 

 

이제 R3에서도 자신의 주소를 R4의 default root (default network)로 설정해보자.

 

R3(config)#interface g0/0
R3(config-if)#ip summary-address eigrp 1 0.0.0.0 0.0.0.0

 

 

R3은 EIGRP를 사용하므로 default root 명령어가 살짝 다르다.

 

 

R4#show ip route

Gateway of last resort is 1.1.34.3 to network 0.0.0.0

     1.0.0.0/8 is variably subnetted, 4 subnets, 2 masks
C       1.1.34.0/24 is directly connected, GigabitEthernet0/0
L       1.1.34.4/32 is directly connected, GigabitEthernet0/0
C       1.1.40.0/24 is directly connected, GigabitEthernet0/1
L       1.1.40.4/32 is directly connected, GigabitEthernet0/1
D*   0.0.0.0/0 [90/7680] via 1.1.34.3, 00:00:03, GigabitEthernet0/0

 

 

이제 R4에 R3이 default root로 설정되었으므로, R4도 BGP를 통한 라우팅 정보를 획득할 수 있다.

 

 

 

R4#ping 1.1.10.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.10.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/3/7 ms


R4#ping 1.1.20.2

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.20.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/5/13 ms

 

 

R4에서 R1, R2에 핑을 때려보면 아주 잘 전송된다. 여기까지 eBGP 설정을 마친다.

 

 

 

 

 

 

 

 

BGP Table

 

BGP가 작동하는 라우터는 BGP neighbor로부터 라우팅 정보를 수신하면 입력 정책을 적용한 후 라우팅 테이블에 그 정보를 BGP table에 저장한다. 그리고 BGP table에 저장된 경로 중에서 최적 경로를 선택하고 다른 라우팅 프로토콜들과 AD(우선순위, Administrative Distance)를 비교한 후에 최종적으로 라우팅 테이블에 저장한다. 그 후 BGP table에 있는 network에 출력 정책을 적용한 다음 인접 라우터에게 라우팅 정보를 전송한다.

 

 

이웃으로부터 라우팅 정보 수신 ➞ BGP table에 저장 ➞ BGP table에 있는것들 중 최적경로 선택 ➞ 다른 라우팅 프로토콜들과 우선순위 비교 ➞ BGP의 우선순위가 가장 높다면 라우팅 테이블에 해당 정보를 저장 ➞ BGP table에 있는 정보를 인접 라우터에게 전달

 

 

 

 

R2#show ip bgp
BGP table version is 8, 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
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*> 1.1.10.0/24       0.0.0.0                  0     0     0 1 i
*> 1.1.12.0/24       0.0.0.0                  0     0 32768 i
*> 1.1.20.0/24       0.0.0.0                  0     0 32768 i
*> 1.1.30.0/24       1.1.23.3                 0     0     0 2 i
*> 1.1.34.0/24       1.1.23.3                 0     0     0 2 i
*> 1.1.40.0/24       1.1.23.3                 0     0     0 2 i

 

BGP table을 출력해보았다.

 

  1. BGP table version is 8 ➞ BGP table이 업데이트 된 횟수를 의미한다. 규모가 큰 네트워크일수록 이 값도 아주 커진다. 만약 소규모 BGP 네트워크에서 이 값이 매우 크다면 네트워크가 불안정한 것이므로 검토가 필요하다.
  2. router ID is 1.1.2.2 말 그대로 라우터 ID
  3. Network ➞ 목적지 network
  4. Next hop ➞ 목적지 network와 연결되는 next hop IP 주소
  5. Path ➞ 해당 네트워크가 거쳐온 AS의 번호

 

 

 

 

R2#show ip bgp summary
BGP router identifier 1.1.2.2, local AS number 1
BGP table version is 8, main routing table version 6
6 network entries using 792 bytes of memory
6 path entries using 312 bytes of memory
3/3 BGP path/bestpath attribute entries using 552 bytes of memory
2 BGP AS-PATH entries using 48 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
Bitfield cache entries: current 1 (at peak 1) using 32 bytes of memory
BGP using 1736 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
1.1.23.3        4     2      54      49        8    0    0 00:47:54        4

 

 

어떤 BGP 라우터의 BGP neighbor를 확인하려면 show ip bgp summary 명령어를 입력한다. summary를 빼고 입력하면 정보가 너무 많기 때문에 summary로 입력하는 것이 일반적이다. R2에서는 R3을 neighbor로 설정해주었으므로 R3의 network인 1.1.23.3이 이웃으로 등록되어 있는 것을 확인할 수 있다.