naoki86star

インターネットの片隅でなにかしら書いてみる

evpn-vxlan with vMX(eval)

 先日のこのときにvMXで次はvxlanを試してみることを考えました。のですが、四苦八苦していて、VXLANの理解不足・JUNOSの理解不足があり(これを改善するためにやっているにせよ)、凡ミスにもはまりこみ結構時間たってしまいました。それでも単純なケースで動いてくれたのでそのことを書きます。

 動機・きっかけは前もメモりましたけどここみて、ここで図示される構成より縮小した構成なら自分の手元で近いことができそうかなと考えて始めました。まともにvMXの8ノード構成を模倣するのはちょっと自分の使える環境だとメモリ足らないので、当初PE*12ノードで、間のコアルータ相当にはBirdルータで別ASN跨ぎをやってみようと、そんなことを考えました。

mplsを通すlinux VMが手元にない=>Birdルータをあきらめる

 evpn-vxlanの前に、手習いとして、evpn-vlanをトライしました。このときに、evpnを使うときには通過するルータはmplsを通す必要あることを学びました。PEを結ぶノードにBirdルータとしてlinuxVMを使おうとしていた目論見がだめになりました。linuxはmpls_routerというモジュールinsmodすればmplsの設定できて通るとのことなのですが、自分の使っているVMがなんかmpls無効になってました。最も早くできそうなことはeve-ngのためにqeumu-kvnでlinuxVMを新規でinstallする、なのですけど、自分的スキルセットからは面倒で時間かかりそうなのでBirdルータ案はあきまめました。(弱!)

 そんなこんなで、vxlan最初一気に設定いれてやってみたら全然ダメだったので、まずPE直結構成でうまくいくことを目指し、それがうまくいったら拠点間coreルータを追加するようにやってきました。こうすると、どの設定がどのレイヤというか機能というか、頭の中で明確になってきます。

  • PE直結

f:id:naoki86star:20191108153815p:plain
(右側の端末ではVLANID10+11の両方)

自分がはまったところ(凡ミスしていたところ)

router-idを設定しないで、かつvtepのインタフェースをlo0としていた。lo0.0とせず、lo0としたのは単に誤りだったのですが*2、router-idを設定して初めてcommit時エラーが出始めて気が付いた次第です。*3
vMXとvxlanの組み合わせでいろいろ書いてくれているところあったのですけど、今にしてみれば、どれも意味が理解できるようになってきたのですが、juniperのここが一番直接的に差分少なく参考にできました。

config:図左側のPE1のみ address,route-distinguisher,neighbor とかの値は適宜、vrf-targetはPE[12]で同一

set interfaces ge-0/0/0 unit 0 family bridge interface-mode trunk
set interfaces ge-0/0/0 unit 0 family bridge vlan-id-list 10-11
set interfaces ge-0/0/2 unit 0 family inet address 10.0.1.1/16
set interfaces ge-0/0/2 unit 0 family mpls
set interfaces lo0 unit 0 family inet address 172.16.0.1/32
set routing-options router-id 172.16.0.1
set routing-options autonomous-system 65000
set protocols bgp group MPIBGP type internal
set protocols bgp group MPIBGP local-address 172.16.0.1
set protocols bgp group MPIBGP family evpn signaling
set protocols bgp group MPIBGP neighbor 172.16.0.2
set protocols ospf area 0.0.0.0 interface lo0.0 passive
set protocols ospf area 0.0.0.0 interface ge-0/0/2.0
set routing-instances EVPN vtep-source-interface lo0.0
set routing-instances EVPN instance-type virtual-switch
set routing-instances EVPN interface ge-0/0/0.0
set routing-instances EVPN route-distinguisher 65000:1
set routing-instances EVPN vrf-target target:65000:10000
set routing-instances EVPN protocols evpn encapsulation vxlan
set routing-instances EVPN protocols evpn extended-vni-list 10010
set routing-instances EVPN protocols evpn extended-vni-list 10011
set routing-instances EVPN protocols evpn multicast-mode ingress-replication
set routing-instances EVPN bridge-domains VLAN10 domain-type bridge
set routing-instances EVPN bridge-domains VLAN10 vlan-id 10
set routing-instances EVPN bridge-domains VLAN10 vxlan vni 10010
set routing-instances EVPN bridge-domains VLAN10 vxlan ingress-node-replication
set routing-instances EVPN bridge-domains VLAN11 domain-type bridge
set routing-instances EVPN bridge-domains VLAN11 vlan-id 11
set routing-instances EVPN bridge-domains VLAN11 vxlan vni 10011
set routing-instances EVPN bridge-domains VLAN11 vxlan ingress-node-replication
  • ここでのbgpはこの記事だとMP-iBGPにあたるはず
  • また、PE間の接続性を確保しているeBGPは、一旦ospfで代用

別テナントと見立てるVLAN11を追加しみてみたけども、vxlanのVNIもあわせて追加するしか、方法みつけられなかった。

  • Pノード追加(簡略版)

f:id:naoki86star:20191111150219p:plain

  • Pノードを追加して、PE間ルーティング情報交換のため、EBGP/IBGPを設定+Pノード間でospfを設定(IBGPは少し役割がずれているのかも)
  • 使ったプロトコルは記事に近くなったつもり

PE間の線をいずれの2か所まで切っても(あもちろん同じPEのge-0/0/[23]同時以外で)一応疎通は継続しましたけど、切り替わりの時間とかは全然評価できてません。Pの片方を急に落とすと回復にやや時間かかってしまうみたいです。

config:図左側のPE1のみ

set interfaces ge-0/0/0 unit 0 family bridge interface-mode trunk
set interfaces ge-0/0/0 unit 0 family bridge vlan-id-list 10-11
set interfaces ge-0/0/2 unit 0 family inet address 10.0.1.1/24
set interfaces ge-0/0/2 unit 0 family mpls
set interfaces ge-0/0/3 unit 0 family inet address 10.0.3.1/24
set interfaces ge-0/0/3 unit 0 family mpls
set interfaces lo0 unit 0 family inet address 172.16.0.1/32
set routing-options router-id 172.16.0.1
set routing-options autonomous-system 65000
set protocols bgp group MPIBGP type internal
set protocols bgp group MPIBGP local-address 172.16.0.1
set protocols bgp group MPIBGP family evpn signaling
set protocols bgp group MPIBGP neighbor 172.16.0.2
set protocols bgp group EBGP type external
set protocols bgp group EBGP family inet unicast loops 2
set protocols bgp group EBGP export LOOPBACK
set protocols bgp group EBGP peer-as 64999
set protocols bgp group EBGP neighbor 10.0.1.2
set protocols bgp group EBGP neighbor 10.0.3.2
set policy-options policy-statement LOOPBACK from family inet
set policy-options policy-statement LOOPBACK from protocol direct
set policy-options policy-statement LOOPBACK from route-filter 0.0.0.0/0 prefix-length-range /32-/32
set policy-options policy-statement LOOPBACK then accept
set routing-instances EVPN vtep-source-interface lo0.0
set routing-instances EVPN instance-type virtual-switch
set routing-instances EVPN interface ge-0/0/0.0
set routing-instances EVPN route-distinguisher 65000:1
set routing-instances EVPN vrf-target target:65000:10000
set routing-instances EVPN protocols evpn encapsulation vxlan
set routing-instances EVPN protocols evpn extended-vni-list 10010
set routing-instances EVPN protocols evpn extended-vni-list 10011
set routing-instances EVPN protocols evpn multicast-mode ingress-replication
set routing-instances EVPN bridge-domains VLAN10 domain-type bridge
set routing-instances EVPN bridge-domains VLAN10 vlan-id 10
set routing-instances EVPN bridge-domains VLAN10 vxlan vni 10010
set routing-instances EVPN bridge-domains VLAN10 vxlan ingress-node-replication
set routing-instances EVPN bridge-domains VLAN11 domain-type bridge
set routing-instances EVPN bridge-domains VLAN11 vlan-id 11
set routing-instances EVPN bridge-domains VLAN11 vxlan vni 10011
set routing-instances EVPN bridge-domains VLAN11 vxlan ingress-node-replication

Pノード:上側のみ

set interfaces ge-0/0/0 unit 0 family inet address 10.0.1.2/24
set interfaces ge-0/0/1 unit 0 family inet address 10.0.2.2/24
set interfaces ge-0/0/2 unit 0 family inet address 10.0.5.1/24
set interfaces lo0 unit 0 family inet address 172.16.1.1/32
set routing-options router-id 172.16.1.1
set routing-options autonomous-system 64999
set protocols bgp group EBGP type external
set protocols bgp group EBGP advertise-peer-as
set protocols bgp group EBGP family inet unicast
set protocols bgp group EBGP peer-as 65000
set protocols bgp group EBGP local-as 64999
set protocols bgp group EBGP neighbor 10.0.1.1
set protocols bgp group EBGP neighbor 10.0.2.1
set protocols bgp group IBGP type internal
set protocols bgp group IBGP neighbor 10.0.5.2
set protocols ospf area 0.0.0.0 interface ge-0/0/2.0
set protocols ospf area 0.0.0.0 interface ge-0/0/0.0
set protocols ospf area 0.0.0.0 interface ge-0/0/1.0
おわり

 MXシリーズにはstaticにvxlanを設定する機能がないようで、簡単なところからはじめようにも、そこが難しかったです。そのことはstaticなvxlanというのは規模の大きいところだと意味がない、というのも暗示している気がして、それはそれでなるほどと思えた部分です。
 コアルータ相当の部分はlogical-systemを使ってみたかったですが、ライセンスが必要みたいでやめました。評価版でもライセンスあるのかどうかもわからないです。

 しばらく見ていたvxlanはこれで一旦離れようと思います。

*1:Provider Edgeの略と理解していて今回はPEと書いたらこの意味です

*2:他のインタフェース設定とかではge-0/0/0とかにしても補完してくれることが多かったから、打つときに省略していて、show confしたときに気づいていなかった

*3:これで一週間くらい悩んだ