netscaler LBにおいてサーバを使わずにリダイレクトする

これは何

netscaler LBにおいて特定FQDNへのアクセスをパスそのままで他のFQDNにリダイレクトする方法についてまとめる。 この資料は NetScaler version 11.0 で実験した動きを元に書いています。

目次

参考資料

https://support.citrix.com/article/CTX120664 大体これを読めばできるが以下の問題があった(この資料を作るモティベーション

  • LoadBalancing Virtual Server の設定のところがServiceと書いてあり誤植と思われる
  • 設定箇所の階層が書いておらず多少読みづらい
  • LoadBalancing Virtual ServerにGlobal IPを設定するパターンしか書かれていない

手順

System設定でresponderの有効化

NetScaler -> System -> Settings -> Configure Acvanced Features
responder にチェックを入れる。

Responder Actionの設定をする

  • Addする(既存のActionを選択してAddするとそれをテンプレートとして使うことになる。最初から作るなら選択を外してAddする)
  • TypeはRedirectを選択
  • Expression
    例1) http->httpsにリダイレクトするなら、スキーマのところだけhttpsと書いて後は同じ
"https://" + HTTP.REQ.HOSTNAME.HTTP_URL_SAFE + HTTP.REQ.URL.PATH_AND_QUERY.HTTP_URL_SAFE

例2) 特定の別のドメインにリダイレクトする

"http://piyo.jp" + HTTP.REQ.URL.PATH_AND_QUERY.HTTP_URL_SAFE

補足: L7で http://hoge.jp/fuga などで入ってきたLoadBalancing Virtual Server経由でこのactionで http://piyo.jp/fuga に飛ばすイメージ
* Response Status Code を設定する デフォルト 302

Responder Policy の設定をする

  • さっきのActionを設定する 
  • Undefined-Result ActionをRESETにする
    • tcp handshake の rst に対応すると思われる。dropとするとクライアント側はそのまま待ち状態になってしまう。
  • Expressionには HTTP.REQ.IS_VALID を設定(frequently Userd Expressionから選択すると良い)
    • 要するにこのpolicyでは特に何もせずに(validかチェックだけして)actionへ流すという意味か

monitor 設定をする

localhostpingをうつmonitor設定を作る

service を作る

上で作成したmonitorを使って常にserviceがUP状態になるようにする。あくまでダミーで、LoadBalancing Virtual Serverが常にUP状態になるようにするためのものの模様

  • 上記serverを紐付ける
  • ProtocolとPortはHTTPと80とでも適当に設定しておく
  • 作成後、Monitoring設定で先程作成したmonitorを設定し、UP状態になることを確認する

LoadBalancing Virtual Serverを作る

  • IP Address: WebサイトのIPアドレスもしくはPrivate IP
    • Global IPで直接受ける場合にはここに設定
    • Content Switching Virtual Server通すならここはPrivate IPを指定する
  • 作成後Responder Policyを設定

Content Switching Virtual Server 設定

上記でLoadBalancing Virtual ServerにPrivate IPを設定した場合にはContent Switching Virtual Serverのpolicyに紐付ける この手順はredirector特有というよりもContent Switching Virtual ServerからLoadBalancing Virtual Serverに流す手順と同じなので省略する