FRRouting으로 SR-MPLS 이동

(2019년 4월 23일 추가)
Reverse Path Filtering 설정 추가

목적



FRRouting에 구현 된 OSPF의 SR 확장과 Linux Kernel 4.3.0에서 구현 된 MPLS 기능을 사용하여 Segment Routing을 작동시킵니다.
ospf-sr 문서을 참조하여 OSPF에 의한 SID 배포를 확인한 후 iproute2를 사용하여 MPLS의 정적 경로를 설정합니다.

실행 환경


  • Ubuntu16.04
  • Linux kernel 4.15.0-34-generic

  • iproute2 4.18.0
  • FRRouting 6.1-dev

  • 실험 토폴로지



    토폴로지는 다음과 같습니다.

  • 라우터 간 P2P 주소는 172.16.0.x/30
  • 루프백 주소는 192.168.0.x/32
  • 라우터의 숫자는 Node SID입니다. frr1이면 Node SID 17001를 설정

  • 설정



    커널 최신화


    sudo apt install linux-image-extra-4.15.0-15-generic
    

    iproute2 최신화



    @ ebiken 님의 기사 을 참고로 했습니다.
    2-4.18.0 절차 에서는 rm -v doc/arpd.sgml 는 불필요하게 되어 있습니다.
    sudo apt install bison flex make
    wget https://mirrors.edge.kernel.org/pub/linux/utils/net/iproute2/iproute2-4.18.0.tar.gz
    tar xfv iproute2-4.18.0.tar.gz
    cd iproute2-4.18.0
    
    sed -i /ARPD/d Makefile
    rm -fv man/man8/arpd.8
    sed -i 's/.m_ipt.o//' tc/Makefile
    
    make
    sudo make DOCDIR=/usr/share/doc/iproute2-4.18.0 install
    

    FRRouting 설치



    공식 문서 를 참고로.
    daemons는 zebra와 ospfd를 사용합니다.

    다음 설명에서는 위의 절차와 겹칠 수 있습니다.

    커널 모듈 설정


    sudo modprobe mpls_router
    sudo modprobe mpls_gso
    sudo modprobe mpls_iptunnel
    

    를 실행하여 MPLS에 필요한 모듈을 읽습니다.

    sysctl



    포워딩 설정, Reverse Path Filtering 설정, MPLS 전송 및 라벨 상한을 설정합니다.
    sudo sysctl -w net.ipv4.ip_forward=1
    sudo systcl -w net.ipv4.conf.all.rp_filter=0
    sudo sysctl -w net.ipv4.conf.lo.rp_filter=0
    sudo sysctl -w net.mpls.conf.<参加するインターフェース>.input=1
    sudo sysctl -w net.mpls.conf.lo.input=1
    sudo sysctl -w net.mpls.platform_labels=1048575
    

    FRRouting 설정



    OSPF-SR을 설정합니다. frr.conf의 내용은 다음과 같습니다.
    루프백 인터페이스를 OSPF로 홍보합시다.

    /etc/frr/frr.conf (frr1)
    frr version 6.1-dev-MyOwnFRRVersion
    frr defaults traditional
    hostname frr1
    log syslog informational
    service integrated-vtysh-config
    username cumulus nopassword
    !
    interface ens3
     ip address 172.16.0.1/30
     ip ospf area 0.0.0.0
    !
    interface ens4
     ip address 172.16.0.9/30
     ip ospf area 0.0.0.0
    !
    interface lo
     ip address 192.168.0.1/32
     ip ospf area 0.0.0.0
    !
    router ospf
     ospf router-id 192.168.0.1
     router-info area 0.0.0.0
     passive-interface lo
     capability opaque
     mpls-te on
     mpls-te router-address 192.168.0.1
     segment-routing on
     segment-routing global-block 16000 19999
     segment-routing node-msd 8
     segment-routing prefix 192.168.0.1/32 index 1001
    !
    line vty
    !
    log file /var/log/frr/frr.log
    !
    

    frr2 ~ frr4도 마찬가지로.

    라벨 확인



    ip 명령을 사용하여 MPLS 테이블을 확인합니다.
    watal@frr1:~$ ip -M route
    17002 via inet 172.16.0.2 dev ens3 proto ospf
    17003 as to 17003 via inet 172.16.0.2 dev ens3 proto ospf
    17004 via inet 172.16.0.10 dev ens4 proto ospf
    50000 via inet 172.16.0.10 dev ens4 proto ospf
    50001 via inet 172.16.0.10 dev ens4 proto ospf
    50002 via inet 172.16.0.2 dev ens3 proto ospf
    50003 via inet 172.16.0.2 dev ens3 proto ospf
    

    vtysh에 들어가 FRRouting에서도 확인할 수 있습니다.
    frr1# show mpls table
     Inbound                            Outbound
       Label     Type          Nexthop     Label
    --------  -------  ---------------  --------
       17002       SR       172.16.0.2  implicit-null
       17003       SR       172.16.0.2     17003
       17004       SR      172.16.0.10  implicit-null
       50000       SR      172.16.0.10  implicit-null
       50001       SR      172.16.0.10  implicit-null
       50002       SR       172.16.0.2  implicit-null
       50003       SR       172.16.0.2  implicit-null
    
    show ip ospf database segment-routing 명령으로 SR에 대한 정보를 얻을 수 있습니다.
    frr1# show ip ospf database segment-routing
    
                    OSPF Segment Routing database for ID 192.168.0.1
    
    SR-Node: 192.168.0.4    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 8
    
        Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
    ------------------  --------  ---------  ---------------------  ---------  ---------------
        192.168.0.4/32     17004        pop      SR Pfx (idx 1004)       ens4      172.16.0.10
    
    SR-Node: 192.168.0.2    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 8
    
        Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
    ------------------  --------  ---------  ---------------------  ---------  ---------------
        192.168.0.2/32     17002        pop      SR Pfx (idx 1002)       ens3       172.16.0.2
    
    SR-Node: 192.168.0.1    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 8
    
        Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
    ------------------  --------  ---------  ---------------------  ---------  ---------------
        192.168.0.1/32         0          0      SR Pfx (idx 1001)         lo      192.168.0.1
         172.16.0.9/32     50001        pop    SR Adj. (lbl 50001)       ens4      172.16.0.10
         172.16.0.9/32     50000        pop    SR Adj. (lbl 50000)       ens4      172.16.0.10
         172.16.0.1/32     50003        pop    SR Adj. (lbl 50003)       ens3       172.16.0.2
         172.16.0.1/32     50002        pop    SR Adj. (lbl 50002)       ens3       172.16.0.2
    
    SR-Node: 192.168.0.3    SRGB (Size/Label): 4000/16000   Algorithm(s): SPF       MSD: 8
    
        Prefix or Link  Label In  Label Out       Node or Adj. SID  Interface          Nexthop
    ------------------  --------  ---------  ---------------------  ---------  ---------------
        192.168.0.3/32     17003      17003      SR Pfx (idx 1003)       ens3       172.16.0.2
    

    각 노드의 Node SID 정보와 각 인터페이스에 Primary와 Backup의 두 개의 Adjacency SID가 등록되어 있음을 알 수 있습니다.

    그 밖에도 show ip ospf database 명령으로 Opaque-LSA의 ID 4, 7, 8의 정보가. show ip ospf database opaque-area 명령으로 자세한 정보를 볼 수 있습니다.

    정적 경로 설정



    배포 된 레이블을 사용하고 MPLS에서 다음과 같이 라우팅을 수행합니다.



    FRRouting은 MPLS-TE tunnel 설정을 찾을 수 없으므로 iproute2에서 정적 경로를 설정합니다.
    frr1에서 frr3으로 설정
    watal@frr1:~$ sudo ip route add 192.168.0.3/32 encap mpls 17004/17003 via 172.16.0.2
    

    frr3에서도 마찬가지로
    watal@frr3:~$ sudo ip route add 192.168.0.1/32 encap mpls 17002/17001 via 172.16.0.18
    

    frr1에서 frr3으로 ping을 실행하고 frr2 · frr4로 패킷 캡처를 수행합니다.
    소스에 lo를 지정하는 것을 잊지 마십시오.
    watal@frr1:~$ ping 192.168.0.3 -I 192.168.0.1
    PING 192.168.0.3 (192.168.0.3) from 192.168.0.1 : 56(84) bytes of data.
    64 bytes from 192.168.0.3: icmp_seq=1 ttl=63 time=1.31 ms
    64 bytes from 192.168.0.3: icmp_seq=2 ttl=63 time=1.30 ms
    64 bytes from 192.168.0.3: icmp_seq=3 ttl=63 time=1.49 ms
    

    frr2 · frr4로 캡처했습니다.frr2:~$ sudo tcpdump -i ens3 -w frr2.pcap 결과

    frr4:~$ sudo tcpdump -i ens4 -w frr4.pcap 결과


    MPLS는 세그먼트 목록이되는 레이블 스택을 부여하여 라우팅이 수행되었는지 확인할 수 있습니다.

    요약


  • FRRouting 및 Linux 커널에 구현된 MPLS로 SR-MPLS의 동작 확인
  • OSPF-SR에 의한 SID 배포 확인
  • OSPF-SR에서 사용되는 Opaque-LSA 확인
  • MPLS 정적 경로를 사용한 라우팅

  • 좋은 웹페이지 즐겨찾기