IPv6接続に変更したことによって使えなくなったVPNをOpenVPNで使えるようにしたお話


IPv4 to IPv6

IPv6に対応するまでは、NTTからレンタルされているひかり電話対応ルータを使っていました。
そのルータはVPNにも対応していましたので、公衆無線LANを使うときなどによく利用していました。
しかし、今回IPv6に対応したことによって、従来のL2TPやPPTPといった接続ができなくなるため、今まで使っていたVPNは使えなくなります。


そこで、代替手段として考えていたOpenVPNを使った方式へと変更しました。
L2TPやPPTPはできないのに、なぜOpenVPNなら可能かというと、まずIPv6環境では外部公開できるポートに限りが出てきてしまいます。
L2TPやPPTPはポートが決まっているため、外部公開できるポートにうまくはまらないと使えません。
しかし都合良くそのポートが使えることも無いので使えなくなるわけです。
一方でOpenVPNならポートを自由に決められるため、限定されたポートに合わせることができます。
よって使うことができるのです。



ただし、ひかり電話対応ルータではOpenVPNは使えないので、OpenVPNサーバをどこかで動かさないといけません。
我が家にはQNAPのNASがあり、OpenVPNサーバとしても動作させることができるため、これを使います。

IPv6(IPoE)環境でQNAPを使ってOpenVPNサーバを使う方法は、以下のサイトが分かりやすいです。



こちらのサイトではmyQNnapCloudを使っていますが、もし使っていない場合は、自分でポート開放を行う必要があります。
その場合の方法は、
「http://ntt.setup:8888/t」のサイトの中にある「静的NAPT設定」を開き、以下のように設定します。


対象プロトコル:UDP
公開対象ポート:利用可能ポートの中からご自身で決めたポート
宛先アドレス :QNAPサーバのローカルIP
宛先ポート  :利用可能ポートの中からご自身で決めたポート(OpenVPNサーバに設定したポート)



そしてOpenVPNサーバで設定した「VPNクライアントIPルール」と内部で使っているローカルIP帯域が違う場合はルーティングを追加します。
同じ帯域にしてしまうとIPが被る恐れがあるので「VPNクライアントIPルール」はデフォルトのままにして、ルーティングを追加した方が良いです。


c.f.)
内部ネットワークが192.168.1.0/24の場合はOpenVPNはデフォルトの10.8.0.xにしておいてルーティングを追加
(内部ネットワークが10.8.0.0/24ならOpenVPNは別の帯域を割り当てる)


内部ルーティングの追加の方法は、以下のサイトの「内部ネットワークへルーティング」の項が分かりやすいです。



# vi /etc/init.d/vpn_openvpn.sh

server ${VPN_IP_POOL} 255.255.255.0
push "route 192.168.0.0 255.255.255.0"   ←ここを追加
${VPN_MANUAL_DNS}

ファイルを保存後、サービスを再起動します

/etc/init.d/vpn_openvpn.sh restart

追加する「push "route 192.168.0.0 255.255.255.0"」は自分の内部ネットワーク帯域に合わせてください。
このサイトの例だと内部ネットワークが192.168.0.0/24の場合ですので、自身のネットワークが192.168.1.0/24なら「192.168.1.0 255.255.255.0」になります。


これでサーバ側の設定は終了です。


QNAPのOpenVPNサーバの設定の下の方にあるボタンから証明書をダウンロードします。
ダウンロードし解凍すると以下の3つのファイルがダウンロードされます。


  • openvpn.ovpn
  • ca.crt
  • readme.txt

iPhoneやAndroidだとovpnのファイルしか使うことができないので、openvpn.ovpnの中にca.crtの内容をマージします。
その方法は、以下の通りです。


  1. ca.crtをテキストエディタで開いて全てコピー
  2. openvpn.ovpnを開いて、最下段へ1.でコピーした内容を追加
  3. 中段にある「ca ca.crt」を「#ca ca.crt」とコメントアウトするか削除
  4. 上書き保存

こんな感じになります。


...
#ca ca.crt
...
comp-lzo
<ca>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</ca>

次にクライアントです。
Windowsは未確認ですが、iPhone、Android、Macに関しては、先ほど作ったopenvpn.ovpnだけで動作可能ですので端末へopenvpn.ovpnを送ります。


iPhoneとAndroidで使用したアプリは「OpenVPN Connect」です。
しかし、ovpnファイルを読み込ませただけでは動きませんでした。

設定項目の中にある「AES-CBC Cipher Algorithm」にチェックを入れることで動作しました。
この項目は新しいOpenVPNサーバなら不要なのかもしれません。
もし動かない場合はここの項目にチェックを入れてみてください。


Macでは、「Tunnelblick」のアプリを利用しました。
こちらはovpnのファイルを読み込むだけでそのまま利用可能でした。


iPhone、Androidからの接続に戸惑いましたが、それ以外は特に問題は無かったです。


--
今までiPhoneはオンデマンドのプロファイルを使って自動接続していたのですが、OpenVPNでオンデマンドのプロファイルを作るのは大変そうです。
そこで、iPhoneの「ショートカット」アプリを使って、家以外のWifiに接続したらOpenVPNアプリを起動するようにしてみました。
まだ試していないのですが動いたら良いな…