ズンドコキヨシ with ルータ - Cisco VIRLとMPLS-TEでズンドコルータを実現してみた

ズンドコキヨシをルータで実現してみました。

@webdevjpさんの下記のツイートに触発され、Ciscoルータで実現してみました。
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">ズンドコをtracerouteで表現しました(メディアアート) <a href="https://t.co/1Bc7DDfGXi">pic.twitter.com/1Bc7DDfGXi</a></p>&mdash; Web猫 (@webdevjp) <a href="https://twitter.com/webdevjp/status/712252677736902656">2016年3月22日</a></blockquote>

ズンドコキヨシについては、[ズンドコキヨシまとめ](http://qiita.com/shunsugai@github/items/971a15461de29563bf90)を参照してください。

# ズンドコルータ
「ズン」ルータと「ドコ」ルータでネットワークを構築し、経由するルータによってズンドコキヨシを実現します。実現にはルータが大量に必要なため、Ciscoの仮想ルータ環境を構築する[Cisco VIRL](http://virl.cisco.com/)を用いて、合計14台の仮想ルータと検証用ホストを構築しました。
構築したネットワークは下図になります。最初にstartルータと最後にfinishルータがあり、その間にズンドコルータとキヨシルータとfailedルータで構成しています。ズンドコキヨシの条件に一致した時にはキヨシルータを経由し、それ以外はfailedルータを経由します。

図. VIRLによるCisco仮想ルータの構成図
![構成図.png](https://qiita-image-store.s3.amazonaws.com/0/12026/6519facb-b02f-405f-d4db-75590fc1232e.png)

## 方法
ルータで宛先に複数の経路がありルーティングプロトコルのOSFPを使用している場合、ECMPにより分散してトラフィックが流れます。このまま構築すると、ズンドコキヨシの条件に一致しなくても、キヨシルータを経由する可能性があります。そのため、ソースルーティングにより予め経由するルータを指定します。ソースルーティングはOSPFとMPLS-TEで実現します。
5段のズンドコルータを経由するパスは32パス（2の5乗）あるため、全32パスをstartルータで定義します。32パス中、「zun1 - zun2 - zun3 - zun4 - doko5」を経由するパスのみキヨシルータを経由し、それ以外はfailedルータを経由するよう設定します。
パケットがstartルータを経由する場合、ECMPにより32パスから1パスが経路として選定され、指定したルータを経由してfinishまで到達します。

## 結果
下記の通りhostからtracerouteすることで、特定パケットのみキヨシルータを通り、それ以外はfailedルータを経由します。
![実行結果.png](https://qiita-image-store.s3.amazonaws.com/0/12026/b27b8475-6b60-a0ef-5c94-1868e5f51f6b.png)

tracerouteの実行結果にルータ名を表示するため、hostの/etc/hostsにIPアドレスとホスト名を記述しています。

tracerouteの実行時にホップごとに異なるパスを経由することを回避するため、tracerouteのオプションで、TCPの指定と宛先ポートを指定して、プローブパケットの宛先情報が変化しないよう固定しています。「-T」でTCPプロトコル、「-p」で宛先ポートを指定しています。これにより、tracerouteのプローブパケットの宛先情報がプローブパケットごとに変化しないため、同じパスを経由するようになります。

## 設定
CiscoルータのMPLS-TE設定を抜粋しました。1ルータまるごとのコンフィグは付録にあります。
startルータのみ、ソースルーティングのために、特別な設定をしています。

```txt:startルータの設定
! プローブパケットにTCPを利用したtraceroute時に宛先ポート番号ごとにロードバランスするよう設定
ip cef load-sharing algorithm include-ports destination
!
! トラフィックが32パスに分散されるよう設定
router ospf 1
 maximum-paths 32
!
! ソースルーティング用に32パス分のMPLS-TEの定義を実施
! ip explicit-pathとトンネルインタフェースをパスごとに設定
!
! ズンドコキヨシの条件に一致しないパス
ip explicit-path name Tunnel100 enable
 next-address 192.168.0.11   ! zun1ルータ
 next-address 192.168.0.12   ! zun2ルータ
 next-address 192.168.0.13   ! zun3ルータ
 next-address 192.168.0.14   ! zun4ルータ
 next-address 192.168.0.15   ! zun5ルータ
 next-address 192.168.0.31   ! failedルータ
interface Tunnel100
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2  ! finishルータ
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel100
 tunnel mpls traffic-eng record-route
!
! ズンドコキヨシの条件に一致するパス
ip explicit-path name Tunnel101 enable
 next-address 192.168.0.11  ! zun1ルータ
 next-address 192.168.0.12  ! zun2ルータ
 next-address 192.168.0.13  ! zun3ルータ
 next-address 192.168.0.14  ! zun4ルータ
 next-address 192.168.0.25  ! doko5ルータ
 next-address 192.168.0.32  ! kiyoshiルータ
interface Tunnel101
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2  ! finishルータ
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel101
 tunnel mpls traffic-eng record-route
```
## 状態
startルータでshow ip routeの実行結果です。32パスでECMPしていることが確認できます。

```txt
start#show ip route 192.168.0.2
Routing entry for 192.168.0.2/32
  Known via "ospf 1", distance 110, metric 8, type intra area
  Last update from 192.168.0.2 on Tunnel122, 02:23:58 ago
  Routing Descriptor Blocks:
    192.168.0.2, from 192.168.0.2, 02:23:58 ago, via Tunnel122
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:23:58 ago, via Tunnel123
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:23:58 ago, via Tunnel124
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:23:58 ago, via Tunnel125
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:23:58 ago, via Tunnel126
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:23:58 ago, via Tunnel127
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:23:58 ago, via Tunnel128
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:23:58 ago, via Tunnel129
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:23:58 ago, via Tunnel130
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:23:58 ago, via Tunnel131
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:24:08 ago, via Tunnel113
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:24:08 ago, via Tunnel114
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:24:08 ago, via Tunnel115
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:24:08 ago, via Tunnel116
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:24:08 ago, via Tunnel117
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:24:08 ago, via Tunnel118
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:24:08 ago, via Tunnel119
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:24:08 ago, via Tunnel120
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:24:08 ago, via Tunnel121
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:24:18 ago, via Tunnel108
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:24:18 ago, via Tunnel109
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:24:18 ago, via Tunnel110
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:24:18 ago, via Tunnel111
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:24:18 ago, via Tunnel112
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:24:28 ago, via Tunnel100
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:24:28 ago, via Tunnel101
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:24:28 ago, via Tunnel102
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:24:28 ago, via Tunnel103
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:24:28 ago, via Tunnel104
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:24:28 ago, via Tunnel105
      Route metric is 8, traffic share count is 1
    192.168.0.2, from 192.168.0.2, 02:24:28 ago, via Tunnel106
      Route metric is 8, traffic share count is 1
  * 192.168.0.2, from 192.168.0.2, 02:24:28 ago, via Tunnel107
      Route metric is 8, traffic share count is 1
start# 
```

MPLS-TEで生成したトンネルの結果です。ip explicit-pathsで経由するルータを指定し、MPLS-TE Tunnelにそのパス情報を使うよう設定していることが確認できます。

```txt
start#show ip explicit-paths name Tunnel101
PATH Tunnel101 (strict source route, path complete, generation 16)
    1: next-address 192.168.0.11
    2: next-address 192.168.0.12
    3: next-address 192.168.0.13
    4: next-address 192.168.0.14
    5: next-address 192.168.0.25
    6: next-address 192.168.0.32
start#show mpls traffic-eng tunnels Tunnel101

Name: start_t101                          (Tunnel101) Destination: 192.168.0.2
  Status:
    Admin: up         Oper: up     Path: valid       Signalling: connected
    path option 1, type explicit Tunnel101 (Basis for Setup, path weight 7)

  Config Parameters:
    Bandwidth: 0        kbps (Global)  Priority: 7  7   Affinity: 0x0/0xFFFF
    Metric Type: TE (default)
    AutoRoute:  enabled   LockDown: disabled  Loadshare: 0        bw-based
    auto-bw: disabled
  Active Path Option Parameters:
    State: explicit path option 1 is active
    BandwidthOverride: disabled  LockDown: disabled  Verbatim: disabled


  InLabel  :  - 
  OutLabel : GigabitEthernet0/1, 51
  RSVP Signalling Info:
       Src 192.168.0.1, Dst 192.168.0.2, Tun_Id 101, Tun_Instance 1
    RSVP Path Info:
      My Address: 10.0.0.17   
      Explicit Route: 10.0.0.18 10.0.0.49 10.0.0.50 10.0.0.65 
                      10.0.0.66 10.0.0.73 10.0.0.74 10.0.0.90 
                      10.0.0.89 10.0.0.25 10.0.0.26 10.0.0.10 
                      10.0.0.9 192.168.0.2 
      Record   Route: 
      Tspec: ave rate=0 kbits, burst=1000 bytes, peak rate=0 kbits
    RSVP Resv Info:
      Record   Route:  10.0.0.49 10.0.0.65 10.0.0.73 10.0.0.90
                       10.0.0.25 10.0.0.10 10.0.0.9
      Fspec: ave rate=0 kbits, burst=1000 bytes, peak rate=0 kbits
  Shortest Unconstrained Path Info:
    Path Weight: 7 (TE)
    Explicit Route: 10.0.0.22 10.0.0.21 10.0.0.41 10.0.0.42 
                    10.0.0.54 10.0.0.53 10.0.0.69 10.0.0.70 
                    10.0.0.93 10.0.0.94 10.0.0.25 10.0.0.26 
                    10.0.0.10 10.0.0.9 192.168.0.2 
  History:
    Tunnel:
      Time since created: 2 hours, 27 minutes
      Time since path change: 2 hours, 27 minutes
      Number of LSP IDs (Tun_Instances) used: 1
    Current LSP:
      Uptime: 2 hours, 27 minutes
start#
```

# 付録

## パス生成スクリプト
startルータで32パスを定義するため、Rubyでスクリプト作成しました。下記を実行することでMPLS-TEの定義用のコンフィグが生成されます。

```rb:create_path.rb
# IPアドレスの4オクテット目
zun_row  = [11, 12, 13, 14, 15, 31]
doko_row = [21, 22, 23, 24, 25, 32]
row      = zun_row.zip(doko_row)
# => [[11, 21], [12, 22], [13, 23], [14, 24], [15, 25], [31, 32]]

# 2進数で32パターンを定義
# 0はズン列、1はドコ列を経由するよう設定
kiyoshi_path = '00001'
paths = []
32.times do |i|
  path = '%05b' % i
  # 00001(zun1 zun2 zun3 zun4 dok5)の場合、kiyoshiルータを経由
  path += kiyoshi_path == path ? '1' : '0'
  paths << path
end

# 32パターンのMPLS-TEトンネルを生成
paths.each_with_index do |path, i|
  iface = 'Tunnel%d' % (100 + i)
  puts 'ip explicit-path name %s' % iface
  # 中継するルータを定義
  path.chars.each_with_index do |c, j|
    puts ' next-address 192.168.0.%d ' % row[j][c.to_i]
  end
  puts 'interface %s' % iface
  puts ' ip unnumbered Loopback0'
  puts ' tunnel destination 192.168.0.2'
  puts ' tunnel mode mpls traffic-eng'
  puts ' tunnel mpls traffic-eng path-option 1 explicit name %s' % iface
  puts ' tunnel mpls traffic-eng record-route'
  puts ' tunnel mpls traffic-eng autoroute announce'
  puts
end
```

```bash:
$ ruby create_path.rb 
ip explicit-path name Tunnel100
 next-address 192.168.0.11 
 next-address 192.168.0.12 
 next-address 192.168.0.13 
 next-address 192.168.0.14 
 next-address 192.168.0.15 
 next-address 192.168.0.31 
interface Tunnel100
 ip unnumbered Loopback0
 tunnel destination 192.168.0.2
 tunnel mode mpls traffic-eng
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel100
 tunnel mpls traffic-eng record-route
 tunnel mpls traffic-eng autoroute announce

ip explicit-path name Tunnel101
 next-address 192.168.0.11 
 next-address 192.168.0.12 
 next-address 192.168.0.13 
 next-address 192.168.0.14 
 next-address 192.168.0.25 
 next-address 192.168.0.32 
interface Tunnel101
 ip unnumbered Loopback0
 tunnel destination 192.168.0.2
 tunnel mode mpls traffic-eng
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel101
 tunnel mpls traffic-eng record-route
 tunnel mpls traffic-eng autoroute announce
〜略〜
```

## コンフィグ
VIRLに付属のツール「AutoNetkit」で生成したコンフィグに必要なコンフィグを追加しています。コンフィグが長いため、startルータとzun1ルータのみ掲載します。

## startルータ
```txt
start#show run
Building configuration...

Current configuration : 19542 bytes
!
! Last configuration change at 11:33:50 UTC Fri Mar 25 2016
!
version 15.6
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname start
!
boot-start-marker
boot-end-marker
!
!
vrf definition Mgmt-intf
 !
 address-family ipv4
 exit-address-family
 !
 address-family ipv6
 exit-address-family
!
enable password cisco
!
no aaa new-model
ethernet lmi ce
!
!
!
mmi polling-interval 60
no mmi auto-configure
no mmi pvc
mmi snmp-timeout 180
!
!
!
!
!
!
!
!
!
!
!
no ip domain lookup
ip domain name virl.info
ip cef
ip cef load-sharing algorithm include-ports destination
ipv6 unicast-routing
ipv6 cef
!
multilink bundle-name authenticated
mpls traffic-eng tunnels
!
!
!
!
username cisco privilege 15 secret 5 $1$m4LM$omj4gj9dA2PFBXyGxz.Og1
!
redundancy
!
no cdp run
!
! 
!
!
!
!
!
!
!
!
!
!
!
!
interface Loopback0
 description Loopback
 ip address 192.168.0.1 255.255.255.255
!
interface Tunnel100
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel100
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel101
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel101
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel102
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel102
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel103
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel103
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel104
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel104
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel105
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel105
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel106
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel106
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel107
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel107
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel108
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel108
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel109
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel109
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel110
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel110
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel111
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel111
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel112
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel112
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel113
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel113
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel114
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel114
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel115
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel115
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel116
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel116
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel117
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel117
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel118
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel118
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel119
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel119
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel120
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel120
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel121
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel121
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel122
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel122
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel123
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel123
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel124
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel124
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel125
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel125
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel126
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel126
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel127
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel127
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel128
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel128
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel129
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel129
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel130
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel130
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface Tunnel131
 ip unnumbered Loopback0
 tunnel mode mpls traffic-eng
 tunnel destination 192.168.0.2
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng path-option 1 explicit name Tunnel131
 tunnel mpls traffic-eng record-route
 no routing dynamic
!
interface GigabitEthernet0/0
 description OOB Management
 vrf forwarding Mgmt-intf
 ip address 10.255.0.212 255.255.0.0
 duplex full
 speed auto
 media-type rj45
!
interface GigabitEthernet0/1
 description to zun1
 ip address 10.0.0.17 255.255.255.252
 ip ospf cost 1
 duplex full
 speed auto
 media-type rj45
 mpls traffic-eng tunnels
 mpls ip
 ip rsvp bandwidth percent 100
!
interface GigabitEthernet0/2
 description to doko1
 ip address 10.0.0.22 255.255.255.252
 ip ospf cost 1
 duplex full
 speed auto
 media-type rj45
 mpls traffic-eng tunnels
 mpls ip
 ip rsvp bandwidth percent 100
!
interface GigabitEthernet0/3
 description to host
 ip address 10.0.0.5 255.255.255.252
 ip ospf cost 1
 duplex full
 speed auto
 media-type rj45
!
router ospf 1
 mpls traffic-eng router-id Loopback0
 mpls traffic-eng area 0
 passive-interface Loopback0
 network 10.0.0.4 0.0.0.3 area 0
 network 10.0.0.16 0.0.0.3 area 0
 network 10.0.0.20 0.0.0.3 area 0
 network 192.168.0.1 0.0.0.0 area 0
 maximum-paths 32
!
router bgp 1
 bgp router-id 192.168.0.1
 bgp log-neighbor-changes
 !
 address-family ipv4
  network 192.168.0.1 mask 255.255.255.255
 exit-address-family
!
ip forward-protocol nd
!
!
no ip http server
no ip http secure-server
!
ip explicit-path name Tunnel100 enable
 next-address 192.168.0.11
 next-address 192.168.0.12
 next-address 192.168.0.13
 next-address 192.168.0.14
 next-address 192.168.0.15
 next-address 192.168.0.31
!
ip explicit-path name Tunnel101 enable
 next-address 192.168.0.11
 next-address 192.168.0.12
 next-address 192.168.0.13
 next-address 192.168.0.14
 next-address 192.168.0.25
 next-address 192.168.0.32
!
ip explicit-path name Tunnel102 enable
 next-address 192.168.0.11
 next-address 192.168.0.12
 next-address 192.168.0.13
 next-address 192.168.0.24
 next-address 192.168.0.15
 next-address 192.168.0.31
!
ip explicit-path name Tunnel103 enable
 next-address 192.168.0.11
 next-address 192.168.0.12
 next-address 192.168.0.13
 next-address 192.168.0.24
 next-address 192.168.0.25
 next-address 192.168.0.31
!
ip explicit-path name Tunnel104 enable
 next-address 192.168.0.11
 next-address 192.168.0.12
 next-address 192.168.0.23
 next-address 192.168.0.14
 next-address 192.168.0.15
 next-address 192.168.0.31
!
ip explicit-path name Tunnel105 enable
 next-address 192.168.0.11
 next-address 192.168.0.12
 next-address 192.168.0.23
 next-address 192.168.0.14
 next-address 192.168.0.25
 next-address 192.168.0.31
!
ip explicit-path name Tunnel106 enable
 next-address 192.168.0.11
 next-address 192.168.0.12
 next-address 192.168.0.23
 next-address 192.168.0.24
 next-address 192.168.0.15
 next-address 192.168.0.31
!
ip explicit-path name Tunnel107 enable
 next-address 192.168.0.11
 next-address 192.168.0.12
 next-address 192.168.0.23
 next-address 192.168.0.24
 next-address 192.168.0.25
 next-address 192.168.0.31
!
ip explicit-path name Tunnel108 enable
 next-address 192.168.0.11
 next-address 192.168.0.22
 next-address 192.168.0.13
 next-address 192.168.0.14
 next-address 192.168.0.15
 next-address 192.168.0.31
!
ip explicit-path name Tunnel109 enable
 next-address 192.168.0.11
 next-address 192.168.0.22
 next-address 192.168.0.13
 next-address 192.168.0.14
 next-address 192.168.0.25
 next-address 192.168.0.31
!
ip explicit-path name Tunnel110 enable
 next-address 192.168.0.11
 next-address 192.168.0.22
 next-address 192.168.0.13
 next-address 192.168.0.24
 next-address 192.168.0.15
 next-address 192.168.0.31
!
ip explicit-path name Tunnel111 enable
 next-address 192.168.0.11
 next-address 192.168.0.22
 next-address 192.168.0.13
 next-address 192.168.0.24
 next-address 192.168.0.25
 next-address 192.168.0.31
!
ip explicit-path name Tunnel112 enable
 next-address 192.168.0.11
 next-address 192.168.0.22
 next-address 192.168.0.23
 next-address 192.168.0.14
 next-address 192.168.0.15
 next-address 192.168.0.31
!
ip explicit-path name Tunnel113 enable
 next-address 192.168.0.11
 next-address 192.168.0.22
 next-address 192.168.0.23
 next-address 192.168.0.14
 next-address 192.168.0.25
 next-address 192.168.0.31
!
ip explicit-path name Tunnel114 enable
 next-address 192.168.0.11
 next-address 192.168.0.22
 next-address 192.168.0.23
 next-address 192.168.0.24
 next-address 192.168.0.15
 next-address 192.168.0.31
!
ip explicit-path name Tunnel115 enable
 next-address 192.168.0.11
 next-address 192.168.0.22
 next-address 192.168.0.23
 next-address 192.168.0.24
 next-address 192.168.0.25
 next-address 192.168.0.31
!
ip explicit-path name Tunnel116 enable
 next-address 192.168.0.21
 next-address 192.168.0.12
 next-address 192.168.0.13
 next-address 192.168.0.14
 next-address 192.168.0.15
 next-address 192.168.0.31
!
ip explicit-path name Tunnel117 enable
 next-address 192.168.0.21
 next-address 192.168.0.12
 next-address 192.168.0.13
 next-address 192.168.0.14
 next-address 192.168.0.25
 next-address 192.168.0.31
!
ip explicit-path name Tunnel118 enable
 next-address 192.168.0.21
 next-address 192.168.0.12
 next-address 192.168.0.13
 next-address 192.168.0.24
 next-address 192.168.0.15
 next-address 192.168.0.31
!
ip explicit-path name Tunnel119 enable
 next-address 192.168.0.21
 next-address 192.168.0.12
 next-address 192.168.0.13
 next-address 192.168.0.24
 next-address 192.168.0.25
 next-address 192.168.0.31
!
ip explicit-path name Tunnel120 enable
 next-address 192.168.0.21
 next-address 192.168.0.12
 next-address 192.168.0.23
 next-address 192.168.0.14
 next-address 192.168.0.15
 next-address 192.168.0.31
!
ip explicit-path name Tunnel121 enable
 next-address 192.168.0.21
 next-address 192.168.0.12
 next-address 192.168.0.23
 next-address 192.168.0.14
 next-address 192.168.0.25
 next-address 192.168.0.31
!
ip explicit-path name Tunnel122 enable
 next-address 192.168.0.21
 next-address 192.168.0.12
 next-address 192.168.0.23
 next-address 192.168.0.24
 next-address 192.168.0.15
 next-address 192.168.0.31
!
ip explicit-path name Tunnel123 enable
 next-address 192.168.0.21
 next-address 192.168.0.12
 next-address 192.168.0.23
 next-address 192.168.0.24
 next-address 192.168.0.25
 next-address 192.168.0.31
!
ip explicit-path name Tunnel124 enable
 next-address 192.168.0.21
 next-address 192.168.0.22
 next-address 192.168.0.13
 next-address 192.168.0.14
 next-address 192.168.0.15
 next-address 192.168.0.31
!
ip explicit-path name Tunnel125 enable
 next-address 192.168.0.21
 next-address 192.168.0.22
 next-address 192.168.0.13
 next-address 192.168.0.14
 next-address 192.168.0.25
 next-address 192.168.0.31
!
ip explicit-path name Tunnel126 enable
 next-address 192.168.0.21
 next-address 192.168.0.22
 next-address 192.168.0.13
 next-address 192.168.0.24
 next-address 192.168.0.15
 next-address 192.168.0.31
!
ip explicit-path name Tunnel127 enable
 next-address 192.168.0.21
 next-address 192.168.0.22
 next-address 192.168.0.13
 next-address 192.168.0.24
 next-address 192.168.0.25
 next-address 192.168.0.31
!
ip explicit-path name Tunnel128 enable
 next-address 192.168.0.21
 next-address 192.168.0.22
 next-address 192.168.0.23
 next-address 192.168.0.14
 next-address 192.168.0.15
 next-address 192.168.0.31
!
ip explicit-path name Tunnel129 enable
 next-address 192.168.0.21
 next-address 192.168.0.22
 next-address 192.168.0.23
 next-address 192.168.0.14
 next-address 192.168.0.25
 next-address 192.168.0.31
!
ip explicit-path name Tunnel130 enable
 next-address 192.168.0.21
 next-address 192.168.0.22
 next-address 192.168.0.23
 next-address 192.168.0.24
 next-address 192.168.0.15
 next-address 192.168.0.31
!
ip explicit-path name Tunnel131 enable
 next-address 192.168.0.21
 next-address 192.168.0.22
 next-address 192.168.0.23
 next-address 192.168.0.24
 next-address 192.168.0.25
 next-address 192.168.0.31
ip ssh server algorithm authentication password
!
!
!
mpls ldp router-id Loopback0
!
control-plane
!
banner exec ^C
**************************************************************************
* IOSv is strictly limited to use for evaluation, demonstration and IOS  *
* education. IOSv is provided as-is and is not supported by Cisco's      *
* Technical Advisory Center. Any use or disclosure, in whole or in part, *
* of the IOSv Software or Documentation to any third party for any       *
* purposes is expressly prohibited except as otherwise authorized by     *
* Cisco in writing.                                                      *
**************************************************************************^C
banner incoming ^C
**************************************************************************
* IOSv is strictly limited to use for evaluation, demonstration and IOS  *
* education. IOSv is provided as-is and is not supported by Cisco's      *
* Technical Advisory Center. Any use or disclosure, in whole or in part, *
* of the IOSv Software or Documentation to any third party for any       *
* purposes is expressly prohibited except as otherwise authorized by     *
* Cisco in writing.                                                      *
**************************************************************************^C
banner login ^C
**************************************************************************
* IOSv is strictly limited to use for evaluation, demonstration and IOS  *
* education. IOSv is provided as-is and is not supported by Cisco's      *
* Technical Advisory Center. Any use or disclosure, in whole or in part, *
* of the IOSv Software or Documentation to any third party for any       *
* purposes is expressly prohibited except as otherwise authorized by     *
* Cisco in writing.                                                      *
**************************************************************************^C
!
line con 0
 password cisco
line aux 0
line vty 0 4
 exec-timeout 720 0
 password cisco
 login local
 transport input telnet ssh
!
no scheduler allocate
!
end
```

### zun1ルータ
```txt
zun1#show run
Building configuration...

Current configuration : 4276 bytes
!
! Last configuration change at 10:18:31 UTC Fri Mar 25 2016
!
version 15.6
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname zun1
!
boot-start-marker
boot-end-marker
!
!
vrf definition Mgmt-intf
 !
 address-family ipv4
 exit-address-family
 !
 address-family ipv6
 exit-address-family
!
enable password cisco
!
no aaa new-model
ethernet lmi ce
!
!
!
mmi polling-interval 60
no mmi auto-configure
no mmi pvc
mmi snmp-timeout 180
!
!
!
!
!
!
!
!
!
!
!
no ip domain lookup
ip domain name virl.info
ip cef
ipv6 unicast-routing
ipv6 cef
!
multilink bundle-name authenticated
mpls traffic-eng tunnels
!
!
!
!
username cisco privilege 15 secret 5 $1$7E6E$AiBjxgKJELyQo8PUZU1X10
!
redundancy
!
no cdp run
!
! 
!
!
!
!
!
!
!
!
!
!
!
!
interface Loopback0
 description Loopback
 ip address 192.168.0.11 255.255.255.255
!
interface GigabitEthernet0/0
 description OOB Management
 vrf forwarding Mgmt-intf
 ip address 10.255.0.219 255.255.0.0
 duplex full
 speed auto
 media-type rj45
!
interface GigabitEthernet0/1
 description to zun2
 ip address 10.0.0.49 255.255.255.252
 ip ospf cost 1
 duplex full
 speed auto
 media-type rj45
 mpls traffic-eng tunnels
 mpls ip
 ip rsvp bandwidth percent 100
!
interface GigabitEthernet0/2
 description to doko2
 ip address 10.0.0.46 255.255.255.252
 ip ospf cost 1
 duplex full
 speed auto
 media-type rj45
 mpls traffic-eng tunnels
 mpls ip
 ip rsvp bandwidth percent 100
!
interface GigabitEthernet0/3
 description to start
 ip address 10.0.0.18 255.255.255.252
 ip ospf cost 1
 duplex full
 speed auto
 media-type rj45
 mpls traffic-eng tunnels
 mpls ip
 ip rsvp bandwidth percent 100
!
router ospf 1
 mpls traffic-eng router-id Loopback0
 mpls traffic-eng area 0
 passive-interface Loopback0
 network 10.0.0.16 0.0.0.3 area 0
 network 10.0.0.44 0.0.0.3 area 0
 network 10.0.0.48 0.0.0.3 area 0
 network 192.168.0.11 0.0.0.0 area 0
!
router bgp 1
 bgp router-id 192.168.0.11
 bgp log-neighbor-changes
 !
 address-family ipv4
  network 192.168.0.11 mask 255.255.255.255
 exit-address-family
!
ip forward-protocol nd
!
!
no ip http server
no ip http secure-server
ip ssh server algorithm authentication password
!
!
!
mpls ldp router-id Loopback0
!
control-plane
!
banner exec ^C
**************************************************************************
* IOSv is strictly limited to use for evaluation, demonstration and IOS  *
* education. IOSv is provided as-is and is not supported by Cisco's      *
* Technical Advisory Center. Any use or disclosure, in whole or in part, *
* of the IOSv Software or Documentation to any third party for any       *
* purposes is expressly prohibited except as otherwise authorized by     *
* Cisco in writing.                                                      *
**************************************************************************^C
banner incoming ^C
**************************************************************************
* IOSv is strictly limited to use for evaluation, demonstration and IOS  *
* education. IOSv is provided as-is and is not supported by Cisco's      *
* Technical Advisory Center. Any use or disclosure, in whole or in part, *
* of the IOSv Software or Documentation to any third party for any       *
* purposes is expressly prohibited except as otherwise authorized by     *
* Cisco in writing.                                                      *
**************************************************************************^C
banner login ^C
**************************************************************************
* IOSv is strictly limited to use for evaluation, demonstration and IOS  *
* education. IOSv is provided as-is and is not supported by Cisco's      *
* Technical Advisory Center. Any use or disclosure, in whole or in part, *
* of the IOSv Software or Documentation to any third party for any       *
* purposes is expressly prohibited except as otherwise authorized by     *
* Cisco in writing.                                                      *
**************************************************************************^C
!
line con 0
 password cisco
line aux 0
line vty 0 4
 exec-timeout 720 0
 password cisco
 login local
 transport input telnet ssh
!
no scheduler allocate
!
end
```