Posts tagged: IX

NEC IX 2015で IPsec通信 (VPNトンネル) がすぐに切れてしまう件

実は最近、友人と IPsecを使用したVPNトンネルを友人宅と接続して、CIFSでファイル共有したりしているのだけど、かなりの頻度でブチブチとトンネルが切れていて、どうしてなんだろうといろいろとIPsecについて調べていた。今回、なんとか原因がわかったので備忘録もかねて公表したいと思います。

ここでの原因判明は、NECの IXシリーズに共通することです。ほかのネットワーク機器メーカーでは当てはまらない場合があります。あらかじめ、ご注意ください。

いきなり結論を書こうとしたんだけど、かなり頭がこんがらがっちゃうので一般的な知識として IPsecの通信がどのように行われているのかを簡単に書くことにする。

IPsec SAと IKE SA

IPsecはプロトコルやポート番号などによって複数の暗号化方式や暗号鍵、セキュリティプロトコルを使用することができる。この際、実際に通信で使用され双方で共有するパラメータを SA (Security Association) と言い、このSAには IPsec SAと IKE SAの2つがある。それぞれのSAには寿命があり、寿命が尽きる前に鍵を更新する必要がある。

またそれぞれのSAは使用されるフェースが異なり、それぞれにフェーズ1,フェーズ2を経て、通信が行われる。
以下に各フェーズで行われることを自分なりにまとめてみた。

フェーズ1 : IKE SA

  1. IKEプロトコル同士の認証と暗号交換を行う。(ISAKMP SA交換)
  2. この際に使用するプロトコルとポートがUDP 500番。
  3. あらかじめ用意した pre-shared keyを使用して相手を認証する。
  4. あらかじめ用意した暗号化方式 (3DESなどでパケットを暗号化する。
  5. そしてそのパケットの改ざん検知にハッシュ(MD5など)を使用する。

フェーズ2 : Ipsec SA

  1. IPsecSAを確立するために鍵の交換を行う。(IPsec SA交換)
  2. この際も使用するプロトコルとポートは UDP 500番。
  3. IPsec SAの鍵として使う乱数をInitiatorが送信する。
  4. それを受け取ったResponderがAckを返し、InitiatorがAckを返すと、鍵の承認が終了。
  5. パラメータ(SA更新間隔など)の交換。暗号化方式、ハッシュ方式、AH/ESP、TP/TNモードの決定が行われる。
  6. IPsec SAが確立される。ここまでに作成したIPsec SAを使って、実際の暗号化通信が行われる。

IPsec SAと IKE SAの寿命(更新サイクル)

フェーズ2での処理で重要なものに、鍵の有効期限の更新がある。キュリティ上、同じ鍵を使い続けるのはパスワードを変えずに使い続けるのと同じ事で、ましてやインターネット上にトンネルを貼るわけだから、非常にリスクが高い。

そこでIPsecでは ReKey と呼ばれる処理を行なって、暗号鍵を自動的に更新する。キーの有効期限は、IPsec SAを確立してからの経過時間で設定でき、これを超える前に新たなIPsec SAが確立される。

それぞれに時間が決まっており、これはメーカーによって異なる。NEC IXの場合、

  • IPsec SAは60秒
  • IKE SAは30秒

になっている。
(普通はもっと長いような気がしますが・・・。)

IXで IPsec通信を行う上での問題点(というか仕様)

これ、本当にまいった。通常 IPsec SAと IKE SAではそれぞれにライフタイムがあって、通常であればこのライフタイム終了前に自動的に更新が行われ、ユーザーは継続してセキュアな通信を行うことができる。

ところが、NEC IXの場合、IPsec SAが生成されてからトンネル上でパケットが流れていない場合、前述の IPsec SAの更新をしないという仕様になっているため、60秒以上なにもパケットが流れない無通信状態が続くと、IPsecの通信が行われなくなり、結果としてVPNトンネルがダウンしてしまう。

何度か友人と試していて、頻繁にVPNが途切れてしまうので、何が悪いんだろうと設定事例集などを読み直しても何も書いていない。ほとほとまいってNECのサイトを見たら “Q.1-11 IPSec SAが常に存在する状態に維持したいのですが、方法は有りますか?” というのがあって、これだ!と思い投入してみたらビンゴ! :mrgreen: 以下の設定を投入したら、全然切れなくなりました。

IPsec SAを消失させない方法

この機能を使うにはネットワークモニタを使用する。あらかじめ、接続先ピアのIPアドレスを調べておくことが必要になるので注意。うちの場合だと、友人のIXのトンネルインターフェイスのアドレス 172.16.0.254 を設定している。従って、enable-config に入って、

watch-group host 10

ウォッチグループ(host)を作成します。

event 10 ip unreach-host 172.16.0.254 Tunnel0.0 source FastEthernet0/1.0

ホスト監視の宛先、出力インタフェース、送信元インタフェースを設定します。

probe-timer restorer 60

robe-timer variance 60

ホスト監視の監視周期を設定します(デフォルトは5秒)。

network-monitor host enable

ネットワークモニタ機能を有効にします。

で設定完了。

通信が正常に行えていなかったりする場合、show tunnel status というコマンドを使うけれど、各SAレベルでトラブルシューティングしたい、という場合には以下のコマンドを使用する。

フェーズ1 : show ike sa

Router(config)# show ike sa
ISAKMP SA - 1 configured, 1 created ←コンフィグ作成数/IKE SA生成数
Local address: 10.0.0.2 ←トンネル始点アドレス(出力インタフェースアドレス)
Peer address: 10.0.0.1 ←トンネル終端アドレス(ピアアドレス)
IKE policy name is ike-policy ←IKEポリシー名
Direction: Initiator ←ネゴシエーション開始側/受信側
Exchange type: Main mode ←モード:メイン/アグレッシブ
Auth method: pre-shared ←認証方式:事前共有鍵
Enc algorithm is 3des ←暗号アルゴリズム
Hash algorithm is sha1 ←認証アルゴリズム
DH group modp768, Life time is 28795 seconds ←DHグループ、ライフタイム
State: establish ←ネゴシエーションの統計情報
#ph1 success: 1, #ph1 failure: 0
#ph1 hash err: 0, #ph1 timeout: 0, #ph1 resend: 0
#ph2 success: 1, #ph2 failure: 0
#ph2 hash err: 0, #ph2 timeout: 0, #ph2 resend: 0

フェーズ2 : show ipsec sa

Router(config)# show ipsec sa
IPSec SA - 1 configured, 2 created ←コンフィグ作成数/IPSec SA生成数
Interface is Tunnel0.0 ←トンネルインタフェース名
Key policy map name is ipsec-policy ←IPSecポリシー名
IPSec mode: Tunnel (4-over-4) ←トンネルモード
Local address: 10.0.0.2 ←トンネル始点アドレス(出力インタフェースアドレス)
Remote address: 10.0.0.1 ←トンネル終端アドレス(ピアアドレス)
Outgoing interface: FastEthernet0/1.0 ←出力インタフェース
Interface MTU: 1446, Path MTU: 1500 ←トンネルMTU
Key type: Autokey ←SA生成方式(手動/自動)
Inbound
ESP SPI: 0xd7b5139d(3618968477) ←受信用SPI(SA識別番号)
Transform: ESP-3DES-HMAC-SHA-96 ←暗号/認証アルゴリズム
Remaining key lifetime is 3592 seconds ←ライフタイム
Replay detection support: Y ←アンチリプレイ機能の起動/停止
Outbound
ESP SPI: 0xbd4d7590(3175970192) ←送信用SPI(SA識別番号)
Transform: ESP-3DES-HMAC-SHA-96
Remaining key lifetime is 3592 seconds
Replay detection support: Y
PFS: OFF ←PFSの使用ON/OFF

今回ご紹介したコマンド投入後の観察

昨日から Expingを使ってずーっと pingバッチを流しているけど、全く切れていない :lol: スクリーンキャプチャは以下。(インターネットのゆらぎも考慮して、ring server プロジェクトにも pingを打っています。) また一歩前進したぜ。

23-29-44.jpg

参考にさせていただいたリンク

IPsec – Wikipedia

IX2000/IX3000シリーズ FAQ

NEC IX 2015 初期設定 その8 ホスト監視による冗長構成を構築する (ネットワークモニタとVRRP)

初めてこのページをごらんになった方や、PPPoEなどの基本的な設定はページ下部の関連記事や、サイト上部からサイトマップを見てください。

以前回線を止められましたという記事を書いたけど、そのときに簡単に説明していた回線の冗長化と、その回線が断になった際に自動でWANを切り替えているIXの設定をここで説明したい。

前提条件と簡単な説明

あらかじめIXに以下の設定をしていることが動作の条件になる。

  • FE0/0.0をLAN側の設定とすること。
  • FE0/1.1をWAN(PPPoE)の設定とすること。
  • 前述を前提に、WAN(PPPoE)が正常に構成されていること。
  • LANにNAPTが構成されており、クライアントPCからネットが閲覧できること。
  • 以上をクリアしたIXが2台以上あること。

できてない、という場合は、ページ上部サイトマップから該当のページを参照に設定してみてください。

VRRPの設定

Router(config)# interface FastEthernet0/0.0
Router(config-FastEthernet0/0.0)# ip address 192.168.1.1/24
Router(config-FastEthernet0/0.0)# vrrp 10 ip 192.168.1.254
Router(config-FastEthernet0/0.0)# no shutdown

vrrp 10 ip 192.168.1.254

ここでは 192.168.1.1をFE0/0.0に設定していて、 実際にtelnetとかでログインするのはこのIPアドレス。そして今回設定したのが192.168.1.254のアドレスでこれが実際に使用するVRRPのアドレスになる。クライアントPCのデフォルトゲートウエイはこの値に設定し直す必要がある。ちなみにpriorityは10に設定した。

もう1台も同じ構成で構成する

Router(config)# interface FastEthernet0/0.0
Router(config-FastEthernet0/0.0)# ip address 192.168.1.2/24
Router(config-FastEthernet0/0.0)# vrrp 10 ip 192.168.1.254
Router(config-FastEthernet0/0.0)# no shutdown

このルーターでは192.168.1.2のIPを指定する。VRRPの設定は実はこれで終わり。今回はpreemptまでやらないので、基本的な構成であれば非常に簡単に構成することができる。

ネットワークモニタの設定

いよいよ楽しい部分。IXにはインターフェイスを監視してその断を検知するやりかたと、特定のホストにpingを飛ばして、一定条件で返信がない場合に断と判断する場合の2パターンある。今回はホストを監視するパターンでいきたいと思う。監視するアドレスはいろいろとあると思うけど、今回は192.168.2.1と仮定する。

Router(config)# watch-group host-watch 10
Router(config-watch-host-watch-10)# probe-counter watch 1
Router(config-watch-host-watch-10)# probe-counter variance 6
Router(config-watch-host-watch-10)# probe-counter restorer 6
Router(config-watch-host-watch-10)# probe-timer variance 10
Router(config-watch-host-watch-10)# probe-timer restorer 10
Router(config-watch-host-watch-10)# event 10 ip unreach-host 192.168.2.1 FastEthernet0/1.0 source FastEthernet0/0.0
Router(config-watch-host-watch-10)# action 10 shutdown-vrrp 10
Router(config-watch-host-watch-10)# exit
Router(config)# network-monitor host-watch enable

それでは1つ1つ解説したいと思う。

watch-group host-watch 10
probe-counter watch 1
probe-counter variance 6
probe-counter restorer 6
probe-timer variance 10
probe-timer restorer 10
event 10 ip unreach-host 192.168.2.1 FastEthernet0/1.0 source FastEthernet0/0.0
action 10 shutdown-vrrp 10

ホスト監視の設定になる。192.168.2.1 に対してFE0/0.0からICMP Echo パケットを10 秒間隔で送信し、6回連続で応答を受信しなかった場合に障害、応答を受信した場合に復旧と判定する。

また、障害検出時にVRRPインターフェイスをシャットダウンすることで、すべてのトラフィックがもう1台のルーターを通じて流れるようになる。

なお、1 回の監視で送出するICMP Echo パケットの設定(probe-counter watch 1)と、障害と判定するICMP Echo Reply 連続受信失敗数(probe-counter variance 6)はデフォルトと同じ値になるので、show running-config では表示されない。

network-monitor host-watch enable

ネットワークモニタ設定”host-watch”を有効にする。

NTTに回線を止められました – 静止した闇の中で

外出先から自宅にVPNがつながらないから、おかしいなぁと思って夜に帰宅。そうしたら郵便ポストになにやらメモ用紙が。

dsc_0001.jpg

NTTからのお願い・・・!?

お客様宅の端末側の影響により外の集合装置が異常を来して他のお客様が使用できない(光電話とネット)状態なので、お客様の信号を止めてありますので宅内装置を点検の上、上記まで連絡くださるようお願いします。

どうもうちが原因で、マンション全体にご迷惑をおかけしてしまったようです。この場をお借りして、反省するとともに、深くお詫び申し上げます。

とはいえ、どうしたものかな。何が原因だったんだろう。

今度詳しく書こうと思いますが、うちの家ではネットワーク回線が正・副・予備の3系統あって、そのうちの正と副がNTTのBフレッツを使用しています。それぞれ個別のルーターが動いていまして、LAN側からみればVRRP(ヴァーチャルに存在するIPのようなもの)で1つのゲートウエイに見えます。

それぞれ個別のルーターは相互に監視をしていて、どちらかの回線に異常が発生すると、それを検知して異常が発生した回線に接続されているルーターを(LAN側の機器が)使わないように前述のVRRPから切り離します。

また、あらかじめ設定した条件により、正常に回線が復旧したとルーターが判断すると、回線をバックアップからメインへ自動的に切り戻します。

この機能により、仮に障害が発生したときでもLAN側からみれば「あれ、インターネット繋がらないなぁ … おっ、繋がった」と思うぐらいの時間の感覚でネットが使用できるのですが、今回のNTTからのお願いは、これが何か関係しているような気がします。

ともかくも、朝市で電話して、ほかの皆さんにご迷惑をおかけしないようにしたいと思います。

5月29日追記:

その後の調査で、ひかり電話のLANがなぜかWAN用のスイッチに接続されていることが発覚 8-O NTTの方とお話ししまして、回線を復旧していただきました。ご迷惑をおかけしました。

NEC IX 2015 初期設定 その7 PPPoEを設定する(Proxy-DNSとDHCPおよびNAPTも併せて設定してみた)

最近IXを全くといっていいほど触っていなかったけど、2ヶ月ほど使っていた pfSense だとやっぱりレスポンスとかいろいろな面でIXに劣るかな?と思ったので、メインルーターをIXに置き換えてみた。 あらかじめ断っておくと、pfSenseもよいソフトで、1CD router としては最高の性能だと思う。ただ、うちだと ESXi の上で動いていて、ほかの仮想マシンでI/O周りの付加が増えると、これに引っ張られてルーターの性能も少しだけどもっさりしてしまうことが何回か発生していた。

IX 2015 の初期設定を済ませる

今回も中古で買ってきた筐体に全く新しい機器を入れるという考え方なので、初めての人でもこれに沿って設定していけば家庭用ルーターとしては十分に使えるレベルになるとおもいます。(特定のポートをあけるNATとかしてなければね。)初期設定でやるべきことは以下。

  • 設定を初期化する(スーパーリセット)
  • ファームウエアを最新にアップデートする
  • 使うインターフェイスを決める

ちなみに上記のスーパーリセットとファームのバージョンアップの仕方はすでに過去に書いているので、初めてこのページを見た方はページ上部のサイトマップから、当該ページを表示してみてください。

それでは実際にインターフェイスをどのように使うかを決めてから、設定に入っていきたいと思う。

使うインターフェイスとサービスを決める

IXの場合実は細かくいろいろと制約があって、PPPoE用の設定をするインターフェイスはサブインターフェイスじゃないといけないとか、結構最初の頃はハマった。結構皆さんもはまるところだと思うので、ここで書くことにしました(笑)。 結局、うちの場合だと以下のような設定にしました。

インターフェイスの設定

  • WAN (PPPoEインターフェイス) : FE0/1.1 (IPはプロバイダによる動的割り当て)
  • LAN : FE0/0.0 (192.168.1.254)

使用するサービス

  • DHCPサーバー機能 :会社や自宅ですでに別のDHCPサーバーが動いている場合は不要。
  • NAPTサービス :これを使わないと、LAN側に接続されているPCなどから外部に通信ができないです。
  • PPPoEクライアント :これはもちろん必要。IXにPPPoEを処理させるようにする。
  • PPPoEアカウントの準備:使用するプロバイダーのPPPoEアカウント用IDとパスワードを準備してください。

実際の設定

今回はリセットしてホスト名も決めていない状態だったので、以下のように設定した。

Router# enable-config
Router(config)# ip route default FastEthernet0/1.1
Router(config)# proxy-dns ip enable
Router(config)# ip dhcp profile lan1
Router(config-dhcp-lan1)# dns-server 192.168.1.254
Router(config-dhcp-lan1)# exit Router(config)# ip dhcp enable
Router(config)# ppp profile adsl
Router(config-ppp-adsl)# authentication myname my-router@xxx.nec.com
Router(config-ppp-adsl)# authentication password my-router@xxx.nec.com my-passwor
Router(config-ppp-adsl)# exit
Router(config)# interface FastEthernet0/0.0
Router(config-FastEthernet0/0.0)# ip address 192.168.1.254/24
Router(config-FastEthernet0/0.0)# ip dhcp binding lan1
Router(config-FastEthernet0/0.0)# no shutdown
Router(config-FastEthernet0/0.0)# interface FastEthernet0/1.1
Router(config-FastEthernet0/1.1)# ppp binding adsl
Router(config-FastEthernet0/1.1)# ip address ipcp
Router(config-FastEthernet0/1.1)# ip napt enable
Router(config-FastEthernet0/1.1)# ip tcp adjust-mss 1414
Router(config-FastEthernet0/1.1)# no shutdown

各コマンドの解説

前述のコマンドでほぼ問題なく一般家庭のルーターとして使用できるようになるけれども、何をどういう意味なんじゃい、という方もいると思うので、いかに簡単に解説します。

ip route default FastEthernet0/1.1

デフォルト・ルートの設定です。 インターフェイスを自分で変更している場合は、ここも変更しないと、パケットが外に出て行けません。

proxy-dns ip enable

プロキシDNS機能を有効化します。 これを設定することによって、IXがDNSサーバーの代わりになり、LAN側からのリクエストに対して代理応答します。ちなみに、実際はIXがISPのDNSにクエリを投げているんですけどね。

ip dhcp profile lan1
dns-server 192.168.1.254

DHCPサーバ機能のプロファイル”lan1″を定義します。プロキシDNS 機能を使用するため、端末に通知するDNSサーバのIPアドレスは、 FE0/0 (FastEthernet0/0.0)のIPアドレスとなります。

ip dhcp enable

DHCPサーバ機能を有効化します。先ほども書いたとおり、DHCPサーバーをほかに立てている場合はここは不要です。

ppp profile adsl
authentication myname my-router@xxx.nec.com
authentication password my-router@xxx.nec.com my-password

PPPoE接続に必要なユーザ名とパスワードを、”adsl”という名前を付けてプロファイル化します。 実際に設定するときは、IPSの名前などをつけるとわかりやすいかもしれません。また、パスワードの設定にはIDを打つこともお忘れなく!(コピペミスじゃないです)

ip dhcp binding FE0/0

FE0/0(FastEthernet0/0.0)からDHCPクライアントに対し、 DHCPプロファイル”lan1″に基
づいて設定情報を送信します。 DHCP機能を使用しない場合には必要ありません。

ppp binding adsl

FE0/1(FastEthernet0/1.1)のPPPoE接続は、プロファイル”adsl”に基づいて行います。

ip address ipcp

FE0/1(FastEthernet0/1.1)のアドレスはIPCPで取得します。 IPCPというのは Internet Protocol Control Protocol の省略なのですが、簡単に言えばISPがユーザーに対して割り振る機能をIPCPと思ってくれればよいです。(DHCPのキャリア版)

ip napt enable

NAPTを有効化します。これにより、動的にNATがかかって外から中に入ってくることができます。

ip tcp adjust-mss 1414

インタフェース FastEthernet0/1.1 から出力される TCP ヘッダの MSS 値を、1414 バイトに書き換えます。フレッツなどの接続の場合は、これを設定しないとパケットのフラグメントが起こりやすくなります。つまり、文字はきちんと表示されてるけど、画像が出ないなんてばあいはここを疑った方がいいです。

NEC IX 2015 初期設定 その6 ホスト名とtimezoneおよびクロック(時刻)の設定

少し話が前後してしまうけど、ここでホスト名とクロック(時刻)の設定を行いたいと思う。本当はNEC IX 2015 初期設定 その4 NTPとsyslogの設定より前にするのがベストだと思う。(今更言うなよ)

まずはタイムゾーンと時間を設定する。

大切なのはタイムゾーンだけ。時刻に関して言えば、後でNTPで同期をとるので、007ばりに時刻を合わせる必要はない。

Router(config)# timezone 9
Router(config)# clock 23 01 0 24 04 2009
Router(config)# show clock
Friday, 24 April 2009 23:01:18 +09 00

ホスト名の設定

ここではgilbertという名前を設定する。

Router(config)#hostname gilbert
gilbert(config)#

ちなみに余談だけど、ギルバートって言うのはアリゾナの小さな町の名前です。昔近くに住んでいました。

Gilbert, AZ

WordPress Themes