安価にもてるのであればVPN環境がほしかった。VPNにはいろいろあれど、SoftEtherというのがいろんなプロトコルに対応していてかつ簡単に構築できそうだったので、さくらVPS上にVPNサーバを構築してみた、という話。
個人用途におけるVPNを持つ目的
- 公衆無線LAN等のネットワークを使いつつセキュアに通信したい
- 外出時に自宅のネットワークにセキュアにアクセスしたい(リモートデスクトップ、ファイルサーバ等)
- 拠点間をVPNでつなぎたい(自宅と実家等)
- 実家環境のメンテナンスの容易化
- (自宅よりも広い)実家にPCをおいてリモートデスクトップ
VPNを実現するために欲しいもの
- 24時間365日安定稼動できて外からアクセス可能なVPNサーバ
- 電気代、騒音、停電(ブレーカー断)、ポートフォワードとかめんどい・・・そこでVPS(月1000円以下)ですよ
- Raspberry pi (3Wくらい?)でVPNサーバとかはちょっと興味あるけど。。
- VPNサーバに参加可能なルータ
- PC等をひとつずつ設定するのは面倒、NWプリンタ等VPNクライアント機能がない機器もつなぎたい
- VPNクライアントの機能を持つルータは家庭用ではほとんどない、つまり高い
- dd-wrt 使って家庭用ルータをVPNクライアントにしよう(一番安い)
SoftEtherを使ってみる
- VPSにSoftEtherをインストール
- OpenVPN互換機能を有効にしてクライアントからはOpenVPNのクライアントとしてつなぐ
- このときdd-wrtでは圧縮がデフォルトでadaptiveに設定されているので注意
- クライアントのつなぎ方
- dd-wrt化したルータを用意
- とりあえず同じ仮想Hubに全部つなげる(同じセグメントに見せたい)
- ルータ以外の端末はtapでもtunでもあんまり関係ない模様
- Android, iPhoneからはtunでしかつながらないらしい
- Androidからつなぐ場合はOS標準のVPNよりも、OpenVPN Connectのほうが使い勝手が良い
- ルータはtapでつなぐ
- サンプルの設定とおなじになるようにdd-wrtに設定すればつながる。
- tapをvlanにつなぐ
- dd-wrtのdhcpサーバはオフにするのを忘れずに
- GUIの設定ツールはWindows専用
- Windows環境を持っていない場合はCUIのvpncmdだけでも十分設定可能
- 性能をちゃんと出そうとするとSecureNATはなんだかんだ使えなかったのでDHCPサーバ、DNSサーバをVPSにインストール、iptablesでNATを設定。
- 仮想HUBからtapデバイスを作成(これはVPS上で見える)、br0を手動で作成してvpnserverが起動した時に br0 と tap が接続されるように設定。ipアドレスは br0 に振る
- 仮想DHCPサーバはMACアドレスによる固定割り当てができない
- 仮想NATは性能が出ない
- iptablesの設定
- SNATとMASQUERADEが設定されてればOKっぽい。
- lineのビデオ通話もできたしハッピー
- dhcpdの設定
- OpenVPNクライアントになってるルータに接続した機器のMACアドレスはそのままDHCPサーバに見えるので、IP固定等は機器自体のMACアドレスで設定できる
- bindの設定
- VPSが参照しているDNSにforwardするよう設定
参考
更新履歴
- 2015年1月14日 – 表記を一部修正