BGP Route Server를 통한 WAN 라우팅 중앙 관리 #2

지난 번부터 계속되었습니다.
  • 제1회:BGP Route Server를 이용한 WAN 네트워크 설계
  • 제2회:BGP Route Server에 의한 WAN 경로의 일원 관리 “←” 이번은 코코

  • BGP Route Server를 통한 WAN 경로의 중앙 관리



    BGP Route Server는 다른 모든 라우터와 피어링되므로 제한이 있지만 라우팅에 개입할 수 있습니다.

    네트워크 구성



    전회의 소식이 됩니다만, WAN의 통신 경로는 이하와 같이, WAN1을 상시 이용하고 있습니다.



    예를 들면 작업이나 메인터넌스 등으로 AS65010에서 WAN#1의 경로를 이용시키지 않는 케이스가 있다고 합니다. 이러한 경우, 미리 통신을 멈추지 않고 다음과 같은 경로로 변경할 수 있는 것이 이상적입니다.



    이 작업이라면 BGP Route Server의 설정 변경만으로 통신 우회가 가능합니다. 구체적으로는 BGP Route Server에서 AS65010으로 WAN # 1을 통해 라우팅 할 때 모든 라우팅 정보에 MED : 100을 부여하고 BGP Route Server에서 AS65011, AS65012로 WAN # 1을 통해 라우팅 할 때, AS65010에서 수신한 경로 정보에 MED:100을 부여합니다. 원래의 컨피그를 활용한 설정이므로, 우선은 원래의 컨피그로부터 봐 갑니다.

    AS65001_Cisco841MJ
    router bgp 65001
     route-server-context WAN1_CONTEXT
      !
      address-family ipv4 unicast
       import-map WAN1_IM
      exit-address-family
     exit-route-server-context
     !
     route-server-context WAN2_CONTEXT
      !
      address-family ipv4 unicast
       import-map WAN2_IM
      exit-address-family
     exit-route-server-context
     !
     bgp router-id 10.0.0.1
     bgp always-compare-med
     bgp log-neighbor-changes
     timers bgp 3 20
     neighbor 10.1.0.10 remote-as 65010
     neighbor 10.1.0.11 remote-as 65011
     neighbor 10.1.0.12 remote-as 65012
     neighbor 10.2.0.10 remote-as 65010
     neighbor 10.2.0.11 remote-as 65011
     neighbor 10.2.0.12 remote-as 65012
    
     address-family ipv4
      neighbor 10.1.0.10 activate
      neighbor 10.1.0.10 send-community
      neighbor 10.1.0.10 route-server-client context WAN1_CONTEXT
      neighbor 10.1.0.10 route-map LOW_PRIORITY out
      neighbor 10.1.0.11 activate
      neighbor 10.1.0.11 send-community
      neighbor 10.1.0.11 route-server-client context WAN1_CONTEXT
      neighbor 10.1.0.11 route-map WAN1_OUT out
      neighbor 10.1.0.12 activate
      neighbor 10.1.0.12 send-community
      neighbor 10.1.0.12 route-server-client context WAN1_CONTEXT
      neighbor 10.1.0.12 route-map WAN1_OUT out
      neighbor 10.2.0.10 activate
      neighbor 10.2.0.10 send-community
      neighbor 10.2.0.10 route-server-client context WAN2_CONTEXT
      neighbor 10.2.0.10 route-map WAN2_OUT out
      neighbor 10.2.0.11 activate
      neighbor 10.2.0.11 send-community
      neighbor 10.2.0.11 route-server-client context WAN2_CONTEXT
      neighbor 10.2.0.11 route-map WAN2_OUT out
      neighbor 10.2.0.12 activate
      neighbor 10.2.0.12 send-community
      neighbor 10.2.0.12 route-server-client context WAN2_CONTEXT
      neighbor 10.2.0.12 route-map WAN2_OUT out
     exit-address-family
    !
    ip forward-protocol nd
    no ip http server
    no ip http secure-server
    !
    ip bgp-community new-format
    ip community-list 1 permit 65001:1
    ip community-list 2 permit 65001:2
    
    route-map WAN2_IM permit 10
     match community 2
    
    route-map WAN1_IM permit 10
     match community 1
    
    route-map WAN1_OUT permit 100
     set community none
    
    route-map WAN2_OUT permit 100
     set community none
    

    WAN # 1 용 피어에는 WAN1_OUT이라는 route-map이 정의되어 있지만 AS65010 용에는 다른 route-map을 적용하고 AS65011, 65012 용은 WAN1_OUT의 route-map을 그대로 유효 활용합니다. . 추가할 구성은 다음과 같습니다.

    AS65001_Cisco841MJ
    route-map LOW_PRIORITY permit 10
     set metric 100
     set community none
    
    ip as-path access-list 1 permit ^65010$
    
    route-map WAN1_OUT permit 10
     match as-path 1
     set metric 100
     set community none
    
    router bgp 65001
     address-family ipv4 unicast
      neighbor 10.1.0.10 route-map LOW_PRIORITY out
    end
    
    clear ip bgp * soft
    

    이렇게하면 AS65010의 경로가 전환됩니다. AS65010에서 BGP 테이블, 라우팅 테이블을 확인합니다.

    AS65010_Cisco1812J
    R65010>sh ip bgp
    BGP table version is 197, local router ID is 10.0.0.10
    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
    *> 10.0.0.10/32     0.0.0.0                  0         32768 i
    *  10.0.0.11/32     10.1.0.11              100             0 65011 i
    *>                  10.2.0.11               20             0 65011 i
    *  10.0.0.12/32     10.1.0.12              100             0 65012 i
    *>                  10.2.0.12               20             0 65012 i
    r  10.1.0.0/24      10.1.0.12              100             0 65012 i
    r>                  10.2.0.12               20             0 65012 i
    r  10.2.0.0/24      10.1.0.12              100             0 65012 i
    r>                  10.2.0.12               20             0 65012 i
    *> 172.16.1.0/24    0.0.0.0                  0         32768 i
    *  172.16.2.0/24    10.1.0.11              100             0 65011 i
    *>                  10.2.0.11               20             0 65011 i
    *  172.16.3.0/24    10.1.0.12              100             0 65012 i
    *>                  10.2.0.12               20             0 65012 i
    R65010>sh ip route
    Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
           D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
           N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
           E1 - OSPF external type 1, E2 - OSPF external type 2
           i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
           ia - IS-IS inter area, * - candidate default, U - per-user static route
           o - ODR, P - periodic downloaded static route
    
    Gateway of last resort is not set
    
         172.16.0.0/24 is subnetted, 3 subnets
    C       172.16.1.0 is directly connected, Loopback1
    B       172.16.2.0 [20/20] via 10.2.0.11, 02:48:17
    B       172.16.3.0 [20/20] via 10.2.0.12, 02:48:17
         10.0.0.0/8 is variably subnetted, 5 subnets, 2 masks
    C       10.0.0.10/32 is directly connected, Loopback0
    B       10.0.0.11/32 [20/20] via 10.2.0.11, 02:48:17
    B       10.0.0.12/32 [20/20] via 10.2.0.12, 02:48:17
    C       10.2.0.0/24 is directly connected, FastEthernet1
    C       10.1.0.0/24 is directly connected, FastEthernet0
    

    BGP 테이블에서 WAN#1 경유의 라우팅 정보에 MED:100이 부여되어 라우팅 테이블에서 다른 AS로의 NextHop이 WAN#2 경유(10.2.0.xx)로 되어 있는 것을 알 수 있습니다.

    AS65011의 BGP 테이블, 라우팅 테이블은 다음과 같습니다.

    AS65011_EdgeRouter-X
    ubnt@ubnt2:~$ show ip bgp  
    BGP table version is 0, local router ID is 10.0.0.11
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
                  r RIB-failure, S Stale, R Removed
    Origin codes: i - IGP, e - EGP, ? - incomplete
    
       Network          Next Hop            Metric LocPrf Weight Path
    *  10.0.0.10/32     10.1.0.10              100             0 65010 i
    *>                  10.2.0.10               20             0 65010 i
    *> 10.0.0.11/32     0.0.0.0                  1         32768 i
    *  10.0.0.12/32     10.2.0.12               20             0 65012 i
    *>                  10.1.0.12               10             0 65012 i
    *  10.1.0.0/24      10.2.0.12               20             0 65012 i
    *>                  10.1.0.12               10             0 65012 i
    *  10.2.0.0/24      10.2.0.12               20             0 65012 i
    *>                  10.1.0.12               10             0 65012 i
    *  172.16.1.0/24    10.1.0.10              100             0 65010 i
    *>                  10.2.0.10               20             0 65010 i
    *> 172.16.2.0/24    0.0.0.0                  1         32768 i
    *  172.16.3.0/24    10.2.0.12               20             0 65012 i
    *>                  10.1.0.12               10             0 65012 i
    
    Total number of prefixes 8
    ubnt@ubnt2:~$ show ip route
    Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
           I - ISIS, B - BGP, > - selected route, * - FIB route
    
    B>* 10.0.0.10/32 [20/20] via 10.2.0.10, eth2, 02:45:10
    C>* 10.0.0.11/32 is directly connected, lo
    B>* 10.0.0.12/32 [20/10] via 10.1.0.12, eth1, 02:51:23
    B   10.1.0.0/24 [20/10] via 10.1.0.12 inactive, 02:51:23
    C>* 10.1.0.0/24 is directly connected, eth1
    B   10.2.0.0/24 [20/10] via 10.1.0.12, 02:51:23
    C>* 10.2.0.0/24 is directly connected, eth2
    C>* 127.0.0.0/8 is directly connected, lo
    B>* 172.16.1.0/24 [20/20] via 10.2.0.10, eth2, 02:45:10
    C>* 172.16.2.0/24 is directly connected, eth3
    B>* 172.16.3.0/24 [20/10] via 10.1.0.12, eth1, 02:51:23
    C>* 192.168.1.0/24 is directly connected, eth0
    

    AS65010에 대한 NextHop은 WAN#2 경유(10.2.0.xx)이고 AS65012에 대한 NextHop은 WAN#1 경유(10.1.0.xx)로 되어 있음을 알 수 있습니다.

    마지막으로 AS65012의 BGP 테이블, 라우팅 테이블도 살펴보겠습니다.

    AS65012_JuniperSRX100
    root@R65012> show route receive-protocol bgp 10.1.0.1        
    
    inet.0: 11 destinations, 15 routes (11 active, 0 holddown, 0 hidden)
      Prefix                  Nexthop              MED     Lclpref    AS path
      10.0.0.10/32            10.1.0.10            100                65010 I
    * 10.0.0.11/32            10.1.0.11            10                 65011 I
      172.16.1.0/24           10.1.0.10            100                65010 I
    * 172.16.2.0/24           10.1.0.11            10                 65011 I
    
    root@R65012> show route receive-protocol bgp 10.2.0.1        
    
    inet.0: 11 destinations, 15 routes (11 active, 0 holddown, 0 hidden)
      Prefix                  Nexthop              MED     Lclpref    AS path
    * 10.0.0.10/32            10.2.0.10            20                 65010 I
      10.0.0.11/32            10.2.0.11            20                 65011 I
    * 172.16.1.0/24           10.2.0.10            20                 65010 I
      172.16.2.0/24           10.2.0.11            20                 65011 I
    
    root@R65012> show route 
    
    inet.0: 11 destinations, 15 routes (11 active, 0 holddown, 0 hidden)
    + = Active Route, - = Last Active, * = Both
    
    10.0.0.10/32       *[BGP/170] 1w0d 02:07:30, MED 20, localpref 100, from 10.2.0.1
                          AS path: 65010 I
                        > to 10.2.0.10 via fe-0/0/3.0
                        [BGP/170] 1w0d 02:07:30, MED 100, localpref 100, from 10.1.0.1
                          AS path: 65010 I
                        > to 10.1.0.10 via fe-0/0/2.0
    10.0.0.11/32       *[BGP/170] 1w0d 02:13:43, MED 10, localpref 100, from 10.1.0.1
                          AS path: 65011 I
                        > to 10.1.0.11 via fe-0/0/2.0
                        [BGP/170] 1w0d 02:13:43, MED 20, localpref 100, from 10.2.0.1
                          AS path: 65011 I
                        > to 10.2.0.11 via fe-0/0/3.0
    10.0.0.12/32       *[Direct/0] 1w0d 10:27:12
                        > via lo0.0
    10.1.0.0/24        *[Direct/0] 1w0d 10:06:44
                        > via fe-0/0/2.0    
    10.1.0.12/32       *[Local/0] 1w0d 10:47:20
                          Local via fe-0/0/2.0
    10.2.0.0/24        *[Direct/0] 1w0d 09:52:01
                        > via fe-0/0/3.0
    10.2.0.12/32       *[Local/0] 1w0d 10:47:20
                          Local via fe-0/0/3.0
    172.16.1.0/24      *[BGP/170] 1w0d 02:07:30, MED 20, localpref 100, from 10.2.0.1
                          AS path: 65010 I
                        > to 10.2.0.10 via fe-0/0/3.0
                        [BGP/170] 1w0d 02:07:30, MED 100, localpref 100, from 10.1.0.1
                          AS path: 65010 I
                        > to 10.1.0.10 via fe-0/0/2.0
    172.16.2.0/24      *[BGP/170] 1w0d 02:13:43, MED 10, localpref 100, from 10.1.0.1
                          AS path: 65011 I
                        > to 10.1.0.11 via fe-0/0/2.0
                        [BGP/170] 1w0d 02:13:43, MED 20, localpref 100, from 10.2.0.1
                          AS path: 65011 I
                        > to 10.2.0.11 via fe-0/0/3.0
    172.16.3.0/24      *[Direct/0] 1w0d 09:30:08
                        > via fe-0/0/1.0
    172.16.3.1/32      *[Local/0] 1w0d 09:30:17
                          Local via fe-0/0/1.0
    

    AS65010에 대한 NextHop은 WAN#2 경유(10.2.0.xx)이고 AS65011에 대한 NextHop은 WAN#1 경유(10.1.0.xx)로 되어 있음을 알 수 있습니다.

    이러한 방식으로 BGP Route Server를 통해 각 AS의 라우팅을 수행할 수 있습니다. 사실은 AS-PATH의 추가로 라우팅을 하는 편이 Transit AS가 들어왔을 때에도 유연하게 라우팅할 수 있기 때문에 좋지만, 내가 시도한 한, Cisco의 BGP Route Server에서는 AS-PATH의 추가 할 수없는 것 같습니다 (MED 및 COMMUNITY 속성을 사용할 수 있습니다). AS65010~65012에서는 LOCAL_PREF나 AS-PATH, MED를 이용하여 보다 유연한 라우팅이 가능합니다.

    결론



    이번에는 BGP Route Server를 이용한 WAN 네트워크 라우팅을 살펴 보았습니다. 이 구성을 사용하면 BGP Route Server에서만 라우팅할 수 있으므로 라우팅을 자동화할 수 있습니다. 시도할 수는 없지만, 피어의 AS-PATH와 IP 주소 정보를 변수로 하면, Ansible등을 사용해 BGP Route Server로부터 각 AS의 경로의 전환을 한번에 할 수 있게 된다고 생각합니다.

    좋은 웹페이지 즐겨찾기