出先から家のデジタル環境を利用したいと思うのは、人の常であろう。デジタル機器がインターネットにつながった家庭内LANに接続していればそれは可能である。私は今までそれを実現する手段として、OpenVPNを使用してきた。OpenVPNサーバを立てて、そこへ出先から暗号化された、リモートアクセスVPNを張り、Windowsリモートデスクトップでセキュリティーを保持しつつ自宅居る時と近い感覚でPCを使えるように環境を整備していたのである。
OpenVPNは全く以て素晴らしい。無料のオープンソースでありながら、SSL-VPN機能を幅広いOSにまたがって提供してくれる。しかも多機能である。これを使えばポート443が開いているネット環境に、OpenVPNクライアントをインストールした端末をつなぐだけで、内容をSSLによって秘匿された通信を行う事が簡単に可能となるのだ。ポート443を使用している限りは、はたから見れば、SSLの通信をしているようにしか見えない。この点も何かと都合がよいのだ。
そんなこんなで、OpenVPN環境を快適に運用していたのだが、人の業は深き物にて、使い込むにつれてもっと便利にならないものかと思える欲張りポインツが2点出てきた。
欲張りポインツ1.VPNネットワークと、家庭内LANネットワークが別である
OpenVPNは、インストールされたサーバとクライアントのそれそれで、仮想ネットワークインターフェース(以降仮想NICと称す)を作りこの仮想NIC同士でVPN通信を行う。私の構築した環境ではルーティングモードで設定していた為、VPNの仮想NICが持つネットワークと、家庭内LANの実NICが持つネットワークが別である必要があり、出先の機器からはOpenVPNサーバまでしかアクセスできない。家庭内LANに所属する他のサーバに対しては、OpenVPNサーバのリモートデスクトップを介してのみのアクセスであった。
これで何が不便かと言うと、出先から、家庭内LANのファイルサーバにあるファイルを持ってきたい場合、ファイルサーバ→OpenVPNサーバ→出先端末と、2度転送する手間を踏むことになってしまう。
この問題は、仮想ルータなどを使いルーティングの設定をするか、ルーティングモードからブリッヂモードへ変更することにより解決可能であるが、ルーティングモードによってリモートアクセスVPNと家庭内LANのネットワークをを別ける事で無駄なパケットを家庭内LANに転送せず、セキュリティーを確保できるというのは、OpenVPNの利点の一つでもある。その為、手を付けることが憚られ不便な状況が続いていたという意味で、私自身における心の迷いの問題でもある。
欲張りポインツ2.Android端末ではroot化する必要があり、使用端末が限られてしまう。
OpenVPNは、Windowsはもとより、UNIXやLinuxなど、多くのプラットフォームで動作する。当然の如く今流行のAndroidにも移植されており、インストールすることで立派に動作させることが可能である。私も、ノートPCからのアクセスとは別に、Android端末にOpenVPNとリモートデスクトップアプリを入れて、Android端末で自宅と同じ作業を行うと言った使い方をしていた。小さい筐体は電車の中などで手軽に取り出せるため場所を選ばず便利なのだ。
しかし、OpenVPNは仮想NICを使用するため、insmodコマンドでカーネルモジュールを追加する必要があり、その為にはroot権限が必要だ。Android端末はセキュリティーの観点から、端末購入者でも最上位権限であるrootが使えない仕様になっており、その上、システム部分のファイルシステムには書き込みが出来ない仕様になっている。その為、Android端末でOpenVPNを使うためには、端末のセキュリティーホールをついてroot権限を奪取し(端末のroot化)、システム関連のファイルシステムに書き込み可能にするためにセキュリティー機能をオフにする(S-OFF)作業をせねばならない。作業自体は、海外のAndroid関連のフォーラム(http://forum.xda-developers.com/)などを覗けば、世界の強者たちが端末ごとに試行錯誤を繰り返し、得られた手順を公開してくれているので、それを頼れば比較的簡単に行う事が出来る。root化に成功すれば、多少つまづくかもしれないがOpenVPNの導入自体はさほど困難ではない。OpenVPNのモジュールを手に入れ端末内に配置すれば、AndroidマーケットにOpenVPN設定用のアプリを見つける事が出来たりもする。root化の醍醐味として、中身のROMをごっそりカスタムROMに焼き直してしまったりも出来てなかなか楽しい。有名どころのカスタムROMであるCyanogenModを用いれば、OpenVPNが組み込まれており、Androidのネットワーク設定の項目からVPN設定へ進むと、PPTPやL2TPなどのプロトコルと並んでOpenVPNと言う項目まで用意されている。もちろんこれらのroot化やS-OFF、ロムの焼き直し作業を行った端末はメーカーや通信キャリアのサポート対象外となるやんちゃな行為である。
私は自分で端末をクラックするほどの腕前は無いので、先人たちの公開してくれた手順に頼る事に成るのだが、そうなると手順が公開されている端末しか選択肢が無くなってしまう。root化の手順が公開されている端末は基本的に海外端末なので、国内だけで流通している端末ではなかなかOpenVPNの導入は難しい。シャープ製の端末をroot化するアプリなどが出回っていたが、root化すると動作がひどく不安定になるとの評判を聞いた。国内端末はAndroidにとことんまで手を加えているのだ。その為Googleから新しいバージョンのAndroidが発表されても、バージョンアップが見送られるなどの憂き目にあう。しかし、おサイフケータイや赤外線など、国内端末にしかない魅力も多く、海外端末をクラックして使うと言う日陰生活からの脱却を、私は夢見るようになったのである。海外端末も、国産端末もひっくるめて選択の対象であった方が楽しいではないか。
この2点の問題は、VPN機能を持ったルータを家庭内LANに導入することによって綺麗に解決される。
1つ目の問題は、家庭内LANに設置されたサーバーに向かってVPNをつなぐのではなく、ネットワーク機器であるルータに直接VPNつなぎに行くことによって、家庭内LANと同じセグメントのIPアドレスを持った、ルータの下にぶら下がった端末と同様にふるまう事が出来るようにる事で解決される。特定のサーバを介さなくても、直接LAN内の機器にアクセスすることが可能になるのだ。
2つ目の問題は、Androidが標準で対応している各種VPNプロトコルを使用することで解決される。海外の猛者たちに攻略されroot化されていない端末でも、立派にVPNを張る事が出来、とてもスマートだ。
そこで私が出先からVPNを張るルーターとして選んだのがYAMAHA RTX810と言う事に成るのだが、長くなってしまったので、その決定に至るまでの経緯は、次回詳しく述べる事にする。