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で互いに経路を交換しているものとします。
動作確認 (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:~$