vThunder - IFのダウンを検知して他のIFをダウンさせる制御

<h1>はじめに</h1>
<p>vThunderのVRRP-Aを使わない他IFのモニタリング方法を確認したところちょっと手間取ったので備忘。</p>

<h3>なぜVRRP-Aを使わないのか</h3>
<p>VRRP-Aの機能で他IFのダウンを検知して所属するIFの優先度を下げて別のvThunderへ通信を切り替えることができるのだが、この場合、Thunderが複数台いることが前提のため、一台だけ導入する場合は本機能が使えないのだ。</p>
<p>一台しか導入しない場合は挟まれている前後の機器が冗長構成をとっていたり、とした場合、既存環境に追加するような構成だと、今までと同じように動作しない可能性もあるため、一つ落ちたら全部落とす、のほうがよかったりするのだ（多分）</p>
<p>またThunder製品にはSSLi機能があるが、この機能を一台で完結させる場合は自装置間の接続が必須となる。自装置間ダウンはシングル構成のままだと外部から検知できず通信に失敗する可能性があるため、この対策のためにも必要だ。</p>

<h3>IF監視の設定「mon-template」</h3>
<p>今回使用するIF用の監視設定「mon-template」はほかのテンプレート設定と異なり、バーチャルサーバではなく、機器全体に適用するテンプレートとなる。
機能としては以下の設定が可能。<p>
<ul>
<li>IFダウン/アップの検知条件を設定(And/Or指定可能)</li>
<li>検知条件に対して以下のアクション指定が可能</li>
<ul>
<li>特定IFの有効/無効化</li>
<li>セッションのクリア</li>
</ul>
<li>条件/アクションは1つのモニタリング設定内でそれぞれ最大16個まで指定可能</li>
<li>モニタリングの設定は最大16個まで</li>
</ul>

<h1>参考</h1>
vThunderのCLIリファレンス

<h1>設定環境</h1>
<ol>
<li>vThunder(トライアル版 4.1.4-GR1-P2)</li>
<li>VMWare Workstation player 15</li>
</ol>

<p>vThunderのトライアル版はIFの追加ができない(mgmt/eth1/eth2の3つ)ため注意。
また、利用環境上VMware playerのサポートは正式に記載していないが一応コンバートすることで利用可能。
（使用する場合は自己責任で）</p>

<h1>設定</h1>
<h3>(1)環境構成</h3>
<ol>
<li>L3モードで設定(L2モードは下準備が大変なため省略)</li>
<li>パーティションは作成/分割しない(sharedパーティションのみ)</li>
<li>eth1がダウンした場合、eth2を落とすモニタリング設定を行う</li>
</ol>

<h3>(2)モニタリングのテンプレートを作成/適用</h3>
<p>IFのダウンを検知するモニタリングのテンプレートを作成する。
このテンプレートは最大16個まで作成可能。</p>

```html:Moniter-Template設定(eth1のダウンを検知してeth2を無効化)
vThunder(config)#system mon-template monitor 1
vThunder(config-monitor)#monitor-or
vThunder(config-monitor)#monitor link-down eth 1 sequence 1
vThunder(config-monitor)#action clear sessions sequence 1
vThunder(config-monitor)#action link-disable eth 2 sequence 2
```

<p>「monitor-or」は「monitor ～」が一つでも満たせばアクションを実行させるための設定。
すべての条件にマッチさせたい場合は「monitor-and」を指定する。
今回の場合は1件しかないからどちらでも設定可能だが、一番使われそうな「monitor-or」を設定。</p>
</p>「clear sessions」は現在の通信(セッション)をすべて破棄する設定。
IFダウンさせるため既存の通信は破棄させる必要があるため設定。</p>
<p>作成したテンプレートはそのままだと動作しないためバインドさせる。</p>

```
vThunder(config)#system template-bind monitor 1
```

<p>モニタリングの設定はここまで。</p>

<h3>動作確認</h3>
<p>eth1,2のIFは初期状態では無効になっているのでCLIかGUI上で事前に有効かしておく。
（IPアドレスとかの設定は動作確認だけなら不要）</p>
<p>事前状態を確認する。</p>

```
vThunder#show interfaces brief 
Port    Link  Dupl  Speed  Trunk Vlan MAC             IP Address          IPs  Name
------------------------------------------------------------------------------------
mgmt    Up    Full  1000   N/A   N/A  ****.****.****  ***.***.***.***/**    1
1       Up    Full  10000  none  1    ****.****.****  0.0.0.0/0             0
2       Up    Full  10000  none  1    ****.****.****  0.0.0.0/0             0
```

<p>eth 1 のIFをダウンさせる。</p>
<p>VMWare Work Station Playerの場合は画面上にデバイスのアイコンが表示されるため、
そこから「切断」を選択すれば疑似的にダウンさせることが可能（アダプタ1から順にmgmt/eth1/eth2)。</p>

![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577993/226ef50a-44a4-319b-3659-607d20b17689.png)
![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577993/e92ed3c5-4fbc-47eb-2823-ca99df04fd1c.png)

<p>ダウンさせた後状態を確認するとeth2の状態が無効になっていることがわかる。</p>

```
vThunder#show interfaces brief 
Port    Link  Dupl  Speed  Trunk Vlan MAC             IP Address          IPs  Name
------------------------------------------------------------------------------------
mgmt    Up    Full  1000   N/A   N/A  ****.****.****  ***.***.***.***/**    1
1       Down  None  None   none  1    ****.****.****  0.0.0.0/0             0
2       Disb  None  None   none  1    ****.****.****  0.0.0.0/0             0
````

<h3>復旧用テンプレートの設定</h3>
<p>今の状態からeth1を接続してもeth1はアップするがeth2は復旧してこない。
モニタの監視上県でも記載した通り、eth1がダウンしたときにeth2を無効化(disable)に変化させているためだ。<p>
<p>eth1が復旧したときはeth2の無効化を解除(有効化)する設定を別途用意する必要がある。</p>

```html:Moniter-Template設定/適用(eth1のアップを検知してeth2を有効化)
vThunder(config)#system mon-template monitor 2
vThunder(config-monitor)#monitor-or
vThunder(config-monitor)#monitor link-up eth 1 sequence 1
vThunder(config-monitor)#action clear sessions sequence 1
vThunder(config-monitor)#action link-enable eth 2 sequence 2
vThunder(config-monitor)#exit
vThunder(config)#system template-bind monitor 2
```
<p>復帰の設定になるためセッションのクリアは特に必要ないがARPとかが気になるので念のため設定する。</p>
<p>設定投入後、再度IFを手動で有効化し、eth1を切断/接続することで状態がdisable→Upに戻ることを確認して完了。</p>

<h1>補足事項</h1>
<ul>
<li>条件のIFと操作するIFはパーティションを分枯れていても設定可能</li>
<li>本設定はCLI上でのみ実施可能(GUIには該当画面が存在しない)</li>
<li>ルールは番号順に条件にマッチした一番最初のアクションが適用される</li>
<li>マッチしたモニタリングのアクションに連動して他のルールの条件が満たされてアクションが適用される、ということは無い(そもそもdownとdisable/Upとenableでは意味が違うからかも)</li>
<li>今回の設定はコンフィグ上での確認のみ可能(CLI/GUIで設定情報の参照ができない)</li>
<li>IFダウンのログは表示されるが、ルールが適用されてダウンしたのかはログ上では判別できない(実機上で無効化されていたらルールが適用されたと判別可能)</li>
</ul>