Vyatta(VyOS) EVPN設定

スポンサーリンク

Vyatta(VyOS)で、EVPNによるLayer2ネットワークを作成する方法をまとめます。EVPNは「Vyatta(VyOS) VXLAN(L2トンネル)設定」と同様にVXLANによるカプセル化をしますが、MP-GBP(Multi-protocol BPG)によって互いのMACアドレスを動的に学習するのが、静的な設定のVXLANとの違いです。

設定まとめ

VyOSの設定

VXLANとブリッジの設定コマンドは説明を省略します。それぞれ、「Vyatta(VyOS) VXLAN(L2トンネル)設定」と「Vyatta(VyOS) L2ブリッジ設定」を参照ください。

以下のコマンドでaddress family l2vpn-evpnでBGP neighborを確立します。

set protocols bgp neighbor <対向IPアドレス> address-family l2vpn-evpn

VXLANによって学習したMACアドレスをMP BGPへimportとexportします。他のネットワークOSではroute targetやroute distinguisherの明示指定が必要なこともありますが、VyOSの場合はこのコマンド1つで自動的にroute targetとroute distinguisherを割り当ててくれます。

set protocols bgp address-family l2vpn-evpn advertise-all-vni

他OSとの違い

EVPNは製品依存の設定が多く、比較的混乱しやすい分野です。他製品との特徴的な違いをまとめます。

ネットワークOSの種類によっては、BGP拡張コミュニティの伝搬がデフォルトで無効になっている事もあります。EVPNも拡張コミュニティを使うので有効化が必要ですが、VyOSはデフォルトで拡張コミュニティの伝搬が有効ですので、明示的な設定は必要ありません。

なお、Cisco IOSでは拡張コミュニティを有効にするには以下のようなコマンドを使用します。

router bgp <AS番号>
  neighbor <対向IPアドレス> send-community

ネットワークOSの種類によっては、MACアドレスを伝搬させる時のroute targetとroute distinguisherを明示的に指定する必要があります。

VyOSはroute targetとroute distinguisherを自動的に割り当てるのがデフォルトの挙動ですが、明示指定する事もできます。明示指定するには以下のようなコマンドを使用します。

set protocols bgp address-family l2vpn-evpn rd <x.x.x.x:yyyy>
set protocols bgp address-family l2vpn-evpn route-target both <xxxx:yyyy>

動作確認

動作確認の構成

以下の環境で動作確認を行います。ブリッジを含む動作確認をする時は、ハイパーバイザの仮想スイッチに対してプロミスキャスモード等を有効にする必要がある事に注意ください。

+-----------------------+
|        host100        |
|                       |
+-----------+-----------+
            | ens224      172.16.0.100/24
            | ens224.100  172.16.100.100/24
            | ens224.200  172.16.100.200/24
            | 
            | 
       eth0 | (bridge)
+-----------+-----------+
|      vy001(leaf)      |
| Lo:10.1.1.1/32        |
|                       |
+-----------+-----------+
       eth1 | .1
            | 
            | 192.168.12.0/24
            | 
       eth0 | .2
+-----------+-----------+
|      vy002(spine)     |
| Lo:10.2.2.2/32        |
|                       |
+-----------+-----------+
       eth1 | .2
            | 
            | 192.168.23.0/24
            | 
       eth0 | .3
+-----------+-----------+
|      vy003(leaf)      |
| Lo:10.3.3.3/32        |
|                       |
+-----------+-----------+
       eth1 | (bridge)
            | 
            | 
            | ens224      172.16.0.200/24
            | ens224.100  172.16.100.200/24
            | ens224.200  172.16.200.200/24
+-----------+-----------+
|        host200        |
|                       |
+-----------------------+

初期設定

IPv4アドレスは付与済とします。vy001, vy002, vy003の間はOSPFで互いに経路を交換しているものとします。

host100 : Rocky Linux 8.4
[root@host100 ~]# ip address 

  <omitted>

3: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:8e:96:66 brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.100/24 brd 172.16.0.255 scope global noprefixroute ens224
       valid_lft forever preferred_lft forever
4: VLAN0100@ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:50:56:8e:96:66 brd ff:ff:ff:ff:ff:ff
    inet 172.16.100.100/24 brd 172.16.100.255 scope global noprefixroute VLAN0100
       valid_lft forever preferred_lft forever
5: VLAN0200@ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:50:56:8e:96:66 brd ff:ff:ff:ff:ff:ff
    inet 172.16.200.100/24 brd 172.16.100.255 scope global noprefixroute VLAN0200
       valid_lft forever preferred_lft forever
host200 : Rocky Linux 8.4
[root@host200 ~]# ip address 

 <omitted>

3: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:8e:83:9b brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.200/24 brd 172.16.0.255 scope global noprefixroute ens224
       valid_lft forever preferred_lft forever
4: VLAN0100@ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:50:56:8e:83:9b brd ff:ff:ff:ff:ff:ff
    inet 172.16.100.200/24 brd 172.16.100.255 scope global noprefixroute VLAN0100
       valid_lft forever preferred_lft forever
5: VLAN0200@ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:50:56:8e:83:9b brd ff:ff:ff:ff:ff:ff
    inet 172.16.200.200/24 brd 172.16.200.255 scope global noprefixroute VLAN0200
       valid_lft forever preferred_lft forever
vy001 : VyOS 1.4
set interfaces ethernet eth0 hw-id '00:50:56:8e:74:ec'
set interfaces ethernet eth1 address '192.168.12.1/24'
set interfaces ethernet eth1 hw-id '00:50:56:8e:3a:92'
set interfaces loopback lo address '10.1.1.1/32'
set protocols ospf area 0 network '192.168.12.0/24'
set protocols ospf area 0 network '10.1.1.1/32'
set service ssh
set system config-management commit-revisions '100'
set system console device ttyS0 speed '115200'
set system host-name 'vy001'
set system login user vyos authentication encrypted-password '$6$tMjC07ln2rEuCnYQ$NrbFEUQTzGprNHwkxo5skkG5h4rX1G6RQxdpo61p3MF77PluwdJgfP9UlYT7f1Nr.gIFKoQdAsKRBykNU24.I/'
set system login user vyos authentication plaintext-password ''
set system ntp server time1.vyos.net
set system ntp server time2.vyos.net
set system ntp server time3.vyos.net
set system syslog global facility all level 'info'
set system syslog global facility protocols level 'debug'
vy002 : VyOS 1.4
set interfaces ethernet eth0 address '192.168.12.2/24'
set interfaces ethernet eth0 hw-id '00:50:56:8e:45:5e'
set interfaces ethernet eth1 address '192.168.23.2/24'
set interfaces ethernet eth1 hw-id '00:50:56:8e:5e:c2'
set interfaces loopback lo address '10.2.2.2/32'
set protocols ospf area 0 network '192.168.12.0/24'
set protocols ospf area 0 network '192.168.23.0/24'
set protocols ospf area 0 network '10.2.2.2/32'
set service ssh
set system config-management commit-revisions '100'
set system console device ttyS0 speed '115200'
set system host-name 'vy002'
set system login user vyos authentication encrypted-password '$6$tMjC07ln2rEuCnYQ$NrbFEUQTzGprNHwkxo5skkG5h4rX1G6RQxdpo61p3MF77PluwdJgfP9UlYT7f1Nr.gIFKoQdAsKRBykNU24.I/'
set system login user vyos authentication plaintext-password ''
set system ntp server time1.vyos.net
set system ntp server time2.vyos.net
set system ntp server time3.vyos.net
set system syslog global facility all level 'info'
set system syslog global facility protocols level 'debug'
vy003 : VyOS 1.4
set interfaces ethernet eth0 address '192.168.23.3/24'
set interfaces ethernet eth0 hw-id '00:50:56:8e:01:93'
set interfaces ethernet eth1 hw-id '00:50:56:8e:fd:95'
set interfaces loopback lo address '10.3.3.3/32'
set protocols ospf area 0 network '192.168.23.0/24'
set protocols ospf area 0 network '10.3.3.3/32'
set service ssh
set system config-management commit-revisions '100'
set system console device ttyS0 speed '115200'
set system host-name 'vy003'
set system login user vyos authentication encrypted-password '$6$tMjC07ln2rEuCnYQ$NrbFEUQTzGprNHwkxo5skkG5h4rX1G6RQxdpo61p3MF77PluwdJgfP9UlYT7f1Nr.gIFKoQdAsKRBykNU24.I/'
set system login user vyos authentication plaintext-password ''
set system ntp server time1.vyos.net
set system ntp server time2.vyos.net
set system ntp server time3.vyos.net
set system syslog global facility all level 'info'
set system syslog global facility protocols level 'debug'

動作確認 (1) VXLANの作成

vy001とvy003にVXLANインターフェースを作成します。「Vyatta(VyOS) VXLAN(L2トンネル)設定」で示した方法と異なり、VXLANの対向IPアドレスは指定しません。対向の情報は後述で設定するMP-BGPによって学習します。

[vy001:VyOS1.4]
set interfaces vxlan vxlan0 source-address '10.1.1.1'
set interfaces vxlan vxlan0 vni '10000'
set interfaces vxlan vxlan100 source-address '10.1.1.1'
set interfaces vxlan vxlan100 vni '10100'
set interfaces vxlan vxlan200 source-address '10.1.1.1'
set interfaces vxlan vxlan200 vni '10200'

[vy003:VyOS1.4]
set interfaces vxlan vxlan0 source-address '10.3.3.3'
set interfaces vxlan vxlan0 vni '10000'
set interfaces vxlan vxlan100 source-address '10.3.3.3'
set interfaces vxlan vxlan100 vni '10100'
set interfaces vxlan vxlan200 source-address '10.3.3.3'
set interfaces vxlan vxlan200 vni '10200'

ブリッジインターフェースを作成し、そのメンバーを定義します。

[vy001:VyOS1.4]
set interfaces ethernet eth0 vif 100
set interfaces ethernet eth0 vif 200
set interfaces bridge br0 member interface eth0
set interfaces bridge br0 member interface vxlan0
set interfaces bridge br100 member interface eth0.100
set interfaces bridge br100 member interface vxlan100
set interfaces bridge br200 member interface eth0.200
set interfaces bridge br200 member interface vxlan200

[vy003:VyOS1.4]
set interfaces ethernet eth1 vif 100
set interfaces ethernet eth1 vif 200
set interfaces bridge br0 member interface eth1
set interfaces bridge br0 member interface vxlan0
set interfaces bridge br100 member interface eth1.100
set interfaces bridge br100 member interface vxlan100
set interfaces bridge br200 member interface eth1.200
set interfaces bridge br200 member interface vxlan200

動作確認 (2) MP-BGPの設定

l2vpn-evpnというadress familyでBGP neighborを確立します。

[vy001:VyOS1.4]
set protocols bgp local-as '65001'
set protocols bgp neighbor 10.2.2.2 address-family l2vpn-evpn
set protocols bgp neighbor 10.2.2.2 ebgp-multihop '255'
set protocols bgp neighbor 10.2.2.2 remote-as '65002'
set protocols bgp neighbor 10.2.2.2 update-source '10.1.1.1'
set protocols bgp timers holdtime '30'
set protocols bgp timers keepalive '10'

[vy002:VyOS1.4]
set protocols bgp local-as '65002'
set protocols bgp neighbor 10.1.1.1 address-family l2vpn-evpn
set protocols bgp neighbor 10.1.1.1 ebgp-multihop '255'
set protocols bgp neighbor 10.1.1.1 remote-as '65001'
set protocols bgp neighbor 10.1.1.1 update-source '10.2.2.2'
set protocols bgp neighbor 10.3.3.3 address-family l2vpn-evpn
set protocols bgp neighbor 10.3.3.3 ebgp-multihop '255'
set protocols bgp neighbor 10.3.3.3 remote-as '65003'
set protocols bgp neighbor 10.3.3.3 update-source '10.2.2.2'
set protocols bgp timers holdtime '30'
set protocols bgp timers keepalive '10'

[vy003:VyOS1.4]
set protocols bgp local-as '65003'
set protocols bgp neighbor 10.2.2.2 address-family l2vpn-evpn
set protocols bgp neighbor 10.2.2.2 ebgp-multihop '255'
set protocols bgp neighbor 10.2.2.2 remote-as '65002'
set protocols bgp neighbor 10.2.2.2 update-source '10.3.3.3'
set protocols bgp timers holdtime '30'
set protocols bgp timers keepalive '10'

互いにBGP neighborを確立できている事を確認します。「State/PfxRcd」と「PfxSnt」が0と0である事から、この時点で互いにadvertiseしている情報がない事が分かります。ですが、これは正常な挙動です。advertiseの設定はこの後で投入します。

[vy001:VyOS1.4]
vyos@vy001:~$ show bgp l2vpn evpn summary 
BGP router identifier 10.1.1.1, local AS number 65001 vrf-id 0
BGP table version 0
RIB entries 0, using 0 bytes of memory
Peers 1, using 21 KiB of memory

Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt
10.2.2.2        4      65002         8         8        0    0    0 00:00:50            0        0

Total number of neighbors 1

[vy002:VyOS1.4]
vyos@vy002:~$ show bgp l2vpn evpn summary
BGP router identifier 10.2.2.2, local AS number 65002 vrf-id 0
BGP table version 0
RIB entries 0, using 0 bytes of memory
Peers 2, using 43 KiB of memory

Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt
10.1.1.1        4      65001        13        13        0    0    0 00:01:35            0        0
10.3.3.3        4      65003        10        10        0    0    0 00:01:06            0        0

Total number of neighbors 2
vyos@vy002:~$ 

[vy003:VyOS1.4]
vyos@vy003:~$ show bgp l2vpn evpn summary
BGP router identifier 10.3.3.3, local AS number 65003 vrf-id 0
BGP table version 0
RIB entries 0, using 0 bytes of memory
Peers 1, using 21 KiB of memory

Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt
10.2.2.2        4      65002        14        14        0    0    0 00:01:40            0        0

Total number of neighbors 1
vyos@vy003:~$ 

動作確認 (3) MACアドレスのadvertise

VXLANで学習したMACアドレスを互いに送受信するようにします。

[vy001:VyOS1.4]
set protocols bgp address-family l2vpn-evpn advertise-all-vni

[vy003:VyOS1.4]
set protocols bgp address-family l2vpn-evpn advertise-all-vni

対向のBGP neighborへadvertiseしている情報を確認します。host100とhost200での疎通確認をする前の状態でも、EVPN type 3を観測する事ができます。EVPN type 3はBUMトラフィックの伝搬範囲を制御するために使用される情報です。

[vy001:VyOS1.4]
vyos@vy001:~$ show bgp l2vpn evpn neighbors 10.2.2.2 advertised-routes 
BGP table version is 0, local router ID is 10.1.1.1
Default local pref 100, local AS 65001
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 10.1.1.1:4
*> [3]:[0]:[32]:[10.1.1.1]
                                       32768 i
Route Distinguisher: 10.1.1.1:5
*> [3]:[0]:[32]:[10.1.1.1]
                                       32768 i
Route Distinguisher: 10.1.1.1:6
*> [3]:[0]:[32]:[10.1.1.1]
                                       32768 i
Route Distinguisher: 10.3.3.3:4
*> [3]:[0]:[32]:[10.3.3.3]
                                           0 65002 65003 i
Route Distinguisher: 10.3.3.3:5
*> [3]:[0]:[32]:[10.3.3.3]
                                           0 65002 65003 i
Route Distinguisher: 10.3.3.3:6
*> [3]:[0]:[32]:[10.3.3.3]
                                           0 65002 65003 i

Total number of prefixes 6
vyos@vy001:~$ 

動作確認 (4) 疎通確認

host100とhost200の間で互いに疎通可能である事を確認します。

[host100:RockyLinux8.4]
[root@host100 ~]# ping -c 3 172.16.0.200
PING 172.16.0.200 (172.16.0.200) 56(84) bytes of data.
64 bytes from 172.16.0.200: icmp_seq=1 ttl=64 time=1.31 ms
64 bytes from 172.16.0.200: icmp_seq=2 ttl=64 time=1.58 ms
64 bytes from 172.16.0.200: icmp_seq=3 ttl=64 time=1.82 ms

--- 172.16.0.200 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 1.311/1.569/1.819/0.207 ms
[root@host100 ~]# 
[root@host100 ~]# 
[root@host100 ~]# ping -c 3 172.16.100.200
PING 172.16.100.200 (172.16.100.200) 56(84) bytes of data.
64 bytes from 172.16.100.200: icmp_seq=1 ttl=64 time=1.66 ms
64 bytes from 172.16.100.200: icmp_seq=2 ttl=64 time=1.71 ms
64 bytes from 172.16.100.200: icmp_seq=3 ttl=64 time=1.73 ms

--- 172.16.100.200 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 1.658/1.699/1.730/0.056 ms
[root@host100 ~]# 
[root@host100 ~]# 
[root@host100 ~]# ping -c 3 172.16.200.200
PING 172.16.200.200 (172.16.200.200) 56(84) bytes of data.
64 bytes from 172.16.200.200: icmp_seq=1 ttl=64 time=1.32 ms
64 bytes from 172.16.200.200: icmp_seq=2 ttl=64 time=1.65 ms
64 bytes from 172.16.200.200: icmp_seq=3 ttl=64 time=1.85 ms

--- 172.16.200.200 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 1.317/1.605/1.852/0.225 ms
[root@host100 ~]# 

EVPN BGPのshowコマンドの出力になれるよう、もう少しshowコマンドの出力を観察します。MACアドレスに関する情報は一定時間で消えてしまうため、観察しやすいようhost100からhost200へのpingを送信したままの状態にします。

[host100:RockyLinux8.4]
[root@host100 ~]# ping 172.16.100.200
PING 172.16.100.200 (172.16.100.200) 56(84) bytes of data.
64 bytes from 172.16.100.200: icmp_seq=1 ttl=64 time=2.00 ms
64 bytes from 172.16.100.200: icmp_seq=2 ttl=64 time=1.51 ms
64 bytes from 172.16.100.200: icmp_seq=3 ttl=64 time=1.69 ms

 <omitted>

対向のBGP neighborへadvertiseしている情報を確認します。トラフィックが流れている状態では、EVPN type 3だけではなく、EVPN type 2も観測されています。EVPN type 2は互いのMACアドレスを交換するための情報です。

[vy001:VyOS1.4]
vyos@vy001:~$ show bgp l2vpn evpn neighbors 10.2.2.2 advertised-routes 
BGP table version is 0, local router ID is 10.1.1.1
Default local pref 100, local AS 65001
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 10.1.1.1:4
*> [2]:[0]:[48]:[00:50:56:8e:96:66]
                                       32768 i
*> [3]:[0]:[32]:[10.1.1.1]
                                       32768 i
Route Distinguisher: 10.1.1.1:5
*> [3]:[0]:[32]:[10.1.1.1]
                                       32768 i
Route Distinguisher: 10.1.1.1:6
*> [3]:[0]:[32]:[10.1.1.1]
                                       32768 i
Route Distinguisher: 10.3.3.3:4
*> [2]:[0]:[48]:[00:50:56:8e:83:9b]
                                           0 65002 65003 i
*> [3]:[0]:[32]:[10.3.3.3]
                                           0 65002 65003 i
Route Distinguisher: 10.3.3.3:5
*> [3]:[0]:[32]:[10.3.3.3]
                                           0 65002 65003 i
Route Distinguisher: 10.3.3.3:6
*> [3]:[0]:[32]:[10.3.3.3]
                                           0 65002 65003 i

Total number of prefixes 8
vyos@vy001:~$ 

vy001が認識しているMACアドレスを確認します。自身と接続されているMACアドレスには「local」と表示され、対向から学習したMACアドレスには「remote」と表示されています。

[vy001:VyOS1.4]
vyos@vy001:~$ show evpn mac vni 10100
Number of MACs (local and remote) known for this VNI: 3
Flags: N=sync-neighs, I=local-inactive, P=peer-active, X=peer-proxy
MAC               Type   Flags Intf/Remote ES/VTEP            VLAN  Seq #'s
00:50:56:8e:83:9b remote       10.3.3.3                             0/0
00:50:56:8e:96:66 local        eth0.100                             0/0
00:50:56:8e:74:ec local        br100                          1     0/0
vyos@vy001:~$ 

EVPNによって学習している情報を確認します。

[vy001:VyOS1.4]
vyos@vy001:~$ show bgp l2vpn evpn route vni 10100
BGP table version is 7, local router ID is 10.1.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
Origin codes: i - IGP, e - EGP, ? - incomplete
EVPN type-1 prefix: [1]:[ESI]:[EthTag]:[IPlen]:[VTEP-IP]
EVPN type-2 prefix: [2]:[EthTag]:[MAClen]:[MAC]:[IPlen]:[IP]
EVPN type-3 prefix: [3]:[EthTag]:[IPlen]:[OrigIP]
EVPN type-4 prefix: [4]:[ESI]:[IPlen]:[OrigIP]
EVPN type-5 prefix: [5]:[EthTag]:[IPlen]:[IP]

   Network          Next Hop            Metric LocPrf Weight Path
*> [2]:[0]:[48]:[00:50:56:8e:83:9b]
                    10.3.3.3                               0 65002 65003 i
                    RT:65003:10100 ET:8
*> [2]:[0]:[48]:[00:50:56:8e:96:66]
                    10.1.1.1                           32768 i
                    ET:8 RT:65001:10100
*> [3]:[0]:[32]:[10.1.1.1]
                    10.1.1.1                           32768 i
                    ET:8 RT:65001:10100
*> [3]:[0]:[32]:[10.3.3.3]
                    10.3.3.3                               0 65002 65003 i
                    RT:65003:10100 ET:8

Displayed 4 prefixes (4 paths)

vyos@vy001:~$ 
タイトルとURLをコピーしました