BIG-IPでtmsh(TMOS shell)の基本的な操作をまとめます。小規模な環境ならば、BIG-IPをGUIで操作する事もありますが、それこそvirtual serverが100を超えるような環境ならばGUIでオペミスなく操作するのは不可能です。このような環境にも対応できるように、BIG-IPではtmshと呼ばれるCLI操作をサポートしています。
BIG-IPのシェルについて
Advanced Shell
以下はBIG-IP version 16.1.0のログです。この出力の通り、BIG-IPはRedhat系OSベースに作成されたネットワーク製品です。
[root@bigip01:Active:Standalone] config # cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) [root@bigip01:Active:Standalone] config # [root@bigip01:Active:Standalone] config # bash --version GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu) Copyright (C) 2011 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software; you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. [root@bigip01:Active:Standalone] config #
この出力の通り、BIG-IPはRedhat系OSと同じようにB-Shellを使う事ができます。pingコマンドもcurlコマンドもtcpdumpコマンドも使えます。このB-shellはBIG-IPでは「Advanced Shell」と呼ばれる事もあります。後述のtmshに比べて強い権限の操作が可能であるため「Advanced Shell」と名付けられています。
tmsh
BIG-IPには、BIG-IP専用の操作に特化したTMOSと呼ばれる仕組みがあります。このOSで使用するシェルがtmshです。tmshを使用するには、Advanced Shellでtmshコマンドを実行します。
[root@bigip01:Active:Standalone] config # tmsh root@(bigip01)(cfg-sync Standalone)(Active)(/Common)(tmos)#
tmshからAdvanced Shellに戻るにはquitを使います。
root@(bigip01)(cfg-sync Standalone)(Active)(/Common)(tmos)# quit [root@bigip01:Active:Standalone] config #
権限設定
Advanced Shellはより強い権限となるため、tmshのみ使用させるような権限設定も可能です。どのようなCLI操作を許可するかは、以下スクリーンショットの通り、ユーザ単位で設定する事ができます。
tmsh 操作
tmshの基本操作
tmshは、他のネットワークOSと似たような操作感がです。タブで入力補完されますし、候補も表示されます。
「?」でヘルプストリングを表示する事もできます。
tmshの基本コマンド
tmshでよく使用するのは、create, modify, delete, list, showコマンドです。意味は文字通りで、以下に使用例を示します。
createコマンド
createコマンドは何かの設定を「作成」する時に使うコマンドです。以下はVLANを作成するコマンドの例です。
create net vlan VLAN_EXTERNAL tag 999 mtu 3000
createは「作成」であり「変更」ではありません。例えば、上記の設定を変更しようとcreateコマンドを使うと以下のようにエラーになります。もし、設定値を変更したい時は後述のmodifyコマンドを使います。
root@(bigip02)(cfg-sync Standalone)(Active)(/Common)(tmos)# create net vlan VLAN_EXTERNAL tag 999 mtu 9000 01020066:3: The requested VLAN (/Common/VLAN_EXTERNAL) already exists in partition Common.
modifyコマンド
modifyコマンドは何かの設定を「変更」する時に使うコマンドです。以下はVLANを変更するコマンドの例です。
modify net vlan VLAN_EXTERNAL tag 999 mtu 9000
listコマンド
listは設定をそのまま表示するコマンドです。Ciscoなどで言えばshow running-configに相当するものです。VLANの設定を表示する例は以下の通りです。
list net vlan VLAN_EXTERNAL
実行例は以下の通りです。設定ファイルbigip.confやbigip_base.confに表示される内容と全く同じものが出力されます。
root@(bigip02)(cfg-sync Standalone)(Active)(/Common)(tmos)# list net vlan VLAN_EXTERNAL net vlan VLAN_EXTERNAL { if-index 176 mtu 9000 tag 999 }
showコマンド
showコマンドは設定をBIG-IPがどのように認識しているかを確かめるコマンドです。VLANの設定を表示する例は以下の通りです。
show net vlan VLAN_EXTERNAL
実行例は以下の通りです。前述のlistコマンドとは異なり、showはBIG-IPがどのように設定を認識しているかの出力です。
root@(bigip02)(cfg-sync Standalone)(Active)(/Common)(tmos)# show net vlan VLAN_EXTERNAL ------------------------------------- Net::Vlan: VLAN_EXTERNAL ------------------------------------- Interface Name VLAN_EXTERNAL Mac Address (True) 00:98:76:54:32:10 MTU 9000 Tag 999 Customer-Tag | Incoming Discard Packets 0 | Incoming Error Packets 0 | Incoming Unknown Proto Packets 0 | Outgoing Discard Packets 9 | Outgoing Error Packets 0 | HC Incoming Octets 360 | HC Incoming Unicast Packets 0 | HC Incoming Multicast Packets 4 | HC Incoming Broadcast Packets 0 | HC Outgoing Octets 0 | HC Outgoing Unicast Packets 0 | HC Outgoing Multicast Packets 0 | HC Outgoing Broadcast Packets 0 | PVA Incoming Packets 0 | PVA Incoming Octets 0 | PVA Outgoing Packets 0 | PVA Outgoing Octets 0
deleteコマンド
deleteコマンドは何かの設定を「削除」する時に使うコマンドです。以下はVLANを削除するコマンドの例です。
delete net vlan VLAN_EXTERNAL
設定保存の設定ファイル
GUI操作では画面切り替わりの都度、設定がディスクへと保存されます。
一方、CLI操作は自動的に保存されません。設定を保存するには、以下のsaveコマンドを使用します。
save sys config
保存された設定は/config/bigip.confや/config/bigip_base.confに書き込まれます。これら設定ファイルはAdvanced Shellからならば、grepコマンドやviコマンドなどの一般的なLinuxの操作もできます。
以下に簡単な動作確認例を載せます。vlan作成後に/config/bigip_base.confに反映されている事を確認する操作例です。
root@(bigip02)(cfg-sync Standalone)(Active)(/Common)(tmos)# create net vlan VLAN_EXTERNAL tag 999 mtu 3000 root@(bigip02)(cfg-sync Standalone)(Active)(/Common)(tmos)# root@(bigip02)(cfg-sync Standalone)(Active)(/Common)(tmos)# root@(bigip02)(cfg-sync Standalone)(Active)(/Common)(tmos)# save sys config Saving running configuration... /config/bigip.conf /config/bigip_base.conf /config/bigip_user.conf Saving Ethernet map ...done Saving PCI map ... - verifying checksum .../var/run/f5pcimap: OK done - saving ...done root@(bigip02)(cfg-sync Standalone)(Active)(/Common)(tmos)# root@(bigip02)(cfg-sync Standalone)(Active)(/Common)(tmos)# root@(bigip02)(cfg-sync Standalone)(Active)(/Common)(tmos)# quit [root@bigip02:Active:Standalone] config # [root@bigip02:Active:Standalone] config # [root@bigip02:Active:Standalone] config # grep VLAN_EXTERNAL -A 4 /config/bigip_base.conf /Common/VLAN_EXTERNAL /Common/http-tunnel /Common/socks-tunnel } } -- net vlan /Common/VLAN_EXTERNAL { mtu 3000 tag 999 } net fdb tunnel /Common/http-tunnel { } -- net fdb vlan /Common/VLAN_EXTERNAL { } net tunnels tunnel /Common/http-tunnel { description "Tunnel for http-explicit profile" profile /Common/tcp-forward } [root@bigip02:Active:Standalone] config #
Advanced Shellからのtmsh実行
今まではtmshコマンドでTMOSに入る方法を紹介しました。この方法を使えば、入力補完やヘルプストリングの恩恵を受ける事ができます。
しかし、これら恩恵がいらないならば、tmshの後にコマンドを指定する事で直接実行する事もできます。使用例は以下の通りです。
[root@bigip02:Active:Standalone] config # tmsh delete net vlan VLAN_EXTERNAL [root@bigip02:Active:Standalone] config #
BIG-IP上で非インタラクティブな処理を実行したい時は、このテクニックを知っていると非常に便利です。
設定流し込みの工夫
tmshコマンドは設定を施す毎に構文解析して設定をメモリ上に展開する処理を実施します。実はこの処理が非常に重たいため、狂気的な短納期を強制するようなプロジェクトでは「設定をまとめて投入する」工夫で時間短縮する必要があります。
これは処理そのものの待ち時間の問題なので、Ansibleなどの自動化で解消できるような問題ではありません。Ansibleを使ったとしても同様の工夫が求められます。
load sys config merge
load sys config mergeコマンドを使うと設定をbigip.confに書かれている形で流し込む事ができます。まずは、load sys config merge from-terminalコマンドを入力します。
以下のようなテキストファイルを作成し、ターミナルに貼り付けます。
net vlan VLAN0200 { interfaces { 1.3 { tagged } } mtu 9000 tag 200 } net vlan VLAN0201 { interfaces { 1.3 { tagged } } mtu 9000 tag 201 } net vlan VLAN0202 { interfaces { 1.3 { tagged } } mtu 9000 tag 202 }
Ctrl+Dで設定反映し、Ctrl+Cならばキャンセル操作です。
configファイルの直接編集
/config/bigip.conf, /config/bigip_base.confをviコマンドやsedコマンドで編集し、それを反映させる事もできます。例えば、命名規則の仕様変更が発生した場合などでは、sedコマンドで一括置換するのは非常に便利でしょう。
設定ファイル編集後に以下のコマンドで設定ファイルを読み込んで設定を反映させる事ができます。
load sys config
非常に高速で便利な操作ですが、わりと事故が発生しやすい危険な操作です。bigip.conf, bigip_base.confのバックアップがあった方が、もしもの時の復旧が早くなります。構築作業限定の操作であり、サービスイン後は絶対にオススメしません。