커뮤니티를 통한 네트워크 조정
커뮤니티는 4바이트 값을 가지는 옵셔널 트랜지티브 속성으로 커뮤니티는 네트워크를 특정 그룹으로 묶어서 라우팅 설정을 편리하게 적용할 수 있다.
특히 ISP급 인터넷 망을 구성시에 커뮤니티를 주로 사용한다.
커뮤니티 값 종류
커뮤니티의 설정방법 및 생성단계
- 네트워크의 커뮤니티 값을 설정하려면 루트 맵에서 set community 명령어를 사용한다.
- 특정 커뮤니티 값을 가진 네트워크를 지정하려면 커뮤니티 리스트를 이용하여 해당 커뮤니티를 지정한 다음, 루트 맵에서 match community 1 명령어를 사용한다.
- 특정 커뮤니티 값을 지우려면 커뮤니티 리스트를 이용하여 해당 커뮤니티를 지정한 다음 루트맵에서 set comm-list 1 delete 명령어를 사용한다.
- 커뮤니티 리스트를 만들려면 전체설정모드에서 ip community-list 명령어를 사용한다.
실습
기본설정
R1
en
conf t
int lo 0
ip add 1.1.1.1 255.255.255.0
ip ospf network point-to-point
int e0/0
ip add 1.1.12.1 255.255.255.0
no shut
int e0/1
ip add 1.1.13.1 255.255.255.0
no shut
router ospf 1
router-id 1.1.1.1
network 1.1.1.1 0.0.0.0 area 0
network 1.1.12.1 0.0.0.0 area 0
passive-interface e0/1
router bgp 12
bgp router-id 1.1.1.1
network 1.1.1.0 mask 255.255.255.0
neighbor 1.1.2.2 remote-as 12
neighbor 1.1.2.2 update-source lo 0
neighbor 1.1.2.2 next-hop-self
neighbor 1.1.13.3 remote-as 3
R2
en
conf t
int lo 0
ip add 1.1.2.2 255.255.255.0
ip ospf network point-to-point
int e0/0
ip add 1.1.12.2 255.255.255.0
no shut
int e0/1
ip add 1.1.24.2 255.255.255.0
no shut
router ospf 2
router-id 1.1.2.2
network 1.1.2.2 0.0.0.0 area 0
network 1.1.12.2 0.0.0.0 area 0
passive-interface e0/2
passive-interface e0/1
router bgp 12
bgp router-id 1.1.2.2
network 1.1.2.0 mask 255.255.255.0
neighbor 1.1.24.4 remmote-as 4
neighbor 1.1.1.1 remote-as 12
neighbor 1.1.1.1 update-source lo 0
neighbor 1.1.1.1 next-hop-self
R3
en
conf t
int lo 0
ip add 1.1.3.3 255.255.255.0
int e0/1
ip add 1.1.13.3 255.255.255.0
no shut
router bgp 3
bgp router-id 1.1.3.3
network 1.1.3.0 mask 255.255.255.0
neighbor 1.1.13.1 remote-as 12
R4
en
conf t
int lo 0
ip add 1.1.4.4 255.255.255.0
int e0/1
ip add 1.1.24.4 255.255.255.0
no shut
router bgp 4
bgp router-id 1.1.4.4
network 1.1.4.0 mask 255.255.255.0
neighbor 1.1.24.2 remote-as 12
R1
ip prefix-list SET_COM permit 1.1.1.0/24
route-map SET_COM
match ip address prefix-list SET_COM
set community 12:100
router bgp 12
neighbor 1.1.13.3 route-map SET_COM out
neighbor 1.1.13.3 send-community
#1.1.13.3 네이버에 community값을 대입(route-map으로는 네이버에 커뮤니티가 전달되지 않음)
R3
int lo 16
ip add 1.1.16.1 255.255.255.0
ip add 1.1.17.1 255.255.255.0 secondary
ip add 1.1.18.1 255.255.255.0 secondary
ip add 1.1.19.1 255.255.255.0 secondary
router bgp 3
network 1.1.16.0 mask 255.255.255.0
network 1.1.17.0 mask 255.255.255.0
network 1.1.18.0 mask 255.255.255.0
network 1.1.19.0 mask 255.255.255.0
ip prefix-list List16 permit 1.1.16.0/24
ip prefix-list List17 permit 1.1.17.0/24
ip prefix-list List16 permit 1.1.18.0/24
ip prefix-list List17 permit 1.1.19.0/24
ip bgp new-format
route-map Map1 10
match ip add prefix-list List16
set community 3:16
route-map Map1 20
match ip add prefix-list List17
set community internet 3:16 3:17
route-map Map1 30
match ip add prefix-list List18
set community no-advertise 3:18
route-map Map1 40
match ip add prefix-list List19
set community no-export
route-map Map1 50
#빈 값 50을 넣어 prefix-list permit any 구현
router bgp 3
neighbor 1.1.13.1 route-map Map1 out
neighbor 1.1.13.1 send-community
ip bgp new-for
R1
ip bgp new-for
결과
R3에서 설정한 community값이 R1에서 조회된다.
추가로 해당 커뮤니티를 R1의 IBGP에 전파할 수 있다.
R1
router bgp 12
neighbor 1.1.2.2 send-community
R2
ip bgp new-format
결과
List18인 Map1 30이외의 모든 커뮤니티 값이 조회된다. Map1 30은 no-advertise이므로 R1이 네이버로 해당 커뮤니티를 광고하지 않는다.
이제 R4 에도 send-community를 통해 커뮤니티를 광고해보자
R2
router bgp 12
neighbor 1.1.24.4 send-community
ip bgp new-format
R4
ip bgp new-format
결과
List19인 Map1 40은 no-export이므로 다른 AS에는 전파하지 못 하기 때문에 R4에 MAP1 40이 전파되지 못한다.
커뮤니티 리스트
특정 커뮤니티 값을 가진 네트워크를 허용 또는 차단하기 위하여 만든다.
커뮤니티 리스트는 번호를 사용하거나 이름을 사용할 수 있으며, 표준 커뮤니티 리스트와 확장 커뮤니티 리스트가 있다.
표준 커뮤니티 리스트
1-99번호를 사용하고 선택 대상 커뮤니티를 지정할 때 사용한다.
확장 커뮤니티 리스트
직접 선택 대상 커뮤니티 값을 사용할 수 있을 뿐 아니라 레직스를 이용하여 선택하고자 하는 커뮤니티 값을 지정할 수 있으며 100-500 사이의 번호를 이용한다.
커뮤니티 값 지정하기
match community 명령어로 해당 커뮤니티 리스트값을 가지는 특정 네트워크를 허용 또는 차단하거나 속성 값을 조정한다.
ip community-list 1 permit 3:16
route-map Map2 10
match community 1
set local-preference 1000
route-map Map2 20
router bgp 12
neighbor 1.1.13.3 route-map Map2 in
결과
커뮤니티를 이용한 AS 내부 정책 설정
기존에 설정한 R3의 1.1.16-19.0/24 영역에 이어 R4에도 1.1.32-35.0/24의 영역을 만든 뒤 각각 R1/R2에서 R3/R4에게 받아들여지는 네트워크 영역을 set community로 지정하여 AS12가 AS3와 AS4간의 트래픽만을 중계하도록 할 수 있다.
R1
route-map FromAs3
set community 12:34
#inbound community 생성을 통해 R3로 받는 네트워크를 community 12:34로 지정
ip community-list 34 permit 12:34
#지정된 community 12:34를 community-list 34로 지정
route-map ToAs3
match community 34
#커뮤니티 34를 R3로 향하는 경로에 Inbound
#outbound community 생성
router bgp 12
neighbor 1.1.13.3 route-map FromAs3 in
neighbor 1.1.13.3 route-map ToAs3 out
neighbor 1.1.2.2 send-community
#R1과 커뮤니티 영역 공유
R2
route-map FromAs4
set community 12:34
ip community-list 34 permit 12:34
route-map ToAs4
match community 34
router bgp 12
neighbor 1.1.24.4 route-map FromAs4 in
neighbor 1.1.24.4 route-map ToAs4 out
neighbor 1.1.1.1 send-community
#R1에서 R2에게로 커뮤니티 전송
R4
int lo 32
ip add 1.1.32.1 255.255.255.0
ip add 1.1.33.1 255.255.255.0 secondary
ip add 1.1.34.1 255.255.255.0 secondary
ip add 1.1.35.1 255.255.255.0 secondary
router bgp 4
network 1.1.32.0 mask 255.255.255.0
network 1.1.33.0 mask 255.255.255.0
network 1.1.34.0 mask 255.255.255.0
network 1.1.35.0 mask 255.255.255.0
결과
R3와 R4에 경유되는 네트워크들이 커뮤니티 12:34가 되어 R1과 R2가 각각 R3와 R4에게 해당 네트워크를 중계하므로 sh ip bgp시 해당 내용이 조회된다.
주의: 해당 설정은 R3/R4에서 R1/R2로 들어오는 네트워크에 대해 FromAs3/4를 네이버에 in 으로 설정 후 해당 설정을 커뮤니티 리스트에 삽입한 뒤 해당 내용을 ToAs3/4에 설정하고 네이버에 out으로 설정하였다.
그러나, 경로의 우선도에 대한 설정은 inbound의 설정에 R3/R4 > R1/R2로 outbound의 설정에 R1/R2 > R3/R4이므로 반대 방향으로 적용한다.
커뮤니티를 이용한 BGP 테이블 감소 및 정책 적용
커뮤니티와 축약을 동시에 사용하면 원하는 정책을 적용하면서 동시에 다른 AS로 광고하는 BGP 테이블 크기도 감소시킬 수 있다.
R2와 R3에 새로운 링크 e0/2를 추가하고 R3에 새로운 네트워크영역을 BGP에 매칭한 뒤, no-export로 R4에 광고해보자
R2
int e0/2
ip add 1.1.23.2 255.255.255.0
no shut
router bgp 12
neighbor 1.1.23.3 remote-as 3
#새로운 BGP 링크 생성
R3
int e0/2
ip add 1.1.23.3 255.255.255.0
no shut
int lo 20
ip add 201.1.16.1 255.255.255.0
ip add 201.1.17.1 255.255.255.0 secondary
ip add 201.1.18.1 255.255.255.0 secondary
ip add 201.1.19.1 255.255.255.0 secondary
#새로운 네트워크영역 201.1.16.0/22 생성
int lo 21
ip add 201.1.20.1 255.255.255.0
ip add 201.1.21.1 255.255.255.0 secondary
ip add 201.1.22.1 255.255.255.0 secondary
ip add 201.1.23.1 255.255.255.0 secondary
#새로운 네트워크 영역 201.1.20.0/22 생성
ip prefix-list List1 permit 201.1.16.0/22 ge 24 le 24
ip prefix-list List2 permit 201.1.20.0/22 ge 24 le 24
#새로운 네트워크 영역을 prefix-list List1과 List2로 정의
router bgp 3
neighbor 1.1.23.2 remote-as 12
network 201.1.16.0 mask 255.255.255.0
network 201.1.17.0 mask 255.255.255.0
network 201.1.18.0 mask 255.255.255.0
network 201.1.19.0 mask 255.255.255.0
network 201.1.20.0 mask 255.255.255.0
network 201.1.21.0 mask 255.255.255.0
network 201.1.22.0 mask 255.255.255.0
network 201.1.23.0 mask 255.255.255.0
aggregate-address 201.1.16.0 255.255.248.0
#BGP 테이블에 새로 만든 네트워크 추가 및 요약
route-map Map1 10
match ip address prefix-list List1
set metric 0
set community no-export
route-map Map1 20
match ip address prefix-list List2
set metric 1000
set community no-export
route-map Map1 30
#R3에서 R1으로 커뮤니티를 전송할 루트맵 설정
route-map Map2 10
match ip address prefix-list List1
set metric 1000
set community no-export
route-map Map2 20
match ip address prefix-list List2
set metric 0
set community no-export
route-map Map2 30
#R3에서 R2로 커뮤니티를 전송할 루트맵 설정
router bgp 3
neighbor 1.1.13.1 route-map Map1 out
neighbor 1.1.13.1 send-community
neighbog 1.1.23.2 route-map Map2 out
neighbor 1.1.23.2 send-community
결과
기본적으로 aggregate-address 옵션의 경우 summary-only 옵션을 사용하지 않으면 축약된 네트워크와 그 부속 네트워크가 모두 광고되지만, 각각의 네트워크 범위는 no-export로 지정되었기 때문에 AS3에서 AS12를 거쳐 AS4로 광고되지 않는다.
커뮤니티 값에 따른 로컬 프레퍼런스 값 조정
커뮤니티 값을 이용하여 상대 AS에서의 로컬 프레퍼런스 값을 조정할 수 있다.
이 방법을 사용하면 BGP 출력 정책을 더 강력하게 제어할 수 있고, 고객을 위한 출력 정책의 설정 및 관리가 간편해진다.
R1
ip community-list 101 permit 12:100
ip community-list 102 permit 12:200
ip community-list 103 permit 12:300
#커뮤니티 리스트 101-103 선언 후 커뮤니티 12:100/200/300에 매칭
route-map Map123 10
match community 101
set local-preference 100
route-map Map123 20
match community 102
set local-preference 200
route-map Map123 30
match community 103
set local-preference 300
route-map Map123 40
router bgp 12
neighbor 1.1.13.3 route-map Map123 in
neighbor 1.1.2.2 send-community
R2
ip community-list 101 permit 12:100
ip community-list 102 permit 12:200
ip community-list 103 permit 12:300
route-map Map123 10
match community 101
set local-preference 100
route-map Map123 20
match community 102
set local-preference 200
route-map Map123 30
match community 103
set local-preference 300
route-map Map123 40
router bgp 12
neighbor 1.1.23.3 route-map Map123 in
neighbor 1.1.1.1 send-community
R3
ip prefix-list List3 permit 1.1.3.0/24
route-map MapR1 10
match ip address perfix-list List3
set community 12:200
#R3에서 R1으로 연결된 경로의 local-preference를 200으로 설정
route-map MapR1 20
route-map MapR2 10
match ip address prefix-list List3
set community 12:100
#R3에서 R2로 연결된 경로의 local-preference를 100으로 설정
route-map MapR2 20
router bgp 3
neighbor 1.1.13.1 route-map MapR1 out
neighbor 1.1.13.1 send-community
neighbor 1.1.23.2 route-map MapR2 out
neighbor 1.1.23.2 send-community
결과
R3에서 R1으로 향하는 경로에 지정한 local-preference와 커뮤니티 12:200이 조회된다.
R2에서 R3로 향하는 경로 두 가지가 조회되고 R1을 거치는 경로의 local-preference가 200이므로 더욱 링크가 적은 R3>R2의 경로보다 R1을 거치는 경로가 우선시된다.