クラウドエンジニアのノート

情報技術系全般,自分用メモを公開してます。

自宅IPを固定せず、Raspberry Piで自宅VPNを実現する

はじめに

個人的な話ですが、アイルランドに引っ越しました。

しかしdアニメやabemaなど、軒並みの動画サブスクサービスは日本国内からのアクセスに制限されています。(最近ではYahooまでも)

引きこもりには動画がないとやっていけないので、自宅VPNを構築し解決します。

VPN構成

このQiita記事の丸パクリです。 大変参考にさせて頂きました。

qiita.com

この記事と違う点は、自宅サーバが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+の場合)

softether

  • 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