【ポート開放不要】Raspberry Pi + Tailscaleで自宅VPNを構築する

※当サイトはアフィリエイト広告(Amazonアソシエイト含む)を利用しています。

プログラミング

Raspberry Piや自宅サーバーを運営していると、出先から自宅のネットワーク環境にアクセスしたいときが多々ある。具体的にはルーターの設定画面を開いたり、外部に公開していないサーバー(NASなど)にアクセスしたりといった用途だ。

そこで、今回の記事ではRaspberry PiとTailscaleを使用して、面倒なポート開放が不要なVPNを構築する手順を解説する。なお、本記事ではRaspberry Piを使用しているが、UbuntuやDebianなどの一般的なLinuxでも基本的に同じ手順で構築可能だ。

環境

  • Raspberry Pi 4B 4GB
    • Debian 12 (Bookworm)
    • Tailscale 1.92.5

Tailscaleのアカウント作成

Tailscale | Secure Connectivity for AI, IoT & Multi-Cloud
The connectivity platform for devs, IT, and security teams. Zero Trust identity-based access that deploys in minutes and...

公式サイトからアカウントを作成する。Googleアカウントなどで登録しよう。

Tailscaleのインストール

公式のスクリプト一発で入る。

curl -fsSL https://tailscale.com/install.sh | sh

IPフォワーディングの有効化

ラズパイをルーターのように振る舞わせるため、パケット転送を許可する。これを忘れると、VPNは繋がるがネットが見れない(外に出ていけない)。

# 設定ファイルの作成
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf

# 反映
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf

パフォーマンス設定(UDP GROの無効化)

tailscale upした際に、Warning: UDP GRO forwarding is suboptimally configured on eth0...という警告が出ることがある。

公式サイトの手順に従って最適化する。

sudo apt install ethtool -y
sudo ethtool -K eth0 rx-udp-gro-forwarding on rx-gro-list off

再起動しても設定が消えないようにsystemdに登録する。まずはファイルを作成。

sudo nano /etc/systemd/system/tailscale-ethtool.service

以下の内容を貼り付けたあと、保存して終了(Ctrl+0, Enter, Ctrl+X)。

[Unit]
Description=Tailscale UDP forwarding optimization
After=network-online.target

[Service]
Type=oneshot
ExecStart=/sbin/ethtool -K eth0 rx-udp-gro-forwarding on rx-gro-list off

[Install]
WantedBy=default.target

サービスを有効化して起動する。

sudo systemctl daemon-reload
sudo systemctl enable --now tailscale-ethtool.service

Tailscaleの起動

Exit NodeとSubnet Router、さらにSSH機能を有効化して起動する。192.168.x.0の部分については自宅の環境に合わせて変更すること。

sudo tailscale up --advertise-exit-node --advertise-routes=192.168.x.0/24 --ssh

コマンドを実行すると以下のような認証用URLが表示される。ブラウザでアクセスすることで認証が完了する。モダンなターミナルならCtrl+クリックでブラウザが開く。

ブラウザでの設定

Routing Settings

Tailscaleの管理画面でマシンを選択し、Routing SettingsのExit Nodeをクリックする。

Subnet routesとExit nodeにチェックを入れてSaveする。

Disable key expiry

セキュリティーキーの有効期限を無効化する。これを忘れると半年後に接続できなくなるので注意。

マシン一覧の右側にあるからDisable key expiryを選択する。

動作確認

スマホなどにもTailscaleアプリを入れ、動作を確認する。

Exit Nodeの切り替えは画面上部からできる。

  • Exit Nodeオン
    • すべての通信が自宅ラズパイ経由になる。
    • 当然IPアドレスも自宅プロバイダのものになる。
    • 確認くん」などで確認しよう。
  • Exit Nodeオフ
    • 通常のインターネットは直接通信(経由しない)。
    • 192.168.11.1など自宅LANへのアクセスだけVPN経由になる(Subnet Router機能)。

まとめ

ポート開放やDDNSの設定がいらず、簡単な設定だけでここまで高機能なVPN環境が構築できるに驚いた。出先から自宅LANへアクセスできるのはかなり便利なので、Raspberry Piを持っている方はぜひ構築してみてほしい。

コメント

タイトルとURLをコピーしました