IPv6

  1. 対応ページ: pp.440-473
  2. 対応試験: CCNPv2.0 Routing and Switching 300-101J ROUTE
  3. カテゴリ: IPv6
  4. サブカテゴリ: なし
  5. IOS: c3725-adventerprisek9-mz.124-15.T14.bin
  6. Cisco ISR 1841, IOS: c1841-adventerprisek9-mz.151-4.M10.bin

グローバルユニキャストアドレス 2000::/3
ユニークローカルユニキャストアドレス FC00::/7 Effectively FD00::/8
リンクローカルユニキャストアドレス FE80::/10

インターフェイスID

EUI-64
64bit Extended Unique Identifier

MACアドレス(EUI-48)

U/L(Universal/Local) ビット

匿名アドレス(一時アドレス) RFC3041
RFC 3041 – Privacy Extensions for Stateless Address Autoconfiguration in IPv6

マルチキャストアドレス

FF00::/8

エニーキャストアドレス

最も近いノードとの通信。

IPv6 ルート集約

IPv6 アドレスの割り当て

手動設定

ステートレスアドレス自動設定(オートコンフィギュレーション)

RFC2462

ネットワークに接続するとルータからプレフィックスが通知される。

近隣探索プロトコル(NDP; Neighbor Discovery Protocol) を使用する。
RS/RA

Router Solicitation

Router Advertisement

主要なプロトコル

ICMPv6

RFC2463
RFC2470
RFC2461

近隣探索プロトコル(NDP)

Neighbor Discovery Protocol

RFC4861

Router Solicitation(RS)
Router Advertisement(RA)

Neighbor Solicitation(NS)
Neighbor Advertisement(NA)

要請ノードマルチキャストアドレスへの参加義務

R1(config)#do sh run | i ipv6
ipv6 unicast-routing
ipv6 cef
R1(config)#ipv6 unicast-routing
R3#sh run | i ipv6
no ipv6 cef
R2(config)#ipv6 unicast-routing
en
conf t
int f0/0
no shut
int f0/1
no shut
end


en
conf t
int f0/0
no shut
end

en
conf t
int f0/0
no shut
end

en
conf t
int f0
no shut
end

en
conf t
int f0
no shut
end

IPv6 の有効化

R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#ipv
R1(config)#ipv6 unica
R1(config)#ipv6 unicast-routing
R1(config)#int f0/0
R1(config-if)#ipv
R1(config-if)#ipv6 ena
R1(config-if)#ipv6 enable
R1(config-if)#do sh ipv
% Ambiguous command:  "do sh ipv"
R1(config-if)#do sh ipv6 int
FastEthernet0/0 is up, line protocol is up
  IPv6 is enabled, link-local address is FE80::21B:2AFF:FE77:66D2
  No Virtual link-local address(es):
  No global unicast address is configured
  Joined group address(es):
    FF02::1
    FF02::2
    FF02::1:FF77:66D2
  MTU is 1500 bytes
  ICMP error messages limited to one every 100 milliseconds
  ICMP redirects are enabled
  ICMP unreachables are sent
  ND DAD is enabled, number of DAD attempts: 1
  ND reachable time is 30000 milliseconds (using 30000)
  ND advertised reachable time is 0 (unspecified)
  ND advertised retransmit interval is 0 (unspecified)
  ND router advertisements are sent every 200 seconds
  ND router advertisements live for 1800 seconds
  ND advertised default router preference is Medium
  Hosts use stateless autoconfig for addresses.

グローバルユニキャストアドレスの設定

R1(config-if)#ipv6 address 2001:1:1:1::/64 eui-64
R1(config-if)#do sh ipv6 int
FastEthernet0/0 is up, line protocol is up
  IPv6 is enabled, link-local address is FE80::21B:2AFF:FE77:66D2
  No Virtual link-local address(es):
  Global unicast address(es):
    2001:1:1:1:21B:2AFF:FE77:66D2, subnet is 2001:1:1:1::/64 [EUI]
  Joined group address(es):
    FF02::1
    FF02::2
    FF02::1:FF77:66D2
  MTU is 1500 bytes
  ICMP error messages limited to one every 100 milliseconds
  ICMP redirects are enabled
  ICMP unreachables are sent
  ND DAD is enabled, number of DAD attempts: 1
  ND reachable time is 30000 milliseconds (using 30000)
  ND advertised reachable time is 0 (unspecified)
  ND advertised retransmit interval is 0 (unspecified)
  ND router advertisements are sent every 200 seconds
  ND router advertisements live for 1800 seconds
  ND advertised default router preference is Medium
  Hosts use stateless autoconfig for addresses.

リンクローカルアドレスをわかりやすいアドレスに変更する。

f0/0 において FE80::1 としよう。

R1(config-if)#ipv6 address FE80::1 link-local
R1(config-if)#do sh ipv6 int f0/0
FastEthernet0/0 is up, line protocol is up
  IPv6 is enabled, link-local address is FE80::1
  No Virtual link-local address(es):
  Global unicast address(es):
    2001:1:1:1::1, subnet is 2001:1:1:1::/64 [EUI]
  Joined group address(es):
    FF02::1
    FF02::2
    FF02::1:FF00:1
  MTU is 1500 bytes
  ICMP error messages limited to one every 100 milliseconds
  ICMP redirects are enabled
  ICMP unreachables are sent
  ND DAD is enabled, number of DAD attempts: 1
  ND reachable time is 30000 milliseconds (using 30000)
  ND advertised reachable time is 0 (unspecified)
  ND advertised retransmit interval is 0 (unspecified)
  ND router advertisements are sent every 200 seconds
  ND router advertisements live for 1800 seconds
  ND advertised default router preference is Medium
  Hosts use stateless autoconfig for addresses.

上記トポロジのように設定してみる。
インターフェイス名はちょっと違うのでご注意。

conf t
int f0/0
ipv6 enable
ipv6 address 2001:1:1:1::/64 eui-64
ipv6 address FE80::1 link-local
int f0/1
ipv6 enable
ipv6 address FE80::1:1 link-local
end

conf t
int f0/0
ipv6 enable
ipv6 address 2001:1:1:1::/64 eui-64
ipv6 address FE80::2 link-local
end

conf t
int f0/0
ipv6 enable
ipv6 address FE80::3 link-local
end

conf t
int f0
ipv6 enable
ipv6 address FE80::1:4 link-local
end

conf t
int f0
ipv6 enable
ipv6 address FE80::1:5 link-local
end

設定が終わったこのとき、 IPv6 ネイバーテーブルを確認すると空っぽ。

R2#sh ipv6 neighbors

ping を打ってみる。

リンクローカルアドレスは出力インターフェイスも指定する必要がある。

出力インターフェイス名は省略形ではなくスペース無しで完全なインターフェイス名を書く必要があるようだ。

R2#ping FE80::1
Output Interface:
% Interface required
R2#ping FE80::1 ?
data specify data pattern
repeat specify repeat count
size specify datagram size
source specify source address or name
timeout specify timeout interval
verbose verbose output

R2#ping FE80::1
Output Interface: f0/0
% Invalid interface. Use full interface name without spaces (e.g. Serial0/1)
Output Interface: FastEthernet0/0
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to FE80::1, timeout is 2 seconds:
Packet sent with a source address of FE80::2%FastEthernet0/0
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 0/1/8 ms

出力の例を見ると % 記述でつなげて出力インターフェイス名を指定できるみたいだ。
YAMAHA でもそんな感じでできた気がする。

R2#ping FE80::1%f0/0
% Unrecognized host or address, or protocol not running.

R2#ping FE80::1%FastEthernet0/0
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to FE80::1, timeout is 2 seconds:
Packet sent with a source address of FE80::2%FastEthernet0/0
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 0/0/4 ms

R2#sh ipv6 neighbors
IPv6 Address Age Link-layer Addr State Interface
FE80::1 0 001b.2a77.66d2 REACH Fa0/0

対向の R1 でもネイバーテーブルにキャッシュされる。

R1#sh ipv6 neighbors
IPv6 Address Age Link-layer Addr State Interface
FE80::2 3 0024.c431.126e STALE Fa0/0

グローバルユニキャストアドレス、ならびにユニークローカルユニキャストアドレスは出力インターフェイスを指定する必要はない。

R1#sh ipv6 int f0/0
FastEthernet0/0 is up, line protocol is up
IPv6 is enabled, link-local address is FE80::1
No Virtual link-local address(es):
Global unicast address(es):
2001:1:1:1::1, subnet is 2001:1:1:1::/64 [EUI]
Joined group address(es):
FF02::1
FF02::2
FF02::1:FF00:1
MTU is 1500 bytes
ICMP error messages limited to one every 100 milliseconds
ICMP redirects are enabled
ICMP unreachables are sent
ND DAD is enabled, number of DAD attempts: 1
ND reachable time is 30000 milliseconds (using 30000)
ND advertised reachable time is 0 (unspecified)
ND advertised retransmit interval is 0 (unspecified)
ND router advertisements are sent every 200 seconds
ND router advertisements live for 1800 seconds
ND advertised default router preference is Medium
Hosts use stateless autoconfig for addresses.

R2#sh ipv6 int
FastEthernet0/0 is up, line protocol is up
IPv6 is enabled, link-local address is FE80::2
No Virtual link-local address(es):
Global unicast address(es):
2001:1:1:1::2, subnet is 2001:1:1:1::/64 [EUI]
Joined group address(es):
FF02::1
FF02::2
FF02::1:FF00:2
MTU is 1500 bytes
ICMP error messages limited to one every 100 milliseconds
ICMP redirects are enabled
ICMP unreachables are sent
ND DAD is enabled, number of DAD attempts: 1
ND reachable time is 30000 milliseconds (using 30000)
ND advertised reachable time is 0 (unspecified)
ND advertised retransmit interval is 0 (unspecified)
ND router advertisements are sent every 200 seconds
ND router advertisements live for 1800 seconds
ND advertised default router preference is Medium
Hosts use stateless autoconfig for addresses.

R1#ping 2001:1:1:1::2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2001:1:1:1::2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 0/1/8 ms

こうするとグローバルユニキャストアドレスも IPv6 ネイバーテーブルにのるようになる。

R2#sh ipv6 neighbors
IPv6 Address                              Age Link-layer Addr State Interface
2001:1:1:1::1                               0 001b.2a77.66d2  REACH Fa0/0
FE80::1                                     9 001b.2a77.66d2  DELAY Fa0/0

Windows の GNS3 で Cisco ルーターの設定を初期化する

GNS3 上でトポロジを構成する際、誤ったコンフィグを投入してしまって、あまつさえ保存してしまったとします。
こういった場合設定を初期化したいのですが、 erase startup-config だけだとルーターのホスト名の設定やロギングの挙動の調整といった、
ルーター初回起動時に投入される便利なコンフィグが読み込まれません。
最低限ルーター名だけでも最初から投入してくれないとわかりにくくて大変です。
GNS3 のドキュメント探してみましたが相当するようなドキュメントが見つからなかったので結構苦労しました。

トポロジを構成するルーターが 1, 2 台ならプロジェクト作り直せばいいかで済むんですが、 5 台以上になってくると大変です。
トポロジを作るのに加えてインターフェイスのラベルの位置とか微調整しているので作り直しってなったら発狂したくなります。

つーか、 Mac 版だと コンフィグ消したら NVRAM が勝手に初期化されたから、 Windows 版のバグのような気がしないでもない。

R1#erase startup-config
Erasing the nvram filesystem will remove all configuration files! Continue? [confirm]
[OK]
Erase of nvram: complete
R1#
*Mar  1 00:00:26.751: %SYS-7-NV_BLOCK_INIT: Initialized the geometry of nvram

誰か教えて下しあ。。。
GNS3 のドキュメントに載ってるのかな。。
今度腰を据えて GNS3 のドキュメント読もうかな。
というか GNS3 2.0 RC2 までいったようで、熱いね。
もうリリース間近といった感じ。

Releases · GNS3/gns3-gui

以下は Windows 版でのみの話し

ルーター上で

erase startup-config

これでルーターを再起動しても初回起動時に投入されるコンフィグは入らない。
ホスト名も設定されていない完全にまっさらに初期化されたルーターが起動される。
まあ、物理的なルーターの動作としてはこれが正しいんだが、コンセプトを理解したい場合は違う、そうじゃないとなる。

次に、ルーターを停止させる。これ重要。

右クリックでコンフィグをインポートする。

Windows なら

C:\Users\wnoguchi\GNS3\configs\ios_base_startup-config.txt

Mac なら

/Users/wnoguchi/GNS3/configs/ios_base_startup-config.txt

Linux なら(エスパーしている)

/home/GNS3/configs/ios_base_startup-config.txt

ちなみにコンフィグは以下のような感じになっていた。

!
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname %h
!
ip cef
no ip domain-lookup
no ip icmp rate-limit unreachable
ip tcp synwait 5
no cdp log mismatch duplex
!
line con 0
 exec-timeout 0 0
 logging synchronous
 privilege level 15
 no login
line aux 0
 exec-timeout 0 0
 logging synchronous
 privilege level 15
 no login
!
!
end

%h の部分がホスト名に置換されているわけですな。

プライベートコンフィグは読み込まなくて良い。

そしてルーター起動。

これで OK 。

OSPF 認証 インターフェイス認証

  1. 対応ページ: pp.222-225
  2. 対応試験: CCNPv2.0 Routing and Switching 300-101J ROUTE
  3. カテゴリ: OSPF
  4. サブカテゴリ: OSPF 認証 インターフェイス認証
  5. IOS: c3725-adventerprisek9-mz.124-15.T14.bin

OSPF認証について

OSPF認証タイプ

  • タイプ0 Null 認証
  • タイプ1 シンプルパスワード認証
  • タイプ2 MD5 認証

ネイバー認証の設定対象

  • インターフェイス
  • エリア
  • 仮想リンク

トポロジ

GNS3 プロジェクトファイルダウンロード

OSPF 認証設定前までやってあります。

GNS3 1.5.x では Windows, Mac 間の portable project のエクスポート、インポートがうまくいかない | | wnoguchi’s diary

Windows

ospf-authentication-interface

Mac

TODO

基本設定

R1

conf t
int f0/0
ip addr 10.0.12.1 255.255.255.0
no shut
!
! OSPF configuration
router ospf 1
router-id 1.1.1.1
network 10.0.0.0 0.255.255.255 area 0
end
wr

R2(ABR)

conf t
int f0/0
ip addr 10.0.12.2 255.255.255.0
no shut
int s0/0
ip addr 10.1.23.2 255.255.255.0
no shut
!
! OSPF configuration
router ospf 1
router-id 2.2.2.2
network 10.0.0.0 0.0.255.255 area 0
network 10.1.0.0 0.0.255.255 area 1
end
wr

R3

conf t
int s0/0
ip addr 10.1.23.3 255.255.255.0
no shut
!
! OSPF configuration
router ospf 1
router-id 3.3.3.3
network 10.0.0.0 0.255.255.255 area 1
end
wr

VPCs

なし

設定前の動作確認

なし

設定

R1

conf t
int f0/0
ip ospf authentication
ip ospf authentication-key CISCO

R2(ABR)

conf t
int f0/0
ip ospf authentication
ip ospf authentication-key CISCO
int s0/0
ip ospf authentication message-digest
ip ospf message-digest-key 1 md5 ROUTE

R3

conf t
int s0/0
ip ospf authentication message-digest
ip ospf message-digest-key 1 md5 ROUTE

検証

インターフェイスで認証が有効になっていることを確認する。

シンプルパスワード認証

R2#sh ip ospf int f0/0
FastEthernet0/0 is up, line protocol is up
  Internet Address 10.0.12.2/24, Area 0
  Process ID 1, Router ID 2.2.2.2, Network Type BROADCAST, Cost: 10
  Transmit Delay is 1 sec, State DR, Priority 1
  Designated Router (ID) 2.2.2.2, Interface address 10.0.12.2
  Backup Designated router (ID) 1.1.1.1, Interface address 10.0.12.1
  Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
    oob-resync timeout 40
    Hello due in 00:00:07
  Supports Link-local Signaling (LLS)
  Cisco NSF helper support enabled
  IETF NSF helper support enabled
  Index 1/1, flood queue length 0
  Next 0x0(0)/0x0(0)
  Last flood scan length is 2, maximum is 2
  Last flood scan time is 0 msec, maximum is 0 msec
  Neighbor Count is 1, Adjacent neighbor count is 1
    Adjacent with neighbor 1.1.1.1  (Backup Designated Router)
  Suppress hello for 0 neighbor(s)
  Simple password authentication enabled

MD5 認証

R2#sh ip ospf int f0/0
FastEthernet0/0 is up, line protocol is up
  Internet Address 10.0.12.2/24, Area 0
  Process ID 1, Router ID 2.2.2.2, Network Type BROADCAST, Cost: 10
  Transmit Delay is 1 sec, State DR, Priority 1
  Designated Router (ID) 2.2.2.2, Interface address 10.0.12.2
  Backup Designated router (ID) 1.1.1.1, Interface address 10.0.12.1
  Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
    oob-resync timeout 40
    Hello due in 00:00:07
  Supports Link-local Signaling (LLS)
  Cisco NSF helper support enabled
  IETF NSF helper support enabled
  Index 1/1, flood queue length 0
  Next 0x0(0)/0x0(0)
  Last flood scan length is 2, maximum is 2
  Last flood scan time is 0 msec, maximum is 0 msec
  Neighbor Count is 1, Adjacent neighbor count is 1
    Adjacent with neighbor 1.1.1.1  (Backup Designated Router)
  Suppress hello for 0 neighbor(s)
  Simple password authentication enabled

ネイバーテーブルを確認して所望のネイバーが認識されていることを確認する。

R2#sh ip ospf neighbor

Neighbor ID     Pri   State           Dead Time   Address         Interface
1.1.1.1           1   FULL/BDR        00:00:37    10.0.12.1       FastEthernet0/0
3.3.3.3           0   FULL/  -        00:00:33    10.1.23.3       Serial0/0

おことわり

これは「徹底攻略Cisco CCNP Routing & Switching ROUTE教科書[300-101J]対応 徹底攻略シリーズ」に掲載されているサンプルトポロジのコンフィグを自分で考えて、インターフェイスの対応等微妙に変えて GNS3, あるいは VIRL のプロジェクトファイルとしています。
具体的な説明はここではせず、箇条書き程度の自分用のメモ、コンフィグ、実際の出力結果を載せています。
詳細なコンセプトの説明はこのテキストを参照するか、他のサイトをあたることをおすすめします。

追記

コンフィグやトポロジに誤りがありましたら指摘いただけるとうれしいです!

なんでこんなこと書いているか

Cisco の試験に限らないですけど、私の基本的なスタンスを書いてあります。
随時アップデートしていくので興味あったら覗いてみてください。

Cisco の技術者認定試験における私のスタンス | wnoguchi’s diary

参考書紹介

こちらのテキストを使用させていただいております。
いつもありがとうございます。

個人的なおすすめはテキストは紙版と Kindle 版両方買っておいて、ウォークスルー的なテキストの読み込みは
クロスリファレンスが必要なときは紙の本をざっと開くのがおすすめです。
問題集は紙版さえあればいいかなと思ってますが、もしかすると Kindle 版のほうが効率いいのかも。
どうなんだろ。

GNS3 1.5.x では Windows, Mac 間の portable project のエクスポート、インポートがうまくいかない

ご注意: GNS3 1.5 系のポータブルプロジェクトファイルは私が試した限り Windows と Mac 間では互換性がありません。

それと Windows 間のインポートだとエクスポート元で GNS3 VM 上で実行していたやつでも、インポート先だとローカルの Dynamips で実行されてしまうっぽい。。。
設定の問題なのかなあ。。。

最初この事実を知った時、うーんって感じでした。
まあ、マルチプラットフォームの難しさは推して量るべしですが・・・。
こういったコミュニティに積極的にコミットできるようになりたい。

Cisco の技術者認定試験における私のスタンス

導入

ちょっと主語が大きすぎるだろうか?
最近やっと CCNAv3.0 R&S (Routing and Switching) のトラックを取得することができました。
今は CCNPv2.0 の ROUTE 試験のトラックの学習をしています。

なので CCNAv3.0 R&S レベルの時点での私のネットワークの技術習得に関する考えを書いています。
他のブログ記事でコンフィグとトポロジー、GNS プロジェクトファイルを載せている理由も書いています。
すでに CCNP, CCIE 持ってるしマルチベンダでバリバリやってるぜって人は時間を無駄にしたくない人はそっ閉じしてください。
マサカリ投げたい人ははてブやコメント欄でどうぞ。
あくまで一個人の意見です。

お前誰だよ?

現場ではインフラ側で YAMAHA ルーター等を中心に中小ブランチネットワークや拠点間の VPN 設計・実装等をやっています。
どちらかというとサーバー要素多めで、最近はオンプレで食っていくには小手先のネットワーク知識じゃだめだなと思って Cisco の技術者認定資格の取得に力を入れています。

ネットワークの技術の学習方法

私は実機、シミュレータで実際に動かしてみないとその技術のコンセプトが理解できないたちなので、
テキストや問題集に載っているやつは実際にトポロジを組んでシミュレーターで動かしてコマンド打ち込んでルーターの動きがどう変わるかちゃんと見て理解した上で進めています。

実機をいつ使うか?

実機使うのは本当に基礎的なトピックを理解するために使います。

  1. 物理層(L1)、データリンク層(L2)の細かい動きを確認して実機の動きとシミュレーター上での動きはどう違うのか理解する。
    1. Cisco VIRL で IOSvL2 で STP 実験してみようと思ったらリンク状態が全二重じゃなくて半二重になってて全然意味わからなかったときとかあります。
    2. MDI 同士、MDI-X 同士をつなぐときはクロスケーブル使わないと物理層レベルでだけ up してデータリンク層レベルでは down するよとか。
    3. 今まで Auto MDI/MDI-X に頼ってばかりいましたけど、Cisco ルーター同士をストレート(今市場に大量に出回っているのがこればっかし)直結すると no shut してもリンクアップしなくて困ったりとか。
  2. ロールオーバー(シリアルコンソール)ケーブルをつなぐときはクロスケーブル(だいたいこっちでいい)、ストレートケーブル間違えると正常につなげらんないよとか。
  3. 新しいコンセプトの Hello World 的な構成を試す時とか(RIP, EIGRP, OSPF)。
  4. STP の三角形とか、自分自身につないでループする構成とか(下記)。

ループ接続のイラスト | かわいいフリー素材集 いらすとや

シミュレーターの使い所

シミュレーターを使うのは基本的なこと理解したらようし複数台構成してもっと深いコンセプトを理解するぞってときにやります。
正直 CCNP レベルになってくるとルーターの数 5 台のトポロジとか解説に平気で出てくるので毎回実機使ってたらやってらんないので GNS3 や Cisco VIRL を使っています。。。。
初めてのコンセプトの実装・検証は上記のとおり実機でやります。

実務的な面

いくらシミュレーターで検証しようが、 Visio トポロジーをきれいに書こうが実際にデプロイされるのは物理的な環境です。
いざネットワーク機器の実機や VyOS の VM を目の前にして慌てるようでは目も当てられません。

Cisco 試験の方法論

本読んでひたすら問題集解いて試験 Pass できる人はいいなあと思います。
コンセプト理解しただけで他のベンダのネットワーク機器のマニュアル読んでふんふん設計・設定できるほど私は頭良くないので。。。

まあ、コンセプト理解するだけじゃなくて試験対策として問題集、や ping-t やりまくるのは必要ですけど。
最近は円安が進んで試験の値段がどんどん値上がりしています。
一回落ちると 4 万近くが吹っ飛んでいきます。
順当に CCNP ROUTE, SWITCH, TSHOOT に Pass したとしても 12 万近く吹っ飛ぶわけです。
軽い気持ちで受けられないわけです。
まあ、試験自体は東京の Pearson VUE に登録してお気に入りの試験センター見つけた休みの日にらふらっと行って当日受験なんてことも普通にできますけど。

まとめ

ということでテキストを読むだけでなく、コンセプトをちゃんと(私が)理解するためにテキストには書かれないコンフィグをちゃんと載せて、 GNS3 のプロジェクトファイルも載せているわけです。

Cisco VIRL (Virtual Internet Routing Labo) を VMware Workstation 12.5 にインストールする

これから CCIE 取得を目指しています。
まだ CCENT 認定ですが。。。

Don’t complicate things.

とあるように、自分が何やってんのかわかっている場合を除いて余計なことはすんなよと書いてある。

2016-09-25_19h01_37

Step 1:  Get Started

ちなみに VirtualBox には対応していない。
Vt-x/AMDv が有効になっていることを確認すること。
つまり Vt-x/AMDv の仮想化が有効になっていることが必須です。

2016-09-25_19h25_23

Step 3:  Create and Configure Virtual Networks

5 つネットワークを作成する。

VMnet8 は NAT で VIRL 仮想マシンにホスト PC を通じたインターネット接続を提供する。
その他 4 つのネットワークは VIRL に外部 L2, および L3 のコネクティビティを提供する。
これらは

Flat
Flat1
SNAT
クラスタリング INT

すでに VMnet1 が存在していたらナンバリングを1つずつずらす。
いずれも ホストオンリーネットワーク とする。

VMnet1
172.16.1.0
255.255.255.0
ローカル DHCP サービスを使用して IP アドレスを VM に配布するのチェックが外れていることを確認する。

VMnet2 172.16.2.0/24
VMnet3 172.16.3.0/24
VMnet4 172.16.10.0/24

2016-09-25_19h02_43

2016-09-25_19h03_20

2016-09-25_19h03_44

2016-09-25_19h13_39

2016-09-25_19h15_30

最終的に以下のような感じになればいい。

2016-09-25_19h17_33

Step 4:  Deploy the VIRL OVA

いよいよ Cisco VIRL の OVA (Open Virtualization Format Archive) をインポートする。
事前に VIRL の OVA ファイルとライセンスファイル *.pem ファイルをダウンロードしておくこと。

https://virl.mediuscorp.com/my-account/

ちなみに OVA はアニメの Original Video Animation のことではないので注意。
OVA といいつつハイパーバイザーによってインポートできないことが多々にしてあり、ぜんぜんオープンな気がしないんだよなあ。

virl.1.2.64.pc.ova

2016-09-25_19h34_21

2016-09-25_19h36_58

VIRL 自身の起動やらなんやらの読み込みは速いことに越したことはないので、新しい仮想マシンのストレージパスには
容量が許すなら SSD 領域自身を指定することを強くおすすめする。

2016-09-25_19h40_38

インポートが終わるまで適当に時間を潰す。

2016-09-25_19h42_04

インポート完了、やったね。

2016-09-25_19h44_29

VIRL を起動したい気持ちを抑えて設定を確認・調整する。

2016-09-25_19h45_07

2016-09-25_19h51_00

最初のネットワークアダプタは NAT になっているのを確認したらそのままそっとしておく。
ネットワークアダプタ2~5はインポート直後はブリッジになっているので、さっき作った VMnet1~4 にそれぞれ対応付ける。

2016-09-25_19h59_56

次に Intel VT-x/EPT の仮想化が有効になっていることを確認する。

2016-09-25_20h26_40

そして最後はCPUとメモリ。
潤沢にあればあるほどいい。

最低限のスペックは 2 vCPU、 4GB だが、4 vCPU, 8GB かそれ以上のリソースを割り当てることが要求されている。
VMware Workstation の推奨メモリ容量は無視しろと書いてある。
特に他に立ち上げる VM も今のところ考えていないので私は 8vCPU, 16GB の割当てをおこなった。

2016-09-25_20h30_38

Step 5:  Prepare VIRL for Activation

VM を起動して ID: virl PASS: VIRL でログイン。

2016-09-25_20h34_28

ログイン後に表示される画面。バイオハザードマークが禍々しい。
おもむろに xterm を立ち上げる。

2016-09-25_20h35_27

以下のコマンドを入力して出力が以下のように出ればひとまずここまでの手順は OK 。
KVM (Kernel Based Virtual Machine) のアクセラレーション利用可能の表示が出なければ何かがおかしいので手順に沿ってやったか見直せと書いてある。

virl@virl:~$ sudo kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used

2016-09-25_20h40_54

次にインターネットへの接続性を確認する。
VIRL は定期的に Cisco の SaltStack サーバーと通信をしてアクティベーションの妥当性を確認する必要がある。

ping -c 4 www.cisco.com
curl http://curltools.com/get-ip
wget --spider --no-verbose http://www.google.com

2016-09-25_20h45_14

VIRL のインストラクションにはないが、ここでひとつチューニングをしておく。
VIRL の割当メモリを使い果たすまで Swap を使うなという設定を入れる。
別にすぐ VIRL を割当メモリ目いっぱいまで酷使するわけでなければこの手順はすっ飛ばしてかまわない。
公式の手順にも載ってないし。

virl@virl:~$ sudo -i
root@virl:~# cat /proc/sys/vm/swappiness 
60

キーボードが英字配列になっていることに注意をする。
イコールは日本語キーボードの場合チルダ ~ のキーを Shift 無しでタイプした時に出てくる。
また、保存するときのコロン : はセミコロン ; のキーを Shift キー押しながらタイプすると入力できる。
また、 vi は vim でないことに注意する。
とても使いづらい。

root@virl:~# vi /etc/sysctl.conf
vm.swappiness = 0
root@virl:~# sysctl -p
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.ip_forward = 1
vm.swappiness = 0
root@virl:~# cat /proc/sys/vm/swappiness 
0
root@virl:~# exit

中身をちょっと見るとわかるが、 Ubuntu Linux 14.04 LTS (Trusty) がベースとなっており、 OpenStack がインストールされているようだ。
なるほどなあ。

virl@virl:~$ cat /etc/debian_version 
jessie/sid
virl@virl:~$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.4 LTS"

Step 6:  Activate VIRL

VIRL の IP アドレスを調べてホスト側のブラウザからその IP にアクセスする。

2016-09-25_21h04_45

Web 管理画面が見えるはず。
圧倒的 Bootstrap 感。

2016-09-25_21h07_23

User Workspace Management を選択し、以下のログイン情報を入力する。

ID: uwmadmin
PASS: password

2016-09-25_21h10_05

2016-09-25_21h12_10

各フィールドを埋める。

Salt ID and domain には pem ファイルの拡張子抜きのファイル名を、
Customer email Address は読んで字のごとく、
List of Cisco salt masters は地理的に近いものを適当に選んで突っ込む。
正直日本の場合 us のほうでとくに問題はないと思われる。

us-1.virl.info, us-2.virl.info, us-3.virl.info, us-4.virl.info
eu-1.virl.info, eu-2.virl.info, eu-3.virl.info, eu-4.virl.info

Master sign public key はドントタッチミー。
Minion private RSA key in PEM format には pem ファイルの中身をまんまコピペする。

そして Reset ボタンクリック。

2016-09-25_21h21_42

どこか 1 つでも Salt サーバーとライセンスの検証ができていれば OK 。

2016-09-25_21h25_35

Step 7:  Customize the VIRL Configuration (Optional)

特筆して変更するところはないが、 16GB より多くのメモリを搭載しているなら RAMdisk オプションが使えるようだ。
インメモリディスクを使用することで、シミュレーションのスタートアップタイムを減らせるらしい。
速いに越したことはないのでここでさらにメモリを 16GB -> 24GB にして RAMdisk をオンにした。

24 * 1024 = 24576 MB

2016-09-25_21h38_20

まずメンテナンスモードを有効にしろとある。
メンテナンスモードを有効にする。
そして Apply 。

2016-09-25_21h40_59

オールグリーンになったらシステムリブートしろやと出てくるので、おとなしく再起動する。
WebUI 上の Reboot ボタンを押すだけで VIRL 仮想マシンをリブートできるみたい。
素晴らしいな・・・。

2016-09-25_21h44_07

リブート終わったら Disable maintenance mode にし、 OK ボタンをクリック

2016-09-25_21h46_21

Step 8:  Validate the VIRL Installation

VIRL が正しくインストール・設定できたことを以下のコマンドで検証せよとある。

OpenStack の Neutron ネットワーキングモジュールの動作確認ですね。
xterm をおもむろに立ち上げる。
alive のところが全部スマイリーマーク :-) になっていれば OK 。

virl@virl:~$ neutron agent-list
+--------------------------------------+--------------------+------+-------+----------------+---------------------------+
| id                                   | agent_type         | host | alive | admin_state_up | binary                    |
+--------------------------------------+--------------------+------+-------+----------------+---------------------------+
| 73edf60e-2951-4dfb-8ce7-a2fa58f9199a | DHCP agent         | virl | :-)   | True           | neutron-dhcp-agent        |
| be125ca6-3381-4e8a-95d1-6de54bd99788 | Linux bridge agent | virl | :-)   | True           | neutron-linuxbridge-agent |
| c3195bd1-f054-4a0b-85ae-3935ecbe260f | Metadata agent     | virl | :-)   | True           | neutron-metadata-agent    |
| defeaa84-8b4c-4c5c-b101-b1555520a710 | L3 agent           | virl | :-)   | True           | neutron-l3-agent          |
+--------------------------------------+--------------------+------+-------+----------------+---------------------------+

2016-09-25_21h52_43

そして VIRL STD と UWM サービスがすべて listening ステートになっていることを確認する。
インメモリ KVS である Redis も内部で動いていることが見て取れる。

virl@virl:~$ sudo virl_health_status | grep listening
...
(snip)
virl-vis-webserver listening on port 19402
ank-cisco-webserver listening on port 19401
STD server on url http://localhost:19399 is listening, server version 0.10.27.8
UWM server on url http://localhost:19400 is listening, server version 0.10.27.8
Webmux server on url http://localhost:19403 is listening
Redis server on 127.0.0.1:6379 is listening

2016-09-25_21h56_55

Display the VIRL license configuration

以下の点を確認する。

‘hostid’ が pem ファイルのファイル名部分と同じになっていること
‘product-capacity’ がライセンス上で許可されているノード数(私の場合は 30 )になっていること
‘product-expires’ ‘7’ となっていること。(7 日で切れるということ。切れたらまたソルトサーバーにバリデートしにいく)

virl@virl:~$ sudo virl_health_status | grep -A 4 -e hostid -e product
...
(snip)
hostid : ********.virl***.info
product-license : [u'us-1.virl.info', u'us-2.virl.info', u'us-3.virl.info', u'us-4.virl.info']
product-capacity : 30
product-expires : 7
features : [u'Cariden.MATE.import', u'Cariden.MATE.export']
product-usage : 0
uwm-url : http://192.168.200.128:19400/admin/salt/

2016-09-25_22h06_04

Step 8:  Install and Configure VM Maestro

ネットワークのトポロジを作成、シミュレーションするツール、 VM Maestro をインストールする。
Maestro とは芸術家、専門家、音楽の指揮者等の意味があるようだ。

というか、 VM Maestro のスプラッシュに指揮者のシルエットが出るようになっている。 最近はスプラッシュが出なくなったようだ。

2016-09-25_22h38_53

ブラウザで VIRL Server の WebUI にアクセスして、 VM Maestro クライアントをインストールするプラットフォームに応じたバイナリをダウンロードする。
ここでは Windows x64 アーキテクチャと仮定する(たぶんそんなに変わらない)。

2016-09-25_22h09_41

2016-09-25_22h11_30

ダウンロードしたやつを普通にインストール。

これもベースは Eclipse となっている。
オープンソース活用しまくりだな。

VM Maestro を立ち上げてライセンスアグリーメントに同意して、匿名のレポート送るか聞かれるので、チェックを入れてやめろとしておく。
文字化けしてるし。

こいつはクライアントなので、先程 VMware Workstation 上にインストールした VIRL サーバーなしには生きていけない。
接続先を VIRL サーバーに変えてやる必要がある。

2016-09-25_22h14_41

ID, パスワードは以下でよい、 IP アドレスはさっき調べた VIRL サーバーの IP アドレスを入力。

ID: guest
PASS: guest

そしてサービスへの接続チェックがオールグリーンになれば OK 。

2016-09-25_22h20_33

なんか Eclipse の Secure Storage にマスターパスワードが保存されたらしいので、リカバリ用の秘密の質問を入力するか聞かれるのでとりあえず Yes としておいた。

2016-09-25_22h21_49

2016-09-25_22h23_30

最後にやること

以下の手順で Node Subtype の一覧をデフォルトにリセットして、 VIRL ホストで利用可能な node sub-types をすべて再取得する必要がある。

File -> Preferences を開く。
まずは Restore Defaults でリセットする。

2016-09-25_22h30_49

そして VIRL サーバーからサブタイプの一覧を取得する。

2016-09-25_22h32_45

シミュレーションをちょっとやってみよう

RAMdisk を enable にした状態。
8 vCPU
24 GB

すべてのノードが起動するまでに要した時間はおよそ 1 分程度。

(INFO) [Sep/25/2016 13:43:37] simulation "topology-97p7fh": nodes can start
(INFO) [Sep/25/2016 13:43:43] Starting node "~mgmt-lxc"
(INFO) [Sep/25/2016 13:43:44] Starting node "iosv-1"
(INFO) [Sep/25/2016 13:43:49] Starting node "iosv-2"
(INFO) [Sep/25/2016 13:43:54] Starting node "iosv-3"
(INFO) [Sep/25/2016 13:44:00] Starting node "iosvl2-1"
(INFO) [Sep/25/2016 13:44:07] Starting node "server-1"
(INFO) [Sep/25/2016 13:44:07] Node "iosv-1" state changed from ABSENT to ACTIVE
(INFO) [Sep/25/2016 13:44:07] Node "iosv-2" state changed from ABSENT to ACTIVE
(INFO) [Sep/25/2016 13:44:07] Node "iosv-3" state changed from ABSENT to ACTIVE
(INFO) [Sep/25/2016 13:44:07] Node "iosvl2-1" state changed from ABSENT to BUILDING
(INFO) [Sep/25/2016 13:44:07] Node "~mgmt-lxc" state changed from ABSENT to ACTIVE
(INFO) [Sep/25/2016 13:44:12] Starting node "server-2"
(INFO) [Sep/25/2016 13:44:17] Starting node "server-3"
(INFO) [Sep/25/2016 13:44:36] Node "iosvl2-1" state changed from BUILDING to ACTIVE
(INFO) [Sep/25/2016 13:44:36] Node "server-1" state changed from ABSENT to ACTIVE
(INFO) [Sep/25/2016 13:44:36] Node "server-2" state changed from ABSENT to ACTIVE
(INFO) [Sep/25/2016 13:44:36] Node "server-3" state changed from ABSENT to ACTIVE

ルーター右クリックでコンソールポートに接続できる。

2016-09-25_22h57_16

10.1.0.0/24 のマルチアクセスネットワークを想定して IP アドレスをルーターに設定して ping を打ってみたところ。

2016-09-25_22h54_57

お疲れ様でした。

Tips

あとの普段のシミュレーション自体は VIRL の仮想マシンが立ち上がっていればよいので、とくに Linux にログインする必要もなければ、 WebUI にログインする必要もない。

参考サイト

  1. VIRL via VMware Workstation
  2. VIRL | CCIEおじさん日記