Vagrant + VirtualBox + VyOS로 eBGP로 라우팅 체험하기

18522 단어 BGPVagrantVyOS

소개



대규모 네트워크를 지원하는 기술로 등장하는 「BGP」를 배우고 싶은 기분이 있어, 연휴중에 여러가지 해 보았습니다.
이번 기사에서는, 아래와 같이 다른 AS 번호를 가지는 라우터끼리를 eBGP로 연결해, ping 패킷의 라우팅을 골로 이야기를 할 수 있으면 좋겠습니다.
(Vagrant가 있으면 누구나 빨리 시험 할 수 있도록 검증 환경 구축 방법이 아래에 있습니다 mm)



BGP란?



BGP는 Border Gateway Protocol의 약자입니다. 한마디로 통신을 라우팅하기 위한 구조의 하나입니다.
이번은 자세한 해설은 날리겠지만, 인터넷의 기간에 가까운 부분(통신 프로바이더 등)이나 데이터 센터 내에서 주로 이용되고 있는 구조입니다.

Border Gateway Protocol(보더 게이트웨이 프로토콜, 약칭 : BGP)은 인터넷의 핵심이 되는 라우팅 프로토콜이다. 인터넷에서 가장 큰 구성요소가 되는 자율시스템(Autonomous System: AS)의 관리자의 정책을 AS간의 라우팅에 반영시키는 것을 목적으로 설계되었다.
(출처: htps : // 그럼.ぃきぺぢ아. 오 rg / 우키 / 보 r에서 r_가 주름 y_P 여과 l )

참고 : 인터넷 10분 강좌: BGP
참고 : 데이터 센터 내에서 사용되는 BGP의 기본 지식

필요한 물건


  • Vagrant (2.2.3)
  • VirtualBox (5.1.22)

  • 환경 만들기



    Vagrant를 사용해 환경 구축을 진행하기 전에, VyOS의 설정·조작이 가능하게 되는 플러그인을 도입합니다.
    $ vagrant plugin install vagrant-vyos
    

    플러그인이 도입되면 아래를 참고로 Vagrantfile을 작성 & vagrant up합니다.
    세 개의 VyOS VM 인스턴스가 자동으로 생성되고 Vagrantfile에 작성된 IP 주소가 자동으로 부여됩니다.
    ※이 파일을 변경함으로써 IP 주소의 초기값 등을 설정할 수 있습니다.
    $ vim Vagrantfile
    # -*- mode: ruby -*-
    # vi: set ft=ruby :
    
    Vagrant.configure("2") do |config|
      config.vm.box = "higebu/vyos"
    
      config.vm.define :vyos1 do | vyos |
        vyos.vm.hostname = "vyos1"
        vyos.vm.network :private_network, ip: "192.168.33.1", virtualbox__intnet: "intnet1"
      end
    
      config.vm.define :vyos2 do | vyos |
        vyos.vm.hostname = "vyos2"
        vyos.vm.network :private_network, ip: "192.168.33.2", virtualbox__intnet: "intnet1"
        vyos.vm.network :private_network, ip: "192.168.34.1", virtualbox__intnet: "intnet2"
      end
    
      config.vm.define :vyos3 do | vyos |
        vyos.vm.hostname = "vyos3"
        vyos.vm.network :private_network, ip: "192.168.34.2", virtualbox__intnet: "intnet2"
      end
    end
    # VyOS1を起動
    $ vagrant up vyos1
    # VyOS2を起動
    $ vagrant up vyos2
    # VyOS3を起動
    $ vagrant up vyos3
    
    

    VyOS Provision



    VyOS에 vagrant ssh로 로그인하고 configure 모드에서 set 명령을 두드리면 VyOS 설정이 엉망입니다.
    이번 설정에서는 먼저 lo, dum0 등의 인터페이스 설정 & BGP에 의한 피어링 & 보조적인 OSPF 설정을 하고 있습니다.

    ※ RT1, RT2, RT3가, 192.168.33.0/24・192.168.34.0/24에 대해서 라우팅할 수 있도록 OSPF를 하고 있습니다.
    이것이 없으면 BGP에서 ping 패킷이 라우팅 되더라도 돌아 오는 길에서 이끼가 발생합니다. (RT3이 192.168.33.0/24를 모르기 때문에)
    StaticRouting의 설정을 해도 좋지만, 옆으로 착용했습니다 mm

    VyOS1


    $ vagrant ssh vyos1
    vagrant@vyos1:~$ configure
    # Interfaceの設定
    vagrant@vyos1:~$ set interfaces loopback lo address 1.1.1.1/32
    vagrant@vyos1:~$ set interfaces dummy dum0 address 11.11.11.11/32
    # BGPの設定 (自AS番号=65121)
    vagrant@vyos1:~$ set protocols bgp 65121 neighbor 192.168.33.2 remote-as '65122'
    vagrant@vyos1:~$ set protocols bgp 65121 neighbor 192.168.33.2 soft-reconfiguration inbound
    vagrant@vyos1:~$ set protocols bgp 65121 parameters router-id '1.1.1.1'
    vagrant@vyos1:~$ set protocols bgp 65121 neighbor 192.168.33.2 update-source 192.168.33.1
    vagrant@vyos1:~$ set protocols bgp 65121 network 11.11.11.11/32
    # 192.168.33.0/24を広報する為の補助的なOSPF設定
    # ※ StaticRoutingでも可能
    vagrant@vyos1:~$ set protocols ospf area 0 network 192.168.33.0/24
    vagrant@vyos1:~$ set protocols ospf passive-interface eth0
    vagrant@vyos1:~$ set protocols ospf passive-interface lo
    vagrant@vyos1:~$ set protocols ospf passive-interface dum0
    

    VyOS2


    $ vagrant ssh vyos2
    vagrant@vyos2:~$ configure
    # Interfaceの設定
    vagrant@vyos2:~$ set interfaces loopback lo address 2.2.2.2/32 
    vagrant@vyos2:~$ set interfaces dummy dum0 address 22.22.22.22/32
    # BGPの設定 (自AS番号=65122)
    vagrant@vyos2:~$ set protocols bgp 65122 neighbor 192.168.33.1 remote-as '65121'
    vagrant@vyos2:~$ set protocols bgp 65122 neighbor 192.168.33.1 soft-reconfiguration inbound
    vagrant@vyos2:~$ set protocols bgp 65122 neighbor 192.168.33.1 update-source 192.168.33.2
    vagrant@vyos2:~$ set protocols bgp 65122 neighbor 192.168.34.2 remote-as '65123'
    vagrant@vyos2:~$ set protocols bgp 65122 neighbor 192.168.34.2 soft-reconfiguration inbound
    vagrant@vyos2:~$ set protocols bgp 65122 neighbor 192.168.34.2 update-source 192.168.34.1
    vagrant@vyos2:~$ set protocols bgp 65122 parameters router-id '2.2.2.2'
    vagrant@vyos2:~$ set protocols bgp 65122 network 22.22.22.22/32
    # 192.168.33.0/24及び192.168.34.0/24を広報する為の補助的なOSPF設定
    vagrant@vyos2:~$ set protocols ospf area 0 network 192.168.33.0/24
    vagrant@vyos2:~$ set protocols ospf area 0 network 192.168.34.0/24
    vagrant@vyos2:~$ set protocols ospf passive-interface eth0
    vagrant@vyos2:~$ set protocols ospf passive-interface lo
    vagrant@vyos2:~$ set protocols ospf passive-interface dum0
    

    VyOS3


    $ vagrant ssh vyos3
    vagrant@vyos3:~$ configure
    # Interfaceの設定
    vagrant@vyos3:~$ set interfaces loopback lo address 3.3.3.3/32 
    vagrant@vyos3:~$ set interfaces dummy dum0 address 33.33.33.33/32
    # BGPの設定 (自AS番号=65123)
    vagrant@vyos3:~$ set protocols bgp 65123 neighbor 192.168.34.1 remote-as '65122'
    vagrant@vyos3:~$ set protocols bgp 65123 neighbor 192.168.34.1 soft-reconfiguration inbound
    vagrant@vyos3:~$ set protocols bgp 65123 parameters router-id '3.3.3.3'
    vagrant@vyos3:~$ set protocols bgp 65123 neighbor 192.168.34.1 update-source 192.168.34.2
    vagrant@vyos3:~$ set protocols bgp 65123 network 33.33.33.33/32
    # 192.168.34.0/24を広報する為の補助的なOSPF設定
    vagrant@vyos3:~$ set protocols ospf area 0 network 192.168.34.0/24
    vagrant@vyos3:~$ set protocols ospf passive-interface eth0
    vagrant@vyos3:~$ set protocols ospf passive-interface lo
    vagrant@vyos3:~$ set protocols ospf passive-interface dum0
    

    설정 확인



    VyOS1



    RT2, RT3의 dum0이 BGP 경유로 홍보되어 라우팅 테이블에 들어가 있는 것을 확인할 수 있습니다.
    (나중에 OSPF를 통해 192.168.34.0/24도)
    
    vagrant@vyos1:~$ show ip bgp
    BGP table version is 0, local router ID is 1.1.1.1
    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
    *> 11.11.11.11/32   0.0.0.0                  1         32768 i
    *> 22.22.22.22/32   192.168.33.2             1             0 65122 i
    *> 33.33.33.33/32   192.168.33.2                           0 65122 65123 i
    
    Total number of prefixes 3
    vagrant@vyos1:~$ show ip route
    Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
           I - ISIS, B - BGP, > - selected route, * - FIB route
    
    S>* 0.0.0.0/0 [210/0] via 10.0.2.2, eth0
    C>* 1.1.1.1/32 is directly connected, lo
    C>* 10.0.2.0/24 is directly connected, eth0
    C>* 11.11.11.11/32 is directly connected, dum0
    B>* 22.22.22.22/32 [20/1] via 192.168.33.2, eth1, 01:47:36
    B>* 33.33.33.33/32 [20/0] via 192.168.33.2, eth1, 01:41:05
    C>* 127.0.0.0/8 is directly connected, lo
    O   192.168.33.0/24 [110/10] is directly connected, eth1, 01:01:09
    C>* 192.168.33.0/24 is directly connected, eth1
    O>* 192.168.34.0/24 [110/20] via 192.168.33.2, eth1, 01:00:24
    

    VyOS2



    RT1, RT3의 dum0이 BGP 경유로 홍보되어 라우팅 테이블에 들어가 있는 것을 확인할 수 있습니다.
    
    vagrant@vyos2:~$ show ip bgp
    BGP table version is 0, local router ID is 2.2.2.2
    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
    *> 11.11.11.11/32   192.168.33.1             1             0 65121 i
    *> 22.22.22.22/32   0.0.0.0                  1         32768 i
    *> 33.33.33.33/32   192.168.34.2             1             0 65123 i
    
    Total number of prefixes 3
    vagrant@vyos2:~$ show ip route
    Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
           I - ISIS, B - BGP, > - selected route, * - FIB route
    
    S>* 0.0.0.0/0 [210/0] via 10.0.2.2, eth0
    C>* 2.2.2.2/32 is directly connected, lo
    C>* 10.0.2.0/24 is directly connected, eth0
    B>* 11.11.11.11/32 [20/1] via 192.168.33.1, eth1, 01:49:20
    C>* 22.22.22.22/32 is directly connected, dum0
    B>* 33.33.33.33/32 [20/1] via 192.168.34.2, eth2, 01:42:23
    C>* 127.0.0.0/8 is directly connected, lo
    O   192.168.33.0/24 [110/10] is directly connected, eth1, 01:01:48
    C>* 192.168.33.0/24 is directly connected, eth1
    O   192.168.34.0/24 [110/10] is directly connected, eth2, 01:01:48
    C>* 192.168.34.0/24 is directly connected, eth2
    

    VyOS3



    RT1, RT2의 dum0이 BGP 경유로 홍보되어 라우팅 테이블에 들어가 있는 것을 확인할 수 있습니다.
    (나중에 OSPF를 통해 192.168.33.0/24도)
    vagrant@vyos3:~$ show ip bgp
    BGP table version is 0, local router ID is 3.3.3.3
    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
    *> 11.11.11.11/32   192.168.34.1                           0 65122 65121 i
    *> 22.22.22.22/32   192.168.34.1             1             0 65122 i
    *> 33.33.33.33/32   0.0.0.0                  1         32768 i
    
    Total number of prefixes 3
    vagrant@vyos3:~$ show ip route
    Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
           I - ISIS, B - BGP, > - selected route, * - FIB route
    
    S>* 0.0.0.0/0 [210/0] via 10.0.2.2, eth0
    C>* 3.3.3.3/32 is directly connected, lo
    C>* 10.0.2.0/24 is directly connected, eth0
    B>* 11.11.11.11/32 [20/0] via 192.168.34.1, eth1, 01:43:17
    B>* 22.22.22.22/32 [20/1] via 192.168.34.1, eth1, 01:43:17
    C>* 33.33.33.33/32 is directly connected, dum0
    C>* 127.0.0.0/8 is directly connected, lo
    O>* 192.168.33.0/24 [110/20] via 192.168.34.1, eth1, 01:01:00
    O   192.168.34.0/24 [110/10] is directly connected, eth1, 01:01:50
    C>* 192.168.34.0/24 is directly connected, eth1
    

    Ping 소통 테스트



    VyOS1⇢dum0 on VyOS3




    
    vagrant@vyos1:~$ ping 33.33.33.33
    PING 33.33.33.33 (33.33.33.33) 56(84) bytes of data.
    64 bytes from 33.33.33.33: icmp_req=1 ttl=63 time=0.578 ms
    64 bytes from 33.33.33.33: icmp_req=2 ttl=63 time=0.540 ms
    64 bytes from 33.33.33.33: icmp_req=3 ttl=63 time=0.596 ms
    ^C
    --- 33.33.33.33 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 1998ms
    rtt min/avg/max/mdev = 0.540/0.571/0.596/0.030 ms
    vagrant@vyos1:~$ traceroute  33.33.33.33
    traceroute to 33.33.33.33 (33.33.33.33), 30 hops max, 60 byte packets
     1  192.168.33.2 (192.168.33.2)  0.797 ms  0.639 ms  0.576 ms
     2  33.33.33.33 (33.33.33.33)  1.650 ms  1.674 ms  1.631 ms
    

    VyOS3⇢dum0 on VyOS1




    
    vagrant@vyos3:~$ ping 11.11.11.11
    PING 11.11.11.11 (11.11.11.11) 56(84) bytes of data.
    64 bytes from 11.11.11.11: icmp_req=1 ttl=63 time=0.652 ms
    64 bytes from 11.11.11.11: icmp_req=2 ttl=63 time=0.581 ms
    64 bytes from 11.11.11.11: icmp_req=3 ttl=63 time=0.624 ms
    ^C
    --- 11.11.11.11 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2001ms
    rtt min/avg/max/mdev = 0.581/0.619/0.652/0.029 ms
    vagrant@vyos3:~$ traceroute  11.11.11.11
    traceroute to 11.11.11.11 (11.11.11.11), 30 hops max, 60 byte packets
     1  192.168.34.1 (192.168.34.1)  0.252 ms  0.203 ms  0.210 ms
     2  11.11.11.11 (11.11.11.11)  0.479 ms  0.404 ms  0.615 ms
    

    마지막으로



    무사히 BGP를 사용한 패킷의 라우팅 동작을 확인할 수 있었습니다.
    Vagrant + VirtualBox + VyOS의 활용으로, 바삭바삭과 네트워크 주위의 가상 환경을 구축할 수 있으므로, 꼭 이것을 씨앗에 여러가지 놀아 주시면 좋겠습니다.

    좋은 웹페이지 즐겨찾기