2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SR-MPLS+EVPNのL2VPNをfreeRouterでやってみた

Last updated at Posted at 2023-02-14

モチベーション

  • オープンソースのソフトウェアを利用してSR-MPLSとEVPNをやってみたい
  • パケットキャプチャしてSR-MPLS+EVPN利用時のMPLSラベルやMP-BGPのやりとりをみてみたい

調べた中で、オープンソースのfreeRouerを使えばSR-MPLSとEVPNができそうだったので、EVE-NG上でやってみました。

環境準備

EVE-NGのインストール

こちらのページがわかりやすく説明されています!

EVE-NGでfreeRouterを使えるようにする

  1. freeRouter のダウンロード
    freeRouerのページからqcow2形式のイメージファイルをダウンロード
  2. EVE-NGにfreeRouterイメージを取り込み
    1. イメージファイルをSCP等でEVE-NGのサーバにアップロード
    2. EVE-NGにSSHログイン
    3. 今回EVE-NG上でLinuxサーバイメージで利用するために、以下のディレクトリを作成
      mkdir /opt/unetlab/addons/qemu/linux-freertr/
      
    4. 上記ディレクトリにfreeRouterイメージを移動させて、ファイル名を「rtr.qcow2」から「virtioa.qcow2」に変更
    5. EVE-NGで利用できるように以下のコマンドを実施する
      /opt/unetlab/wrappers/unl_wrapper -a fixpermissions
      

これでfreeRouterイメージの追加は完了です。

EVE-NG上でノード追加

  1. ブラウザからEVE-NGにログインしノードを以下の設定で追加する
    • 「Template」 : 「Linux」
    • 「Image」 : 「linux-freertr」
    • 「Ethernets」 :「4」 (初期値の1から変更、利用したいポート数に合わせて変更)
    • 「Console」 :「telnet」
    • CPUやRAM、アイコンも必要に応じ変更
      • 私はCPU:1、RAM:512MB に変更しました
        node-add.png
  2. EVE-NG上で以下の画像のようにfreeRouterとクライアントになるVPCを設定
    • SR-MPLSの終端になるPEルータは2台:FreeRTR-PE-01 / FreeRTR-PE-02
    • SR-MPLSのラベルを中継するPルータは1台:FreeRTR-P-01
    • クライアントになるVPCを4台設置
      • この後のfreeRouterの設定で赤枠と青枠2台ずつL2VPNでそれぞれ別のL2NWになるようにする
        nw-set.png

コンフィグ

EVE-NG上のインターフェース番号とFreeRouter上のインターフェース番号が異なるので注意が必要になります。
EVE-NG上の「e0」が、freeRouter上のコンフィグでは「ethernet1」になります。
freeRouterのCLI設定はCiscoのIOSライクな設定になります。

今回実施した最終的なコンフィグを記載します。

FreeRTR-PE-01
FreeRTR-PE-01
hostname FreeRTR-PE-01
buggy
!
!
bridge 1
 description BRIDGE_EVPN_L2VPN_01
 rd 1:1
 rt-import 1:1
 rt-export 1:1
 mac-learn
 exit
!
bridge 2
 description BRIDGE_EVPN_L2VPN_02
 rd 1:2
 rt-import 1:2
 rt-export 1:2
 mac-learn
 exit
!
vrf definition host
 exit
!
vrf definition vrf_default
 description VRF_DEFAULT
 rd 1:1
 exit
!
vrf definition vrf_l2vpn01
 description VRF_EVPN_L2VPN_01
 rd 1:1
 exit
!
vrf definition vrf_l2vpn02
 description VRF_EVPN_L2VPN_02
 rd 1:2
 exit
!
router ospf4 1
 vrf vrf_default
 router-id 10.0.0.1
 traffeng-id 0.0.0.0
 segrout 10 base 100
 area 0 enable
 area 0 segrout
 redistribute connected
 exit
!
interface loopback1
 vrf forwarding vrf_default
 ipv4 address 10.0.0.1 255.255.255.255
 router ospf4 1 enable
 router ospf4 1 area 0
 router ospf4 1 segrout index 1
 router ospf4 1 segrout node
 no shutdown
 no log-link-change
 exit
!
interface bvi1
 no shutdown
 no log-link-change
 exit
!
interface bvi2
 no shutdown
 no log-link-change
 exit
!
interface ethernet1
 description TO_FreeRTR-P-01
 vrf forwarding vrf_default
 ipv4 address 10.10.1.2 255.255.255.252
 mpls enable
 router ospf4 1 enable
 router ospf4 1 area 0
 no shutdown
 no log-link-change
 exit
!
interface ethernet2
 description TO_VPC1-1(L2VPN_01)
 bridge-group 1
 no shutdown
 no log-link-change
 exit
!
interface ethernet20001
 no shutdown
 no log-link-change
 exit
!
interface ethernet3
 description TO_VPC2-1(L2VPN_02)
 bridge-group 2
 no shutdown
 no log-link-change
 exit
!
interface ethernet4
 no shutdown
 no log-link-change
 exit
!
router bgp4 65001
 vrf vrf_default
 local-as 65001
 router-id 10.0.0.1
 address-family evpn
 neighbor 10.0.0.2 remote-as 65001
 neighbor 10.0.0.2 description FreeRTR-PE-02
 neighbor 10.0.0.2 local-as 65001
 neighbor 10.0.0.2 address-family evpn
 neighbor 10.0.0.2 distance 200
 neighbor 10.0.0.2 update-source loopback1
 neighbor 10.0.0.2 pmsitun
 neighbor 10.0.0.2 segrout
 neighbor 10.0.0.2 send-community standard extended
 afi-evpn 5001 bridge-group 1
 afi-evpn 5001 bmac 5001.0000.0001
 afi-evpn 5001 encapsulation cmac
 afi-evpn 5001 update-source loopback1
 afi-evpn 5002 bridge-group 2
 afi-evpn 5002 bmac 5002.0000.0001
 afi-evpn 5002 encapsulation cmac
 afi-evpn 5002 update-source loopback1
 exit
!
line tty1
 no exec authorization
 no login authentication
 exit
!
!
!
!
!
end
FreeRTR-PE-02
FreeRTR-PE-02
hostname FreeRTR-PE-02
buggy
!
!
bridge 1
 description BRIDGE_EVPN_L2VPN_01
 rd 1:1
 rt-import 1:1
 rt-export 1:1
 mac-learn
 exit
!
bridge 2
 description BRIDGE_EVPN_L2VPN_02
 rd 1:2
 rt-import 1:2
 rt-export 1:2
 mac-learn
 exit
!
vrf definition host
 exit
!
vrf definition vrf_default
 description VRF_DEFAULT
 rd 1:1
 exit
!
vrf definition vrf_l2vpn01
 description VRF_EVPN_L2VPN_01
 rd 1:1
 exit
!
vrf definition vrf_l2vpn02
 description VRF_EVPN_L2VPN_02
 rd 1:2
 exit
!
router ospf4 1
 vrf vrf_default
 router-id 10.0.0.2
 traffeng-id 0.0.0.0
 segrout 10 base 100
 area 0 enable
 area 0 segrout
 redistribute connected
 exit
!
interface loopback1
 vrf forwarding vrf_default
 ipv4 address 10.0.0.2 255.255.255.255
 router ospf4 1 enable
 router ospf4 1 area 0
 router ospf4 1 segrout index 2
 router ospf4 1 segrout node
 no shutdown
 no log-link-change
 exit
!
interface bvi1
 no shutdown
 no log-link-change
 exit
!
interface bvi2
 no shutdown
 no log-link-change
 exit
!
interface ethernet1
 description TO_FreeRTR-P-01
 vrf forwarding vrf_default
 ipv4 address 10.10.2.2 255.255.255.252
 mpls enable
 router ospf4 1 enable
 router ospf4 1 area 0
 no shutdown
 no log-link-change
 exit
!
interface ethernet2
 description TO_VPC1-2(L2VPN_01)
 bridge-group 1
 no shutdown
 no log-link-change
 exit
!
interface ethernet20001
 no shutdown
 no log-link-change
 exit
!
interface ethernet3
 description TO_VPC2-2(L2VPN_02)
 bridge-group 2
 no shutdown
 no log-link-change
 exit
!
interface ethernet4
 no shutdown
 no log-link-change
 exit
!
router bgp4 65001
 vrf vrf_default
 local-as 65001
 router-id 10.0.0.2
 address-family evpn
 neighbor 10.0.0.1 remote-as 65001
 neighbor 10.0.0.1 description FreeRTR-PE-01
 neighbor 10.0.0.1 local-as 65001
 neighbor 10.0.0.1 address-family evpn
 neighbor 10.0.0.1 distance 200
 neighbor 10.0.0.1 update-source loopback1
 neighbor 10.0.0.1 pmsitun
 neighbor 10.0.0.1 segrout
 neighbor 10.0.0.1 send-community standard extended
 afi-evpn 5001 bridge-group 1
 afi-evpn 5001 bmac 5001.0000.0002
 afi-evpn 5001 encapsulation cmac
 afi-evpn 5001 update-source loopback1
 afi-evpn 5002 bridge-group 2
 afi-evpn 5002 bmac 5002.0000.0002
 afi-evpn 5002 encapsulation cmac
 afi-evpn 5002 update-source loopback1
 exit
!
line tty1
 no exec authorization
 no login authentication
 exit
!
!
!
!
!
end
FreeRTR-P-01
FreeRTR-P-01
hostname FreeRTR-P-01
buggy
!
!
vrf definition host
 exit
!
vrf definition vrf_default
 description VRF_DEFAULT
 rd 1:1
 exit
!
router ospf4 1
 vrf vrf_default
 router-id 10.0.0.99
 traffeng-id 0.0.0.0
 segrout 10 base 100
 area 0 enable
 area 0 segrout
 redistribute connected
 exit
!
interface loopback1
 vrf forwarding vrf_default
 ipv4 address 10.0.0.99 255.255.255.255
 router ospf4 1 enable
 router ospf4 1 area 0
 router ospf4 1 segrout index 9
 router ospf4 1 segrout node
 no shutdown
 no log-link-change
 exit
!
interface ethernet1
 description TO_FreeRTR-PE-01
 vrf forwarding vrf_default
 ipv4 address 10.10.1.1 255.255.255.252
 mpls enable
 router ospf4 1 enable
 router ospf4 1 area 0
 no shutdown
 no log-link-change
 exit
!
interface ethernet2
 description TO_FreeRTR-PE-02
 vrf forwarding vrf_default
 ipv4 address 10.10.2.1 255.255.255.252
 mpls enable
 router ospf4 1 enable
 router ospf4 1 area 0
 no shutdown
 no log-link-change
 exit
!
interface ethernet20001
 no shutdown
 no log-link-change
 exit
!
interface ethernet3
 no shutdown
 no log-link-change
 exit
!
interface ethernet4
 no shutdown
 no log-link-change
 exit
!
line tty1
 no exec authorization
 no login authentication
 exit
!
!
!
!
!
end

設定内容(SR-MPLS+EVPN部分)

SR-MPLS部分

今回はOSPFを利用してSR-MPLSの設定を行います。各ルータのNode SIDは以下の画像のとおりに設定。
03_sr-mpls.png

  1. OSPF設定
    ルータ間でOSPF設定、SE-MPLSを有効にしMPLSのラベルを交換するためのSRGB(Segment Routing Global Block)の設定を行う。
    今回は100を基準に10個までの100~109の範囲で設定。

    該当部分のコンフィグ抜粋 (FreeRTR-PE-01)
    router ospf4 1
     area 0 segrout
     segrout 10 base 100
    
  2. Node SIDの設定
    loopbackにNode SIDを設定。機器でユニークである必要があるのでindex部分はルータごとに変える必要があります。

    該当部分のコンフィグ抜粋 (FreeRTR-PE-01)
    interface loopback1
     router ospf4 1 segrout node
     router ospf4 1 segrout index 1
    
  3. MPLSの設定
    PE~Pルータ間でMPLSを利用するため、接続インターフェースにMPLSを有効化。

    該当部分のコンフィグ抜粋 (FreeRTR-PE-01)
    interface ethernet1
     mpls enable
    

ここまでで、各ルータ間でSR-MPLSでラベル交換ができるようになります。

EVPN部分

今回はEVPNで2つのL2ネットワークを作ります。お互いのL2ネットワークをVRF設定してMP-BGPで情報交換します。
04_sr-mpls.png

  1. L2ネットワーク用のブリッジ設定
    2つのL2ネットワーク用のブリッジ設定とクライアント側のIFの割り当てを行う
  2. VRF設定
    2つのネットワーク分のVRFを作成
  3. BGP設定
    対向のPEルータとBGPネイバー設定と、2つのL2ネットワーク(bridge-group)のMP-BGP設定を行う
1. ブリッジ設定部分のコンフィグ抜粋 (FreeRTR-PE-01)
! ----------------
! L2ネットワーク-1
! ----------------
bridge 1
 rd 1:1
 rt-import 1:1
 rt-export 1:1
 mac-learn
 exit
!
interface ethernet2
 bridge-group 1
 exit
!
! ----------------
! L2ネットワーク-2
! ----------------
bridge 2
 rd 1:2
 rt-import 1:2
 rt-export 1:2
 mac-learn
 exit
!
interface ethernet3
 bridge-group 2
 exit
2. VRF設定部分のコンフィグ抜粋 (FreeRTR-PE-01)
! ----------------
! L2ネットワーク-1
! ----------------
vrf definition vrf_l2vpn01
 description VRF_EVPN_L2VPN_01
 rd 1:1
 exit
!
! ----------------
! L2ネットワーク-2
! ----------------
vrf definition vrf_l2vpn02
 description VRF_EVPN_L2VPN_02
 rd 1:2
 exit
!
3. BGP設定部分のコンフィグ抜粋 (FreeRTR-PE-01)
router bgp4 65001
 vrf vrf_default
 local-as 65001
 router-id 10.0.0.1
 address-family evpn
 neighbor 10.0.0.2 remote-as 65001
 neighbor 10.0.0.2 description FreeRTR-PE-02
 neighbor 10.0.0.2 local-as 65001
 neighbor 10.0.0.2 address-family evpn
 neighbor 10.0.0.2 distance 200
 neighbor 10.0.0.2 update-source loopback1
 neighbor 10.0.0.2 pmsitun
 neighbor 10.0.0.2 segrout
 neighbor 10.0.0.2 send-community standard extended
 afi-evpn 5001 bridge-group 1
 afi-evpn 5001 bmac 5001.0000.0001
 afi-evpn 5001 encapsulation cmac
 afi-evpn 5001 update-source loopback1
 afi-evpn 5002 bridge-group 2
 afi-evpn 5002 bmac 5002.0000.0001
 afi-evpn 5002 encapsulation cmac
 afi-evpn 5002 update-source loopback1
 exit
!

動作確認

クライアントになるVPCからpingを打ち、画像のように同一のL2VPN間でのみping疎通することが確認できました。
05_sr-mpls.png
PE~Pルータ間のIFでパケットキャプチャしてMPLSラベルが2つついていることや、クライアントのMACアドレスについてMP-BGPで交換していることを確認できました。

  • MPLSラベル確認
    06_sr-mpls.png
  • BGPでMACアドレス通知確認
    07_sr-mpls.png

最後に、ルータにログインしてshowコマンドで確認した結果を参考に記載します。

FreeRTR-PE-01にshowコマンド確認
FreeRTR-PE-01#show mpls forwarding
label   vrf            iface      hop        label       targets  bytes
100     null           null       null       unlabelled           0
101     vrf_default:4  null       null       unlabelled  local    2965
102     vrf_default:4  ethernet1  10.10.1.1  102                  0
103     null           null       null       unlabelled           0
104     null           null       null       unlabelled           0
105     null           null       null       unlabelled           0
106     null           null       null       unlabelled           0
107     null           null       null       unlabelled           0
108     null           null       null       unlabelled           0
109     vrf_default:4  ethernet1  10.10.1.1  109                  0
43148   vrf_l2vpn01:4  null       null       unlabelled  local    0
103283  vrf_l2vpn02:4  null       null       unlabelled  local    0
135226  vrf_default:4  null       null       unlabelled  local    0
151291  vrf_default:4  null       null       unlabelled  pwe      618
253702  vrf_default:4  ethernet1  10.10.1.1  3                    0
255801  vrf_default:4  null       null       unlabelled  local    0
350743  vrf_l2vpn01:4  null       null       unlabelled  local    0
523467  vrf_l2vpn02:4  null       null       unlabelled  local    0
529964  host:6         null       null       unlabelled  local    0
535053  vrf_default:6  null       null       unlabelled  local    0
535922  vrf_l2vpn02:6  null       null       unlabelled  local    0
591001  host:4         null       null       unlabelled  local    0
632595  vrf_l2vpn01:6  null       null       unlabelled  local    0
657188  host:4         null       null       unlabelled  local    0
776749  host:4         null       null       unlabelled  local    0
798381  vrf_default:6  null       null       unlabelled  local    0
802683  host:6         null       null       unlabelled  local    0
813152  host:6         null       null       unlabelled  local    0
847951  vrf_default:4  null       null       unlabelled  pwe      618
897970  vrf_l2vpn01:6  null       null       unlabelled  local    0
920830  vrf_default:4  null       null       unlabelled  pwe      0
925683  vrf_l2vpn02:6  null       null       unlabelled  local    0
946922  vrf_default:4  null       null       unlabelled  pwe      0

FreeRTR-PE-01#
FreeRTR-PE-01#
FreeRTR-PE-01#show bridge 1
                                 packet        byte
iface               fwd   phys   tx  rx  drop  tx   rx   drop  grp
brprt bvi
ethernet2           true  true   6   7   0     482  534  0
evpn 10.0.0.2 5001  true  false  2   0   0     104  0    0
evpn 10.0.0.2 5001  true  false  6   6   0     482  482  0


                                                      packet        byte
addr            iface               static  time      tx  rx  drop  tx   rx   drop
0050.7966.6805  ethernet2           false   00:02:41  6   7   0     482  534  0
0050.7966.6806  evpn 10.0.0.2 5001  false   00:02:41  5   6   0     430  482  0


FreeRTR-PE-01#
FreeRTR-PE-01#
FreeRTR-PE-01#show bridge 2
                                 packet        byte
iface               fwd   phys   tx  rx  drop  tx   rx   drop  grp
brprt bvi
ethernet3           true  true   6   8   0     482  586  0
evpn 10.0.0.2 5002  true  false  3   0   0     156  0    0
evpn 10.0.0.2 5002  true  false  6   6   0     482  482  0


                                                      packet        byte
addr            iface               static  time      tx  rx  drop  tx   rx   drop
0050.7966.6807  ethernet3           false   00:00:44  6   8   0     482  586  0
0050.7966.6808  evpn 10.0.0.2 5002  false   00:00:44  5   6   0     430  482  0


FreeRTR-PE-01#
FreeRTR-PE-01#
FreeRTR-PE-01#show ipv4 bgp 65001 evpn database
prefix                           hop       metric       aspath
200:0:1389::50:7966:6805#:: 1:1  10.0.0.1  0/0/0/0
200:0:1389::50:7966:6806#:: 1:1  10.0.0.2  200/100/0/0
300:0:1389::#10.0.0.2 1:1        10.0.0.2  200/100/0/0
300:0:1389::#10.0.0.1 1:1        10.0.0.1  0/0/0/0
200:0:138a::50:7966:6807#:: 1:2  10.0.0.1  0/0/0/0
200:0:138a::50:7966:6808#:: 1:2  10.0.0.2  200/100/0/0
300:0:138a::#10.0.0.2 1:2        10.0.0.2  200/100/0/0
300:0:138a::#10.0.0.1 1:2        10.0.0.1  0/0/0/0

FreeRTR-PE-01#
FreeRTR-PE-01#
FreeRTR-PE-01#show ipv4 bgp 65001 evpn database 200:0:1389::50:7966:6806#:: 1:1
id    category            value
      vrf                 vrf_default:4
      ipver               4
      rd                  1:1
      original rd         0:0
      prefix              200:0:1389::50:7966:6806/128
      prefix network      200:0:1389::50:7966:6806
      prefix broadcast    ::
      prefix wildcard     ::
      prefix netmask      ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
      nlri                n/a
      alternates          1
      alternate #0        candidate=true best=true
alt0  type                bgp4 65001
alt0  source              10.0.0.2
alt0  validity            0
alt0  only to customer    0
alt0  segrout index       0
alt0  segrout old base    0
alt0  segrout base        0
alt0  segrout size        0
alt0  segrout offset      0
alt0  segrout prefix      null
alt0  bier index          0
alt0  bier old base       0
alt0  bier base           0
alt0  bier range          0
alt0  bier size           0-32
alt0  updated             2023-0X-XX XX:XX:XX (00:00:47 ago)
alt0  version             18
alt0  distance            200
alt0  metric              0
alt0  ident               0
alt0  hops                0
alt0  interface           null
alt0  table               null
alt0  nexthop             10.0.0.2
alt0  original nexthop    null
alt0  tag                 0
alt0  origin type         0
alt0  local preference    100
alt0  evpn label*16       2697953
alt0  attribute as        0
alt0  attribute value     n/a
alt0  tunnel type         0
alt0  tunnel value        n/a
alt0  link state          n/a
alt0  pmsi type           0
alt0  pmsi label*16       0
alt0  pmsi tunnel         n/a
alt0  accumulated igp     0
alt0  bandwidth           0
alt0  atomic aggregator   false
alt0  aggregator as       0
alt0  aggregator router   null
alt0  originator          null
alt0  cluster list
alt0  aspath
alt0  path length         0
alt0  standard community
alt0  extended community  2:1:1
alt0  large community
alt0  internal source     1
alt0  local label         null
alt0  remote label
      counter             tx=0(0) rx=0(0) drp=0(0)
      lastio              input never ago, output never ago, drop never ago
      hardware counter    null

FreeRTR-PE-01#
FreeRTR-PE-01#
FreeRTR-PE-01#show ipv4 bgp 65001 evpn database 200:0:138a::50:7966:6808#:: 1:2
id    category            value
      vrf                 vrf_default:4
      ipver               4
      rd                  1:2
      original rd         0:0
      prefix              200:0:138a::50:7966:6808/128
      prefix network      200:0:138a::50:7966:6808
      prefix broadcast    ::
      prefix wildcard     ::
      prefix netmask      ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
      nlri                n/a
      alternates          1
      alternate #0        candidate=true best=true
alt0  type                bgp4 65001
alt0  source              10.0.0.2
alt0  validity            0
alt0  only to customer    0
alt0  segrout index       0
alt0  segrout old base    0
alt0  segrout base        0
alt0  segrout size        0
alt0  segrout offset      0
alt0  segrout prefix      null
alt0  bier index          0
alt0  bier old base       0
alt0  bier base           0
alt0  bier range          0
alt0  bier size           0-32
alt0  updated             2023-0X-XX XX:XX:XX (00:00:47 ago)
alt0  version             20
alt0  distance            200
alt0  metric              0
alt0  ident               0
alt0  hops                0
alt0  interface           null
alt0  table               null
alt0  nexthop             10.0.0.2
alt0  original nexthop    null
alt0  tag                 0
alt0  origin type         0
alt0  local preference    100
alt0  evpn label*16       10705169
alt0  attribute as        0
alt0  attribute value     n/a
alt0  tunnel type         0
alt0  tunnel value        n/a
alt0  link state          n/a
alt0  pmsi type           0
alt0  pmsi label*16       0
alt0  pmsi tunnel         n/a
alt0  accumulated igp     0
alt0  bandwidth           0
alt0  atomic aggregator   false
alt0  aggregator as       0
alt0  aggregator router   null
alt0  originator          null
alt0  cluster list
alt0  aspath
alt0  path length         0
alt0  standard community
alt0  extended community  2:1:2
alt0  large community
alt0  internal source     1
alt0  local label         null
alt0  remote label
      counter             tx=0(0) rx=0(0) drp=0(0)
      lastio              input never ago, output never ago, drop never ago
      hardware counter    null

FreeRTR-PE-01#
FreeRTR-PE-01#

最後に

オープンソースのfreeRouterを利用してSR-MPLSとEVPNの動作を確認しました。
freeRouterはそれほどリソースを喰わないのでスペックが低いPCでもルータを複数台立ち上げて動作確認をすることができて良かったです。
SRv6とかもやってみたい。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?