らくがきちょう

なんとなく

RouterOS での基本的な MPLS 設定

MikroTik 製品は全般的に安価です。しかしながら、MikroTik 製品に搭載されている RouterOS は豊富な機能を持っています。ローエンドモデルであれば家電店の店頭に並んでいるルータと大差無い価格で手に入りますが、RouterOS が搭載されているので(一部の機能はライセンスレベルに依存しますが)動的ルーティング、VPNファイアウォール、MPLS 等の比較的高度な機能も利用することが出来ます。今回は RouterOS を使って基本的な MPLS(L3 VPN)を設定してみます。具体的には「OSPF、BGP(Route Reflection)、MPLS(LDP)、VRF」等を設定していきます。

構成

VIRL 上に以下のトポロジーを構成して検証しました。

f:id:sig9:20151213014556p:plain

ルータは全て以下を使いました。

  • CHR 6.34rc19 (testing)

構成上の特徴は以下の通りです。

  • MPLS 網内の IGP には OSPF を利用
  • MPLS 網内の AS 番号は 65,000 を利用
  • P2 を Route Reflector として設定
  • PE1 と PE3 を RouteReflector Client として設定
  • VRF-A の RD は 1.1.1.1:111 として設定
  • VRF-B の RD は 2.2.2.2:222 として設定
  • VRF-A と VRF-B のアドレスは意図的に重複するように割り当て

A1 のコンフィグ

/ip address
add address=192.168.1.1/24 interface=ether2 network=192.168.1.0
/ip route
add distance=1 gateway=192.168.1.254
/system identity
set name=A1

A2 のコンフィグ

/ip address
add address=192.168.2.1/24 interface=ether2 network=192.168.2.0
/ip route
add distance=1 gateway=192.168.2.254
/system identity
set name=A2

B1 のコンフィグ

/ip address
add address=192.168.1.1/24 interface=ether3 network=192.168.1.0
/ip route
add distance=1 gateway=192.168.1.254
/system identity
set name=B1

B2 のコンフィグ

/ip address
add address=192.168.2.1/24 interface=ether3 network=192.168.2.0
/ip route
add distance=1 gateway=192.168.2.254
/system identity
set name=B2

PE1 のコンフィグ

/interface bridge
add name=loopback
/routing bgp instance
set default as=65000
/routing ospf instance
set [ find default=yes ] router-id=10.0.0.1
/ip address
add address=10.0.0.1 interface=loopback network=10.0.0.1
add address=192.168.1.254/24 interface=ether2 network=192.168.1.0
add address=192.168.1.254/24 interface=ether3 network=192.168.1.0
add address=172.16.1.1/24 interface=ether4 network=172.16.1.0
/ip route vrf
add export-route-targets=1.1.1.1:111 import-route-targets=1.1.1.1:111 interfaces=ether2 route-distinguisher=1.1.1.1:111 routing-mark=VRF-A
add export-route-targets=2.2.2.2:222 import-route-targets=2.2.2.2:222 interfaces=ether3 route-distinguisher=2.2.2.2:222 routing-mark=VRF-B
/mpls ldp
set enabled=yes lsr-id=10.0.0.1 transport-address=10.0.0.1
/mpls ldp interface
add interface=ether4
/routing bgp instance vrf
add redistribute-connected=yes routing-mark=VRF-A
add redistribute-connected=yes routing-mark=VRF-B
/routing bgp peer
add address-families=vpnv4 name=peer1 remote-address=10.0.0.2 remote-as=65000 update-source=loopback
/routing ospf network
add area=backbone network=10.0.0.1/32
add area=backbone network=172.16.1.0/24
/system identity
set name=PE1

P2 のコンフィグ

/interface bridge
add name=loopback
/routing bgp instance
set default as=65000
/routing ospf instance
set [ find default=yes ] router-id=10.0.0.2
/ip address
add address=10.0.0.2 interface=loopback network=10.0.0.2
add address=172.16.1.2/24 interface=ether4 network=172.16.1.0
add address=172.16.2.2/24 interface=ether5 network=172.16.2.0
/mpls ldp
set enabled=yes lsr-id=10.0.0.2 transport-address=10.0.0.2
/mpls ldp interface
add interface=ether4
add interface=ether5
/routing bgp peer
add address-families=vpnv4 name=peer1 remote-address=10.0.0.1 remote-as=65000 route-reflect=yes update-source=loopback
add address-families=vpnv4 name=peer2 remote-address=10.0.0.3 remote-as=65000 route-reflect=yes update-source=loopback
/routing ospf network
add area=backbone network=10.0.0.2/32
add area=backbone network=172.16.1.0/24
add area=backbone network=172.16.2.0/24
/system identity
set name=P2

PE3 のコンフィグ

/interface bridge
add name=loopback
/routing bgp instance
set default as=65000
/routing ospf instance
set [ find default=yes ] router-id=10.0.0.3
/ip address
add address=10.0.0.3 interface=loopback network=10.0.0.3
add address=192.168.2.254/24 interface=ether2 network=192.168.2.0
add address=192.168.2.254/24 interface=ether3 network=192.168.2.0
add address=172.16.2.3/24 interface=ether5 network=172.16.2.0
/ip route vrf
add export-route-targets=1.1.1.1:111 import-route-targets=1.1.1.1:111 interfaces=ether2 route-distinguisher=\1.1.1.1:111 routing-mark=VRF-A
add export-route-targets=2.2.2.2:222 import-route-targets=2.2.2.2:222 interfaces=ether3 route-distinguisher=2.2.2.2:222 routing-mark=VRF-B
/mpls ldp
set enabled=yes lsr-id=10.0.0.3 transport-address=10.0.0.3
/mpls ldp interface
add interface=ether5
/routing bgp instance vrf
add redistribute-connected=yes routing-mark=VRF-A
add redistribute-connected=yes routing-mark=VRF-B
/routing bgp peer
add address-families=vpnv4 name=peer1 remote-address=10.0.0.2 remote-as=65000 update-source=loopback
/routing ospf network
add area=backbone network=10.0.0.3/32
add area=backbone network=172.16.2.0/24
/system identity
set name=PE3

動作確認

LDP 設定の確認

[admin@PE1] > /mpls ldp print
                       enabled: yes
                        lsr-id: 10.0.0.1
             transport-address: 10.0.0.1
             path-vector-limit: 255
                     hop-limit: 255
                   loop-detect: no
             use-explicit-null: no
  distribute-for-default-route: no

LDP を設定したインターフェイス状態の確認

[admin@PE1] > /mpls ldp interface print
Flags: X - disabled, I - invalid
 #   INTERFACE                                                               HELLO-INTERVAL       HOLD-TIME
 0   ether4                                                                  5s                   15s

LDP 隣接状態の確認

[admin@PE1] > /mpls ldp neighbor print
Flags: X - disabled, D - dynamic, O - operational, T - sending-targeted-hello, V - vpls
 #      TRANSPORT       LOCAL-TRANSPORT PEER                       SEND-TARGETED ADDRESSES
 0 DO   10.0.0.2        10.0.0.1        10.0.0.2:0                 no            10.0.0.2
                                                                                 172.16.1.2
                                                                                 172.16.2.2

BGP ピアの状態確認

[admin@PE1] > /routing bgp peer print
Flags: X - disabled, E - established
 #   INSTANCE                           REMOTE-ADDRESS                                                     REMOTE-AS
 0 E default                            10.0.0.2                                                           65000

BGP で受信した VPNv4 経路の確認

[admin@PE1] > /routing bgp vpnv4-route print
Flags: L - label-present
 #   ROUTE-DISTINGUISHER                DST-ADDRESS        GATEWAY               INTERFACE         IN-LABEL  OUT-LABEL
 0 L 1.1.1.1:111                        192.168.2.0/24     10.0.0.3              ether4                  25         25
 1 L 2.2.2.2:222                        192.168.2.0/24     10.0.0.3              ether4                  26         26
 2 L 1.1.1.1:111                        192.168.1.0/24                           ether2                  25
 3 L 2.2.2.2:222                        192.168.1.0/24                           ether3                  26

A1 から A2 への TELNET

A1 から 192.168.2.1 へ TELNET すると A2 へログイン出来ます。

[admin@A1] > /system telnet 192.168.2.1
Trying 192.168.2.1...
Connected to 192.168.2.1.
Escape character is '^]'.

MikroTik v6.34rc19 (testing)
Login: admin
Password:

[admin@A2] >

B1 から B2 への TELNET

B1 から 192.168.2.1 へ TELNET します。宛先アドレスは先程と同じですが、VRF が異なるので別ネットワークとして処理され、結果的に意図した通り、B2 へログイン出来ます。

[admin@B1] > /system telnet 192.168.2.1
Trying 192.168.2.1...
Connected to 192.168.2.1.
Escape character is '^]'.

MikroTik v6.34rc19 (testing)
Login: admin
Password:

[admin@B2] >