Screen OSでVPNを設定すると、ルーティングのほかにNHTB(Next Hop Tunnel Binding)を設定する。この設定がないとVPNで指定したIPへ到達ができないのだが、なぜ必要かがわからなかった。
下記のようなサイトを例にしてNHTBについて考える。
10.20.10.0/24についてはルーティング情報を登録すると、以下のようになる。
- gateway:10.1.1.2
- インタフェース:トンネルインタフェースであるst0.0
3つのリンクについてルーティングテーブルは以下のようになる。
VPNではないネットワーク上ではこの情報だけでパケットは相手先に到達する。しかしVPNではSA(Security Association)と呼ばれるSession情報を指定する必要がある。このSAはPhase1してするゲートウェイと紐づいているので、ルーティングテーブルのgateway→Phase1のgateway→SAと取得できるはずだが、Screen OSではNHTBとしてNext Hop+インタフェースをキーにして登録する。
指定したIPに対して、正しいゲートウェイおよびインタフェースを指定しても間違ったSAを使うと相手とのセッションに不整合が発生するのでVPN通信は当然できない。
実際にScreen OS上で設定を確認してみると、Dynamicで設定されていることがわかった。
NHTBは受け取ったパケットに従って学習をする。送信元IPアドレスと受信インタフェースがわかればその時に使っていたVPNのSAはわかるのでNHTBを更新することができる。
参考