YAMAHAルーターと戯れるシリーズ、前回(YAMAHAルーターRTX810の設置完了に関する詳細)の続きである。
SSL-VPNからルータによるVPNへの乗り換えを決意し、L2TP/IPsecを使用することに決めた私がYAMAHAルーターRTX810を入手し、ちょっとやんちゃな方法で設置を完了した次にやるべきは、いよいよL2TP/IPsecの設定である。
L2TP/IPsecの設定をする前に、SSHによるログインの有効化、TELNETの無効化、NTPによる時刻取得の設定、シリアルによるコンソール接続等々、環境の整備を行ったが、それはまた時間がある時に記事にしようと思う。そもそもこのシリーズはL2TP/IPsec設定のいきさつを書くのが目的だったのに、ここにたどり着くまで5つの記事を経なければ為らないとはだれが想像できただろうか。
ともあれ目的はモバイル端末からの、L2TP/IPsecによるリモートアクセスVPN環境の構築だ。当面は3G回線からのアクセスを考えている。IPv4アドレスの枯渇が叫ばれて久しいが、日本の携帯電話各社も、各端末へのグローバルIPの付与を、プライベートIDへ切り替える動きが進んでいる。 出先端末から、RTX810へといたる経路にはNATがあると想定しておくべきだ。RTX810では、IPsec、PPTPとL2TP/IPsec、IPIPトンネルなどが使用できるが、リモートアクセスVPNに使用できるのは、PPTPとL2TP/IPsecとなり、さらにNAT越えが出来るのはL2TP/IPsecとなる。当初の予定通りL2TP/IPsecを使用する。では、やってみよう。
やってみよう、その1.RTX810の「かんたん設定ページ」からの設定
まず、「かんたん設定ページ」へアクセスし、 [詳細設定と情報] → [VPN接続の設定] と進み、”L2TP/IPsecを使用したリモートアクセスVPNサーバー(Anonymous)”を選択する。「設定名」、「事前共有鍵」、「認証アルゴリズム」、「暗号アルゴリズム」、をお好みで入力する。「キープアライブ」はIPsecのキープアライブとL2TPのキープアライブがあるが、ここの項目は、L2TPのキープアライブをonにするかどうかの設定である。お好みで設定するといい。
「接続先に割り当てるIPアドレス」は、VPNで接続してきた機器に割り当てるIPアドレスを指定する項目だ。今回は、割り当て方法で”DHCP機能から割り当て”とした。これで、ネットワークのローカルIPが出先の端末に割り振られる。
「自動切断タイマ関連」では、無通信状態をタイマーで監視し、閾値を越えたら切断する設定だ。今回は”タイマで通信の有無を監視して自動切断をする”を選択し、設定秒数を”600″秒とした。”タイマで自動切断しない(常時接続または手動切断)”を選び、前出のキープアライブを設定していなければ、端末が通信を切断せずにダウンした場合等に、セッションが残り続けてしまう事があるので注意が必要だ。また、VPNで接続する[ユーザID]と[パスワード]を任意に設定する。この設定で、[設定の確定]ボタンを押し、設定を反映させる。
やってみよう、その2.Android端末の設定
「かんたん設定ページ」で設定できるのは此処までだ。NATトラバーサルに関する設定は「かんたん設定ページ」には無い。この状態でつながるかどうかちょっと興味があったので先にandroid端末のVPN設定を行うことにする。VPN設定の情報はandroid認証情報ストレージに保存される。認証情報ストレージを他で使ったことが無ければ、VPN設定の途中で任意のパスワードを決定するダイアログが表示される。
android端末のホーム画面から、[Settings] → [無線とネットワーク] → [VPN設定] → [VPNの追加]と進む。今回は証明書では無く、事前共有鍵使うので、「L2TP/IPsec PSK VPN を追加」を選択する。「VPN名」は任意だ。カッコいい名前を付けたい。映画ターミネーターに因んで”SkyNet”として置く。うむ、かっこいい。「VPNサーバ」の設定には、プロバイダからRTX810のWAN側へ割り振られたIPアドレスを入れる。固定IPサービスを使用していない場合は、PPPoEを繋ぎなおすたびにIPアドレスが変わってしまうので、ダイナミックDNSサービスを使うといい。YAMAHAは同社のユーザー向けにネットボランチDNSサービスと言うサービスを提供している。「かんたん設定ページ」の[詳細設定] → [ネットボランチDNSホストアドレスサービスの設定]から申し込む事が出来る。これでプロバイダからルータのWAN側にに割り振られたIPアドレスが変わるたびに、”ユーザが希望したホスト名.xxx.netvolante.jp”という文字列に名前解決するようにDNSへ登録してくれちゃうのだ。しかも無料だ。これを、[VPNサーバの設定]の欄に設定して置く。続いて、[IPSecの事前共有鍵の設定]の欄には、RTX810で設定した事前共有鍵を同じ文字列を入力する。その下の[L2TPセキュリティ保護を有効にする]にチェックが入っていない事を確認する。[DNS検索ドメイン]も触らない。これで[メニューボタン]から[保存]を選択する。
これで出来た”SkyNet”と言うVPN名をタップすると次からユーザーIDとパスワードの認証を経て接続しに行ってくれる。ためしにやってみると、やはりつながらない。まあ、当たり前か。
やってみよう、その3.コマンドラインからのNAT-T設定に挑戦
では、Syslogの内容をさらっと見て、つながらない理由で疑われるNo.1は、NATトラバーサルやってないからだと漠然と考えた私は、お待ちかねのコマンドラインからの設定に取り掛かった。先に、「かんたん設定ページ」の[詳細設定と情報] → [ユーザーとアクセス制限の設定(HTTP、TELNET、SSH)]にて、”ユーザID”と”パスワード”、及び”管理パスワード”を設定し、さらには「TELNETサーバー機能」を”すべて許可しない”として、「SSHサーバ機能」を”使用する”と設定した。その他の細かい設定はお好みで。これで後は、ごく一般的なSSHサーバーにログインするのと同じ感覚でログインできる。私はPoderosaを使用している。自動で操作ログを残しておいてくれるのが、とても便利なのだ。自分が何をやったか、動かぬ証拠を残してくれるのは素敵だ。自分がやったことを証明できるようにして置き、その上で変な事をしない。それが、自分の身を守るための最善の策である。
ログイン直後は一般ユーザなので、打てるコマンドは参照コマンドに限られる。一般ユーザのプロンプトは “>” となっている。なので、UNIX系で言う所の “su” コマンドに相当する以下のコマンドを入力する。
> adminisrator
すると、パスワードを聞かれるので、「かんたん設定ページ」で設定した”管理パスワード”を入力すると管理ユーザに昇格できる。プロンプトが “#” になっていれば成功だ。今回設定したVPNトンネルは”tunnel1″であることが分かる。NATトラバーサルは、この”tunnel1″に対して設定する。早速以下のコマンドでNATトラバーサルを設定してみる。
# tunnel select 1
tunnel1# ipsec ike nat-traversal 1 on
tunnel1# no tunnel select 1
#
コマンド成功でも特にメッセージは表示されない。下記コマンドで現在のconfigの内容を表示させ設定結果を確認する。現状を把握しておくことは大事だ。
# show config
このコマンドで表示されたのが現在のコンフィグファイルの内容だ。この設定項目一つ一つが、そのままコマンドとして打てる。実にわかりやすい単純な作りになっている。単純なのはいい事である。表示されたコンフィグ内容を見てみると、以下の様になっている。
~省略~
pp select anonymous
pp name SkyNet
pp bind tunnel1
pp auth request chap-pap
pp auth username ユーザー名 パスワード
ppp ipcp ipaddress on
ppp ipcp msext on
ip pp remote address pool dhcp
ip pp mtu 1258
pp enable anonymous
tunnel select 1
tunnel encapsulation l2tp
ipsec tunnel 1
ipsec sa policy 1 1 esp 認証アルゴリズム 暗号化アルゴリズム
ipsec ike keepalive log 1 off
ipsec ike keepalive use 1 off
ipsec ike nat-traversal 1 on
ipsec ike payload type 1 3
ipsec ike pre-shared-key 1 text 事前共有鍵
ipsec ike remote address 1 any
l2tp tunnel auth off
l2tp keepalive use on
ip tunnel tcp mss limit auto
tunnel enable 1
~省略~
無事にNATトラバーサルが”ON”になったようだ。しかしこれでもまだ足りない。L2TP/IPSecでは、port50(ESP)、port500/udp(IKE)を使用する。「かんたん設定ページ」からL2TP/IPSecを設定すると、このポートも合わせて解放してくれいてる。自動的に整合性をとってくれるのだ。しかし、NATトラバーサルを使用するとこれに加えて、port4500/udpも使用するようになる。これは、”ipsec ike nat-traversal 1 on”のコマンドでは、自動でやってくれるようにはなっていない。よって、以下のコマンドで、portを解放してやる必要がある。
# ip filter 200083 pass * 192.168.0.1 udp * 4500
# nat descriptor masquerade static 1000 4 192.168.0.1 udp 4500
#
# pp select 1
pp1# ip pp secure filter in 設定されていたフィルタ番号 200083
pp1# no pp select 1
#
# save
上のコマンドは、フィルター番号200083として、送信元がどんなIPアドレスのport4500の通信でも、あて先がRTX810のLAN側(192.168.0.1)であれば、どのポート宛てでもudpなら通すよ、と言う項目を作った。そして、IPマスカレードとして、port4500/udpの通信は、RTX810に渡しますよ、という設定を、NATディスクリプタ―番号1000に対して4番目の項目として追加した。
さらに、さっき作ったフィルター番号200083を有効化するため、pp1のINのフィルターに追加した。NATディスクリプタ―1000を使いますと言う宣言はすでにされており、そこに追加したので、マスカレードに関しては有効化する必要はない。
pp select 1 と言うのは、これ以降打つコマンドはpp1に対してですよと言う宣言コマンドで、このコマンド以降はプロンプト文字が”pp1(文字は変更可能)”から始まる様になる。pp1に対するコマンドを打ち終えたら、no pp select 1コマンドで、pp1に対するコマンドは終わりましたと宣言する。そして、打ったコマンドをsaveコマンドでconfigファイルにセーブして終了だ。勿論show configコマンドで確認したが、記事が長くなるので省略する。コマンドと同じ文字列が、ちゃんと表示されることを確認し、間違いがないと見届けた。
これでで行けるだろうと思っていたが、私が思っていた以上にRTX810はセクシーであった。ONUにつないだ時も、インターネットにつないだ時も、素直に従ってくれた。しかしVPNに関しては、そう簡単に思い通りにはなってくれないのだ。焦らし所を心得ている。android端末から、3G回線を経由してVPN接続をしに行ったら、RTX810はSyslog上にこうつぶやいたのだ。
can't find tunnel number
can't find valid pp interface
このメッセージをWeb検索エンジンに突っ込んでみると、YAMAHAのL2TPに関する解説サイトで、以下のように解説されていた。
can’t find tunnel number | L2TP接続で使用されるトンネルインタフェースがみつからない。 ipsec ike remote addressコマンドで接続相手のIPアドレスを固定しているときに、tunnel endpoint addressコマンドで接続相手のIPアドレスを設定いない場合などに出力されます。 |
can’t find valid pp interface | L2TP接続で使用されるトンネルインタフェースがバインドされたPPインタフェースがみつからない。 pp bindコマンドによってトンネルインタフェースがバインドされていない場合や、バインドされた PPインタフェースがすでに使用されている場合に出力されます。 |
相手のIPアドレスは固定などしていない。ちゃんと固定しない設定にしている筈だが、どうした物かと思案に暮れた。そして上記サイトの設定例と、自分のshow configコマンドの結果を見比べて、”ipsec ike local address”一行が私の設定に無い事を見つけた。早速打ってみる。繰り返しに成るが、192.168.0.1はRTX810のLAN側のIPアドレスである。
# tunnel select 1
tunnel1# ipsec ike local address 192.168.0.1
tunnel1# no tunnel select 1
# save
show configコマンドで正しく設定されていることを確認し、再度android端末から接続してみた所、つながった。VPN接続が上手くできた。ESファイルエクスプローラーで、ネットワーク上のファイルサーバーのファイルがのぞけることを確認した。windowsサーバーにリモートデスクトップで接続してみたが、これも上手く行った。遅いなりにちゃんと使う事が出来た。小さな窓から大きなPCを除いている気分だ。ためしに、android の wol ソフトから、VPNを通してマジックパケットを投げてみた。上手く行けば遠隔地からサーバーが起動できるはずだが、これは上手く行かなかった。ブロードキャストで送ってみた所、RTX810でブロードキャストアドレスへのアクセスを禁止しているので、sysylogにパケットを破棄したログが残っていた。だからと言ってブロードキャストを許可してしまうのもセキュリティーの観点からすれば、弱点を増やす様な物で、あんまりやりたくない。この辺の解決策については少し考える必要がありそうだ。
ついに、無事に当初の目的を達成した。これで出先でも不自由することは格段に減るだろう。サーバーに手の届くところに居なければならないと言う足かせが外れ、私は自由になった。Wimaxのついたタブレットなど手に入れてしまった日には、ウハウハかもしれない。タブレットをシンクライアント化し、重い処理は遠く離れたサーバーたちが行い、タブレットには結果だけを表示させる事が出来る。そうなれば後は問題はバッテリーがどれだけ持つかという問題さえクリアされればパラダイスだ。快適なVPN環境を手に入れた私の夢は広がる。次回からは細かな環境整備を行っていく事にしようと思う。
4 件のコメント!
通りすがりの者です。 VPN環境下での遠隔地からのWOLについて。
前提として、WOLソフトはRTX810のグローバルIPアドレス及びMACアドレスを指定し、ポート番号Nにパケットを投げる仕様とする。
1.RTX810の静的NATにブロードキャストを登録。
例;「ip filter 200001 pass * 192.168.0.255 udp * N」
2.RTX810に次のコマンドを追加。
「ip lan1 wol relay broadcast」
これで可能になると思います。ご参考までに。
「nat descriptor masquerade static 1000 1 192.168.0.255 udp N」
も必要でした。
WOLソフトで指定するMACアドレスはRTX810ではなく起動させたいPCを指定します。
補足訂正しておきます。
>> 通りすがりの匿名さん
WOLについての情報ありがとうございます。
当方の環境でテストしてみた所、
「ip lan1 wol relay broadcast」のみ設定し、フィルターは弄らず、VPN接続した状態でマジックパケットをブロードキャストで送信した所、目的のサーバーのmacアドレスを指定して起動させる事が出来ました。
フィルター自体はVPNで通過しているので、マジックパケットの中継だけで良いようです。