IOS-XE で GuestShell を有効化し、外部ネットワークと通信する
IOS-XE では簡単な設定で Linux コンテナを動作させることが出来ます。 今回は Catalyst8000v 17.06.01a 上で GuestShell を動作させ、GuestShell から外部ネットワークへ通信出来るように設定する手順をメモしておきます。 尚、逆向きの「外部ネットワーク → GuestShell へのアクセス」は想定しない (出来ない) ものとします。
GuestShell 用の事前設定¶
インターフェイスは以下の設計とします。
- GigabitEthernet1 (Gi1) が外部ネットワークと接続しているインターフェイス
- VirtualPortGroup0 (VPG0) が GuestShell 側の内部ネットワークと接続しているインターフェイス
GuestShell のアドレス帯 (今回は 100.64.0.0/24) を ACL で定義し、これを Gi1 / VPG0 で NAT することで GuestShell から外部へ通信出来るようにします。 GuestShell に割り当てるアドレス帯は VRF (今回は GuestShell
という名前の VRF を定義) で分離することで「GuestShell のアドレス帯が既存ネットワークと重複してしまい、ルーティング出来なくなる」ことを避けています (※ 副作用として外部ネットワーク → GuestShell にはアクセス出来なくなります)。
まず外部接続インターフェイスを設定します。
1 2 3 4 5 6 |
|
次に GuestShell 関連の設定を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
GuestShell の有効化¶
デフォルトで GuestShell は起動していません。 show app-hosting detail
で確認すると GuestShell (App id:guestshell
) を含む、いずれのアプリケーションも起動していないことが分かります。
1 2 |
|
特権モードで guestshell enable
を実行し、GuestShell を有効化します。 コンフィギュレーションモードでは無いので、間違えないように気をつけます。
1 |
|
これで GuestShell が起動しました。 show app-hosting detail
で起動すると App id が guestshell
となっている GuestShell アプリケーションが起動していることが分かります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
|
GuestShell へのログイン¶
GuestShell へログインするには特権モードで guestshell
を実行します。 これで GuestShell の bash を起動することが出来ます。
1 2 |
|
試しに 1.1.1.1 へ Ping してみました。 下記では「GuestShell から外部へ通信出来ていること」が分かります。
1 2 3 4 5 6 7 |
|
/etc/resolv.conf
を確認すると name-server0
や name-server1
で定義した DNS サーバが設定されていることが分かります。
1 2 3 4 |
|
GuestShell からのログアウト¶
exit
を実行すると GuestShell からログアウトし、IOS-XE へ戻ります。
1 2 3 4 |
|
IOS-XE を再起動すると GuestShell は自動起動するのか? しないのか?¶
「IOS-XE を再起動すると GuestShell は自動起動するのか? しないのか?」は GuestShell が有効化されているか、否かに応じて決定されるようです。
GuestShell が有効化されている場合 → 自動起動する¶
guestshell enable
で GuestShell が有効化されている場合、IOS-XE を再起動しても GuestShell は 自動起動しません。 GuestShell の状態は show app-hosting list
で確認出来ます。 下記では RUNNING
になっているので「有効化されている」ことが分かります。
1 2 3 4 |
|
GuestShell が無効化されている場合 → 自動起動しない¶
guestshell disable
で GuestShell が無効化されている場合、IOS-XE を再起動しても GuestShell は 自動起動しません。 show app-hosting list
で確認すると DEPLOYED
と表示されますが、これは デプロイはされているが無効化されている
ことを意味します。
1 2 3 4 |
|
GuestShell コンテナを廃棄するには?¶
GuestShell コンテナを廃棄するには guestshell destroy
を実行します。 guestshell enable
を実行して GuestShell コンテナした後に app-hosting appid guestshell
セクションで GuestShell のパラメータを変更しても 反映されない ようです。 変更したパラメータを反映する為には guestshell destroy
でコンテナを廃棄し、再度 guestshell enable
でデプロイし直す必要があります。
1 2 3 4 5 |
|