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 にはアクセス出来なくなります)。
まず外部接続インターフェイスを設定します。
interface GigabitEthernet1
ip address 10.0.0.1 255.255.255.0
ip nat outside
no shutdown
!
end
次に GuestShell 関連の設定を行います。
iox
!
vrf definition GuestShell
rd 1:1
!
address-family ipv4
exit-address-family
!
interface VirtualPortGroup0
vrf forwarding GuestShell
ip address 100.64.0.254 255.255.255.0
ip nat inside
!
ip access-list standard ACL_GuestShell
10 permit 100.64.0.0 0.0.0.255
!
ip nat inside source list ACL_GuestShell interface GigabitEthernet1 vrf GuestShell overload
ip route vrf GuestShell 0.0.0.0 0.0.0.0 GigabitEthernet1 10.0.0.254 global
!
app-hosting appid guestshell
app-vnic gateway1 virtualportgroup 0 guest-interface 0
guest-ipaddress 100.64.0.1 netmask 255.255.255.0
app-default-gateway 100.64.0.254 guest-interface 0
name-server0 1.1.1.1
name-server1 1.0.0.1
!
end
GuestShell の有効化
デフォルトで GuestShell は起動していません。 show app-hosting detail
で確認すると GuestShell (App id:guestshell
) を含む、いずれのアプリケーションも起動していないことが分かります。
C8000v# show app-hosting detail
No App found
特権モードで guestshell enable
を実行し、GuestShell を有効化します。 コンフィギュレーションモードでは無いので、間違えないように気をつけます。
guestshell enable
これで GuestShell が起動しました。 show app-hosting detail
で起動すると App id が guestshell
となっている GuestShell アプリケーションが起動していることが分かります。
C8000v# show app-hosting detail
App id : guestshell
Owner : iox
State : RUNNING
Application
Type : lxc
Name : GuestShell
Version : 3.3.0
Description : Cisco Systems Guest Shell XE for x86_64
Author : Cisco Systems
Path : /guestshell/:guestshell.tar
URL Path :
Activated profile name : custom
Resource reservation
Memory : 256 MB
Disk : 1 MB
CPU : 800 units
CPU-percent : 23 %
VCPU : 1
Platform resource profiles
Profile Name CPU(unit) Memory(MB) Disk(MB)
--------------------------------------------------------------
Attached devices
Type Name Alias
---------------------------------------------
serial/shell iox_console_shell serial0
serial/aux iox_console_aux serial1
serial/syslog iox_syslog serial2
serial/trace iox_trace serial3
Network interfaces
---------------------------------------
eth0:
MAC address : 11:22:33:44:55:66
IPv4 address : 100.64.0.1
IPv6 address : ::
Network name : VPG0
Port forwarding
Table-entry Service Source-port Destination-port
---------------------------------------------------
GuestShell へのログイン
GuestShell へログインするには特権モードで guestshell
を実行します。 これで GuestShell の bash を起動することが出来ます。
C8000v# guestshell
[guestshell@guestshell ~]$
試しに 1.1.1.1 へ Ping してみました。 下記では「GuestShell から外部へ通信出来ていること」が分かります。
[guestshell@guestshell ~]$ ping -c 1 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=56 time=28.9 ms
--- 1.1.1.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 28.912/28.912/28.912/0.000 ms
/etc/resolv.conf
を確認すると name-server0
や name-server1
で定義した DNS サーバが設定されていることが分かります。
[guestshell@guestshell ~]$ cat /etc/resolv.conf
nameserver 1.1.1.1
nameserver 1.0.0.1
(snip)
GuestShell からのログアウト
exit
を実行すると GuestShell からログアウトし、IOS-XE へ戻ります。
[guestshell@guestshell ~]$ exit
exit
C8000v#
IOS-XE を再起動すると GuestShell は自動起動するのか? しないのか?
「IOS-XE を再起動すると GuestShell は自動起動するのか? しないのか?」は GuestShell が有効化されているか、否かに応じて決定されるようです。
GuestShell が有効化されている場合 → 自動起動する
guestshell enable
で GuestShell が有効化されている場合、IOS-XE を再起動しても GuestShell は 自動起動しません。 GuestShell の状態は show app-hosting list
で確認出来ます。 下記では RUNNING
になっているので「有効化されている」ことが分かります。
C8000v# show app-hosting list
App id State
---------------------------------------------------------
guestshell RUNNING
GuestShell が無効化されている場合 → 自動起動しない
guestshell disable
で GuestShell が無効化されている場合、IOS-XE を再起動しても GuestShell は 自動起動しません。 show app-hosting list
で確認すると DEPLOYED
と表示されますが、これは デプロイはされているが無効化されている
ことを意味します。
C8000v# show app-hosting list
App id State
---------------------------------------------------------
guestshell DEPLOYED
GuestShell コンテナを廃棄するには?
GuestShell コンテナを廃棄するには guestshell destroy
を実行します。 guestshell enable
を実行して GuestShell コンテナした後に app-hosting appid guestshell
セクションで GuestShell のパラメータを変更しても 反映されない ようです。 変更したパラメータを反映する為には guestshell destroy
でコンテナを廃棄し、再度 guestshell enable
でデプロイし直す必要があります。
C8000v# guestshell destroy
Guestshell destroyed successfully
C8000v# show app-hosting list
No App found
コメント