自宅IPを固定せず、Raspberry Piで自宅VPNを実現する
はじめに
個人的な話ですが、アイルランドに引っ越しました。
しかしdアニメやabemaなど、軒並みの動画サブスクサービスは日本国内からのアクセスに制限されています。(最近ではYahooまでも)
引きこもりには動画がないとやっていけないので、自宅VPNを構築し解決します。
VPN構成
このQiita記事の丸パクリです。 大変参考にさせて頂きました。
この記事と違う点は、自宅サーバがRapberry Piになっただけです。
構築
クラウド側
インスタンス作成
AWSのEC2を用います。 t2.microで十分だと思います。
以下の穴を開けたセキュリティグループを作成し、EC2インスタンスにアタッチします。
22/tcp
: ssh用 (本当はSSMでアクセスするべき)500/udp
4500/udp
1701/tcp
5555/tcp
sshを使う方は、用事が済んだら22番を塞いておきましょう。
常時起動させる予定の方はElastic IPを取得して、IPを固定しても良いですね。
docker, docker-composeインストール
以下の記事のとおりです。
https://www.cyberciti.biz/faq/how-to-install-docker-on-amazon-linux-2/
- docker
sudo yum update sudo yum install docker sudo systemctl enable docker.service sudo systemctl start docker.service
- docker compose
wget https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) sudo mv docker-compose-$(uname -s)-$(uname -m) /usr/local/bin/docker-compose sudo chmod -v +x /usr/local/bin/docker-compose
実行
Qiita記事のdocker-compose.ymlを作成し実行します。
docker-compose up -d
自宅ネットワーク側(ラズパイ側)
以下の記事を参考に、softether vpn bridgeをインストールしていきます。 この記事はvpn serverをインストールしている点に注意してください。
VPN server construction with Raspberry Pi
ビルドーツール
makeするためのツール群です。既にmakeできる環境があったので未検証です。
sudo apt install iptables gcc make wget gcc-multilib
softether bridge
以下の設定でダウンロードリンクを取得します。 ラズパイのCPUのアーキテクチャにあわせて下さい。(3B+の場合)
- DL
wget https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.38-9760-rtm/softether-vpnbridge-v4.38-9760-rtm-2021.08.17-linux-arm_eabi-32bit.tar.gz
- 解凍
tar xfv https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.38-9760-rtm/softether-vpnbridge-v4.38-9760-rtm-2021.08.17-linux-arm_eabi-32bit.tar.gz
- make
cd vpnbridge make
- bridgeのフォルダごと移動
sudo mv vpnbridge /usr/local/.
Setting
bridgeの設定を一括で行ってくれるシェルスクリプトを拾ってきます。 もとのQiita記事のDockerのリポジトリです。
softether-bridge/entrypoint.sh at main · sammrai/softether-bridge · GitHub
以下3つの環境変数を埋め込むか、手動書き換えします。
${VPN_SERVER} ${USERNAME} ${PASSWORD}
- シェルスクリプトを移動
sudo mv entrypoint.sh /usr/local/vpnbridge/.
実行
sudo /usr/local/vpnbridge/entrypoint.sh
これにてVPNが開通しました。
それぞれスマホやPCのL2TP over IPSec
の設定で接続できます。
接続先はEC2のIPアドレスです。
停止
sudo /usr/local/vpnbridge/vpnbridge stop
自動起動
ラズパイが再起動した際に、自動でVPNが起動するように設定します。
- 以下のserviceファイルを作成
my_vpn.service
[Unit] Description=My VPN service [Service] Type=idle User={実行するusername} ExecStart=/usr/local/vpnbridge/entrypoint.sh ExecStop=/usr/local/vpnbridge/vpnbridge stop Restart=on-failure [Install] WantedBy=default.target
Type=idle
は一番最後に起動するためです。
- systemdでサービスを最後に起動する方法
Serviceの書き方はこちらの記事を参考にしました。 - SystemdでLinuxのスクリプトを起動時に実行する | 学生たちの技術ブログ
- 移動
/etc/systemd/system/
以下がユーザ管理用っぽいので、serviceファイルを移動させます。
sudo mv my_vpn.service /etc/systemd/system/.
- 実行権限付与
sudo chmod +x /etc/systemd/system/my_vpn.service
- 有効化
sudo systemctl enable my_vpn.service
これにてVPNが自動起動するようになりました。(なぜかrootで実行するとうまくいかなかったので、ServiceファイルでUser=
を指定しています。)
一応以下のコマンドで確認します。
sudo systemctl status my_vpn.service