본문 바로가기

Routing&Switching/BGP

BGP란 무엇인가

.거리벡터 프로토콜
.전세계 200,000 이상의bgp정보가 존재하는데 이런방대한 정보 관리를 위해 cpu, memory등 자원소모가 큰 링크 상태 프로토콜 사용이 어려움
.as와 as간 경로를 사용하고 as path라부름
.AS내부의 실제 라우터 간의 동작을 제아하기위해 bgp 메트릭개념인 attribute을 사용
.AS내부에서 bgp 를 구현하는 라우터는 as의 가장자리에위치하는 종단 라우터(edge router)에서 구현
.bgp를 이용한 정보교환은 라우터간의 정보교환이아닌 as와 as간의 정보교환임
.라우터 단위의 경로가 아닌 as단위의 경로를 결정하는 프로토콜
. bgp는 경로를 선택할때 반드시 하나의 경로만 선택해 사용
. bgp가 부하분산을 제공하지못하는이유는 as단위로 베스트 경로를 결정하기때문에 as 내부환경을 알수없음
. bgp는 거리벡터 프로토콜로 rip과 비슷하지만, rip은 라우팅 룹을 차단하기위해 스플릿 호라이즌 등 이용필요. bgp는 routing loop free protocol (loop-free inter-domain routing protocol)
.bgp라우팅은 트리거드 업데이트사용하여 변경되었을때만 업데이트수행 (최초 피어링맺을때만 전체 라우팅업데이트 진행)하는데, 변경된 라우팅이 일정시간동안 유지되는경우에만 라우팅 업데이트수행. iBGP피어 간 5초, eBGP피어간 30초 대기(라우팅 업데이트 횟수를줄여 자원낭비 방지)
. Transit AS와 Non-transit AS존재하며, 대부분 로컬 as내에서 발생된 트래핃만 전달(ISP들의 경우 transit AS역할도 함)
. single-homing AS에서는 bgp 사용을 권장하지않음 (불필요한 as 신청비용 등이 발생하고, 얻을수있는 이점도없다. stub AS와 같은형태)

. bgp 라우팅 확인하기 유용한 명령어

  - show ip bgp neighbors 192.168.12.2 advertised-routes (bgp 피어로 전달하는 송신 라우팅 정보 확인)

  - show ip bgp neighbors 192.168.12.1 routes (bgp 피어로부터 전달받은 수신 라우팅 정보 확인)

 

. bgp메시지 5개타입
  - 타입1 오픈메시지 - 피어관계 확립
  - 타입2 업데이트 메시지 - 라우팅 정보교환
  - 타입3 노티피케이션 메시지 - 문제발생시 문제상황 메시지 전달 및 피어관계 단절
  - 타입4 킵어라이브 메시지 - keepalive 시간은 홀드타임의 1/3에 해당하는시간)
  - 타입5 루트 리프레쉬 메시지 - 전체 라우팅 업데이트를 피어에게 요구시. (라우터 OS버전에 따라 지원유무 결정) 

 

. bgp 메시지 수신과정
  - bgp 피어간 tcp (179번포트)세션 확립 후 오픈메시지 send
  - bgp피어에 자신을 소개하고 피어관계 확립
  - 주기적으로 잔달되는 keepalive 메시지를통해 피어상태확인
  - 업데이트 메시지통해 라우티우정보 교환
  - 문제 발생시  노티피케이션 메시지 통해 문제알려주고 피어관계 단절

 

. bgp 유한상태

  - 순서 : Idle -> Connect -> Active -> OpenSent -> OpenConfirm -> Established

  - Idle : 최초의 bgp 상태. 아무동작을 하지않는 상태

  - Connect : 피어간 TCP 연결시도 using TCP port# 179

  - Active : TCP 연결이 이뤄지지않아 TCP연결을 재시도하는 상태

  - OpenSent : TCP연결이 확립된 후, BGP 동작에서 최초로 보내는 메시지. (오픈 메시지)

  - OpenConfirm : 피어로부터 받은 오픈메시지가 유효한지 판단. 유효하면 킵얼라이브 메시지 전송을 통해 통보

  - Established : 피어간 교환한 오픈메시지가 서로 유효하다는 킵얼라이브 메시지 수신을 통해 이뤄지며, 피어관계를 맺는 모든 과정이 종료

 

. bgp 테이블

  - RIB란 : 각 라우팅 프로토콜로부터 선택된 베스트 경로는 라우팅 테이블에 등록될 수 있는 기본 정보로, RIB라고 함

  - RIB 종류 : Local RIB와 Adj-RIB (Adj-RIB-In는 bgp피어로부터 수신한 라우팅, Adj-RIB-Out는 bgp피어에게 전달할 라우팅 정보보관)

 

. ebgp 피어링

  - as number가 다른 라우터간 피어링 (루프백 인터페이스 간에도 피어링 가능)

  - ebgp 세션에 대한 IP 패킷은 TTL  1로 디폴트 사용. (neighbor "peer ip address" ebgp-multihop 5 과 같이 설정하여 홉 수를 변경가능하며, IP통신이 가능해야하므로, 통신하고자하는 라우터간 static routing을 잡아준다.)

  - 루프백 인터페이스로 피어링하는 경우는 (neighbor "peer ip address" update-source "interface" 를 통해 update-source를 루프백 인터페이스로 업데이트해주는것이 필요) ebgp피어간에 두개이상의 물리적인 링크가 존재하는 경우

  - bgp가 as관점에서 동작하기 때문에 부하 분산이 지원되지않으므로 루프백 인터페이스 IP를 이용해 IGP 혹은 스태틱 루트의 부하분산 기능을 통해 bgp 네트워크 부하분산을 구현하기도 함

 

. ibgp 피어링

  - 여러개의 ebgp 라우터가 존재하는 경우 ebgp 피어 역할을 하는 라우터 간에 bgp 정보를 교환해야 하기 때문에 ibgp 피어가 필요함. as내부에서 ebgp피어의 역할을 수행하는 라우터 간을 연결한다는 것은 as 내부의 끝과 끝을 연결한다는 의미

  - ibgp패킷은 as 종단 라우터와 다른 종단 라우터 간의 통신을 위해 ip 패킷의 디폴트 ttl인 255를 사용

  - ebgp는 as종단라우터 간의 피어링이기 때문에 ebgp 피어링을 위한 ip로 직접 연결된 인터페이스의 ip를 사용하는 것을 권장. ibgp는 bgp세션의 안정성을 위해 루프백 인터페이스의 ip를 사용해 ibgp 피어링하는 것을 권장 (ibgp는 특정 physical인터페이스가 다운되더라도 계속동작될수있게끔 루프백으로 피어링 하는것을 추천)

  - 루프백으로 피어링맺는것을 추천하기때문에 update-source command를 이용해 추가설정 필요 (neighbor "peer ip address" update-source "interface" 를 통해 update-source를 루프백 인터페이스로 업데이트해주는것이 필요) 

  - ibgp 피어 정보전달 제약 : 

 

. bgp 동기화

  - as내부에 bgp비구동 라우터로 인한 라우팅 문제를 해결하기 위해 사용되는 기술

  - bgp 비구동 라우터는 bgp라우터에게서 받은 라우팅요청을 포워딩은 하지만, 로컬 라우팅 테이블에 업데이트는 하지않으므로, 해당 라우팅 정보가 없음

  - as 내에 존재하는 bgp 라우터의 bgp정보와 igp 정보의 동기화 확인함으로써 bgp 비구동 라우터의 블랙홀 현상을 미연에 방지

 

.bgp 네트워크 정보 생성방법 3가지

   - network 명령어 사용 : 선언하고자하는 네트워크 정보가 해당 라우터 라우팅 테이블에 반드시 존재. subnet이 다를경우 정보 생성되지않음. (i.e. 200.1.1.0/24의 네트워크 bgp선언 시, 라우팅에 200.1.1.0/23이 존재하여도, 생성안됨) 원하는 네트워크 생성을위해 의미 없는 라우팅 정보 설정해야하는 경우도 있음 (i.e. ip route 200.5.1.0 255.255.255.0 null 0)

  - 재분배 (Redistribution) 사용 : i.e. router bgp 10     redistribute static

  - 네트워크 축약 (network aggregation) : 여러개의 작은 네트워크 정보를 하나의 큰 네트워크 정보로 표현해 네트워크 정보의 안정성향상과 시스템 자원 사용량 줄이기 위한 방법   (i.e. router bgp 10    aggregate0address 150.1.0.0 255.255.254.0)

 

. bgp 네트워크 필터링

  - 세부 네트워크 단위 필터링 : 소규모 단위 필터링 기법. 가장 일반적으로 사용되는 필터링. (access-list, prefix-list사용. prefix-list 사용법 권장)

      : i.e.) access-list 10 deny 10.0.0.0 0.255.255.255      access-list 10 permit any

      :      router bgp 10     neighbor 192.168.12.2 distribute-list 10 out

      :      show ip bgp neighbors 192.168.12.2 advertised-routes (bgp 피어로 전달하는 송신 라우팅 정보 확인)

      :      show ip bgp neighbors 192.168.12.1 routes (bgp 피어로부터 전달받은 수신 라우팅 정보 확인)

      : i.e.) ip access-list standard SetFilter     permit 10.0.1.0 0.0.0.255     permit 10.0.2.0 0.0.0.255

      :      router bgp 10     neighbor 192.168.12.3 distribute-list SetFilter in

      : i.e.) ip prefix-list SetFilterOut deny 10.0.0.0/8 le 32     ip prefix-list SetFilterOut permit 0.0.0.0/0 le 32

      :      router bgp 10     neighbor 192.168.12.5 prefix-list SetFilterOut out

  - 정규표현법을 이용한 as 단위에 의한 필터링

      : i.e.) ip as-path access-list 1 deny _101$     ip as-path access-list 1 permit .*

      :      router bgp 450     neighbor 192.168.34.4 filter-list 1 in

  - 루트맵을 이용한 필터링

 

 

<Reference>

 - 저서: 시스코 라우팅 완전분석 by 정철윤