柔らか層外伝 NetScaler編

#SoftLayer と NetScaler について
今回は、高機能な負荷分散や、Global LoadBalancer、WAFとして利用されている NetScaler です。VPX、MPXの2つの選択肢がありますが、どちらのケースにおいても今回は同じ杖が必要です。それでは早速:smile:

#転ばぬ先の杖 :coffee: 

## 杖１：エディションはアップグレードできる
StandardからPlatinumへのアップグレードはTicketで依頼することができます。スモールスタートして順次拡張する、ということができます。

## 杖２：買う前に、NetScaler VPX Platinum Editionを試すことも出来る。
Citrix NetScaler VPX-1000 Platinum Editionの 90日有効な評価版ライセンスを利用できます。
以下から評価版ライセンスを取得できます。ライセンス取得にはMy Citrixアカウント作成が必要です。
シトリックス » 評価版ダウンロード
http://www.citrix.co.jp/products/download.html

上からはVPX 10.1しかダウンロードできないので、VPX 10.5はこちらからダウンロード
NetScaler VPX Express - Citrix
http://www.citrix.com/downloads/netscaler-adc/virtual-appliances/netscaler-vpx-express.html

> セットアップ概略
> 1. My Citrixアカウント作成
> 2. 評価版ダウンロードのリンク先から、Trialライセンスの発行を依頼
> 3. NetScaler VPX Expressから、VPX 10.5をダウンロード。
> 4. OVFをデプロイして起動
> 5. user: nsroot/passwd: nsrootでログイン。shellコマンドでシェルに移動
> 6. lmutil lmhostid -ether コマンドでライセンス登録に必要なMACアドレスを取得
> 7. ライセンス管理のページ (http://www.citrix.com/account/toolbox/manage-licenses/view.html) からライセンスに取得したMACアドレスを登録
> 8. ライセンスファイルをダウンロードして、VPXに適用

## 杖３：初期オーダー時のホスト名からの変更はできない
これは仕様なので、どうしても変えたい場合は新規に構築するしかありません。。。

## 杖４：ライセンス更新は？
HA構成を組んでいる場合、1号機、2号機のパスワードが同期されるため、初期オーダー時からどちらか一方のパスワードが変わってしまっている場合があります。SoftLayerのカスタマーポータルに入っているパスワード情報が、実際のパスワードと異なる場合、以下の手順でライセンスアクティベーションが行えません。
パスワードが異なる場合は、チケットで依頼して、正しいパスワードに更新してもらいましょう。

> 通常のライセンス更新手順：
> 1. SoftLayer管理ポータルへログインする
> 2. Device Listを表示
> 3. 確認対象のNetscalerのDevice Nameを選択
> 4. ライセンスの更新※　チェックボックスを選択後、Rebootで完了します。
> ![nslic.png](https://qiita-image-store.s3.amazonaws.com/0/53057/80d91f01-0e84-c053-a42d-4e888d421818.png)

## 杖５：有事の際のアクセスパスを設定しておきたい
制限する接続IPアドレスを変更する、ということなのですが、災害などの状況で、その時だけアクセスを許可して、特定の送信元からはインターネットからでもサービスを利用できるようにする、といった使い方を想定しています。

方法は、以下の3つがあります。

1. GUIでの操作
2. NetScalerコマンドでスクリプト化
3. NetScaler SDKでプログラム作成

それほど変更が頻繁にないようであれば手順にしてNetScalerのGUIで設定すればよいでしょう。頻繁にある場合や自動化したい場合はコマンドをスクリプト化するか、SDKでプログラムを作るのがよいですね。

GUIもコマンドも、ある程度のNetScaler操作のスキルがあれば、ガイドに従って実施いただけると思います。
コマンドの場合は、具体的には以下のようなNetScalerのコマンドを投入します。sshなどを使って工夫すれば、スクリプト化することもできると思います。

```
> add ns acl acl_allow01 ALLOW -srcIP = 100.100.0.0-100.100.255.255 -protocol ICMP -priority 10 -kernelstate SFNOTAPPLIED61
 Done
> save ns config
 Done

ns acl - Citrix eDocs
http://support.citrix.com/proddocs/topic/ns-reference-map-10-5/netscaler-crg-ns-acl-ref.html#netscaler-crg-add-ns-acl
```

あとは、[NetScaler SDK](www.citrix.com/downloads/netscaler-adc/sdks/netscaler-sdk-release-101.html) を使って、C/Perl/Java/C#などで簡単なプログラムを作っても対応できます。
アクセスリスト追加は上記のSDKサイトにサンプルが付いているので、比較的簡単にできますよ。

## 杖６：使うバージョンはできるだけ最新に
Vyattaでも同様ですが、Netscalerのバージョンもできるだけ最新のものを適用するようにしましょう。これは初期構築時だけではなく、定期的に更新する仕組みを検討し、実装しておく、ということも大切です。特に、NetscalerやVyattaはネットワークの中心的な役割を担うことが多く、パフォーマンスの改善やセキュリティの強化などが施されることがあります。そんな便利機能、積極的に使わない手はありませんね。

## 杖７：Netscalerじゃなくてもいいかも？
アクセス経路がPrivateの場合、Netscalerを検討するのがよいです。ですが、Publicの場合は、2018年5月から利用できるようになった「IBM Cloud Internet Services」を検討してみるのもよいでしょう。
WAF、DDoS防御、GlobalLBが標準でついてきます。加えて、CDNやFirewall、証明書サービス、（業界最速の）DNSなども使える超お得サービスです。
詳細：https://cloud.ibm.com/docs/infrastructure/cis?topic=cis-getting-started&locale=ja

#NetScalerが応答しない！
これはSoftLayerあるある、です。
HA構成のNetScalerで何らかの理由でheartbeatが失われると、hearbeatを失ったNIC側を使わなくなってしまう。2）に記載したように、NetScalerはIP addressとNICの間に静的な割当関係を必要としないので、2)や3)の対策を行わないと2つあるNICのどちらを使うかわからない。heartbeatを失った後、意図しないNICに意図しないIP addressを使わないようにこれらの設定をする。
一方、heartbeatを失っても、heartbeatが復活したら問題のあるNICを再度利用してもいいはずなのに、一度だめになるとリセットするまで復活しないという問題がある。これを修正するために、1)を適用する必要がある。
- Private VLAN側のみ使っているなら1)を実施
- Public VLAN側もつないで使っているなら2)も実施
- この状態で様子見て再発しないなら3)は要らないかも

##対策１）NetScalerのHA構成時に発生するバグ。-> release 10.5 build 57.7以上のBuildにあげる。

（参考）http://docs.citrix.com/en-us/netscaler/10-5/ns-rn-main-wrapper-10-5-con/main-releases/fixed-issues-in-previous-10-5-builds.html#high_availability

##対策２）NetScalerで扱う全てのsubnetに対し、ひとつずつSNIPもしくはVIPをbindする。
NetScalerではIP addressを定義しただけでは、どのインターフェースで使うのかは決まっておらず、なんらかのきっかけで特定のインターフェースに結び付けられ、負荷増大などの他のきっかけでそれが外れてしまうということがある。明示的に縛るにはsubnetを特定のinterfaceにbindしておく必要がある。
※SoftLayerから配布された初期構成では設定されている模様
[How to Associate an IP Subnet with a NetScaler Interface by Using VLANs](http://support.citrix.com/article/CTX136926)

##対策３）MAC based forwarding(MBF)を有効にする。
MAC based forwardingは、外部から来たリクエストに対し、同じインターフェースから応答を返すという設定。NetSclaer発のTCP接続には、MAC based forwardingは効かないかもしれない。
[FAQ: Citrix NetScaler MAC Based Forwarding (MBF)](http://support.citrix.com/article/CTX132952)

MAC based forwardingの設定方法
> Configurationタブの
> System > Settingsの中の
> Configure Modesをクリックし
> MAC based forwardingにチェックを入れてOKをクリック、で設定できます。

http://www.carlstalhood.com/netscaler-system-configuration/#twoarm
http://www.creationline.com/lab/5838

#補足
スペックを把握しておきたい場合は、[こちら](Netsclaer VPX Datasheet
https://www.citrix.com/content/dam/citrix/en_us/documents/products-solutions/citrix-netscaler-vpx-data-sheet.pdf)が参考になります。
製品マニュアル的なものもいくつかCitrix社のサイトにあります。
http://docs.citrix.com/en-us/netscaler/10-5.html
http://support.citrix.com/servlet/KbServlet/download/18667-102-19396/NS_GSG_JA.pdf（v9だけど日本語です）