こんにちは。Natsuです。最近はクックパッドでインターンシップをする傍ら、引っ越し準備を進めています。
さて、海外に引っ越すにあたって、実家のネットワークを中継して日本のサービスにアクセスするという規約違反をしたかったので、ラズパイ(armv7)で何とかVPNを立てました。
注意:今回は、armv8だとサポートが明記されていないDocker imageを使いました。
選択肢
- L2TP/IPSec
- ほとんどのOSで標準に接続できる
- UDPを使ってネットワーク層で通信している
- 速度が安定する
- PPTP
- 平分で通信するため選択肢に入れるべきでもなかった
- OpenVPN
- セキュリティは充実しておりLinuxから繋ぎやすいが、その他のOSからの接続設定が面倒臭い
- その他、WireGuardなど
- 検討してない
ということで、L2TP/IPSecを導入することにしました。
基本設定
- ソフトウェアをアップデートする
- ユーザ名、パスワードを変える
- ファイアーウォールを設定する
- 固定IPにする
省略します。
あと、Dockerを使うのでDockerも入れておきます。
ipsec-vpn-server
IPSec VPNサーバーを立てるための便利なスクリプトをDocker化したプロジェクトがあります。READMEに書いてある通り、イメージを引っ張ってきて実行するだけでした。
$ docker pull hwdsl2/ipsec-vpn-server
$ docker run \
--name ipsec-vpn-server \
--restart=always \
-v ikev2-vpn-data:/etc/ipsec.d \
-p 500:500/udp \
-p 4500:4500/udp \
-d --privileged \
hwdsl2/ipsec-vpn-server
ネットワークのポート転送設定
ルーターの管理画面からポート500, 4500を解放します。
例:グローバルの500, 4500を192.168.x.x(ラズパイの固定IP)の500, 4500にマッピングします。
ファイアーウォールの許可設定
ラズパイではufwを使っているので、500と4500のポートを許可しました。
$ sudo ufw limit 500/udp
$ sudo ufw limit 4500/udp
接続情報の確認
$ docker logs ipsec-vpn-server
ログを通して接続情報を確認できます。L2TP/IPSec接続をするには、サーバーIP、PSK(事前共有鍵)とユーザーのログイン、パスワードが必要です。
注意!!!!!:家庭のネットワーク環境でGlobal IP Addressが固定になっていない場合(マンションなど)、Dynamic DNS (DNNS)を設定する必要があります!!!(ここでは説明省略)
接続テスト
スマホでWifiをOFFにして、接続テストをしました。