Tailscale で自宅 LAN を VPN 化する — 5 分で外出先から Raspberry Pi に SSH
新幹線の中で自宅の Raspberry Pi 5 に SSH したくなった。グローバル IP は固定じゃないし、ポート開放はもう何年もやっていない。ルーターの設定画面に入って UPnP を切ったのが 2 年前。その時の自分が偉い。
結論から言うと、Tailscale を入れて 5 分で繋がった。インストール 2 分、ログイン 1 分、SSH 確認 30 秒。残りの時間は車内販売のコーヒーを買いに行っていた。家庭内 LAN を WireGuard ベースの VPN で繋ぐ Tailscale は、自宅サーバー運用者にとって「もっと早く入れておけばよかった」枠の代表格だ。
本記事は Tailscale 1.78 系(2026 年 4 月時点の最新)で動作確認している。Linux クライアントは Raspberry Pi OS bookworm、コントロールプレーンは公式の SaaS を使用。
なぜ Tailscale なのか — 自前 WireGuard との比較
「VPN なら WireGuard を直接立てればいいじゃん」という意見はある。実際それで動く。だが、自前で WireGuard を運用すると以下の作業が漏れなく付いてくる。
- 各端末に鍵ペアを生成して配布
- サーバー側の
peersセクションを 1 台増えるたびに編集 - NAT 越えのために UDP ポート開放(家庭内ルーターでは大体ハマる)
- クライアント側の
AllowedIPsを毎回計算
Tailscale はこれを全部やってくれる。WireGuard そのものは中で使われているので暗号化強度は同じ。違うのは「鍵交換と NAT 越えと ACL の管理を肩代わりしてくれる」ところ。要するに WireGuard の運用を業者に外注した感じになる。しかも 100 台までなら無料。
以前書いた Cloudflare Tunnel で自宅サーバーを公開する 記事と用途は似ているが、こちらは「公開するため」で Tailscale は「公開しないで自分だけ繋ぐため」に使う。住み分けはハッキリしている。
インストールから初回ログインまで(実測 5 分)
Raspberry Pi OS bookworm での手順。他の Debian 系も同じ。
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
2 行目を叩くとブラウザで開くべき URL が表示される。手元の PC で開いてログイン(Google や GitHub アカウントで OK)すると、その時点で Pi が tailnet に加入する。tailscale ip -4 を叩けば 100.x.x.x という CGNAT 帯のアドレスが割り当てられているはずだ。
クライアント側、たとえば手元の MacBook にも同じく Tailscale を入れて同じアカウントでログインする。これで両者は同じ tailnet にいる。あとは普通に ssh trader@100.x.x.x で繋がる。ファイアウォール設定もポート開放も不要。これが体験として地味にすごい。
MagicDNS でホスト名アクセスにする
IP 直打ちは覚えにくい。管理画面(https://login.tailscale.com/admin/dns)で MagicDNS を有効化すると、デバイス名で名前解決される。
ssh trader@raspi-trader
# raspi-trader.tail-xxxxx.ts.net でも可
このホスト名は tailnet 内でしか引けないので、外に漏れる心配もない。短いし、覚えやすいし、最高。
SSH を Tailscale 経由に固定する
外向きの SSH を完全に殺して Tailscale 経由のみにすると、攻撃面が一気に減る。Pi の /etc/ssh/sshd_config.d/tailscale.conf にこう書いた。
ListenAddress 100.64.0.0/10
PasswordAuthentication no
PermitRootLogin no
ListenAddress を Tailscale の CGNAT 帯に絞ることで、グローバル IP からの SSH を物理的に受け付けなくなる。設定後 sudo systemctl restart ssh。これで「ポートスキャンしてくる中国の IP からの SSH 試行」がログから消えた。journalctl で sshd ログを見る と本当にゼロ件になっていて気持ちいい。
もうひと押し、Tailscale が提供する Tailscale SSH(tailscale up --ssh)に置き換える手もある。これは sshd 自体を Tailscale 側で管理する仕組みで、鍵管理が ACL ベースになる。気になる人は試してほしい。自分は既存の sshd を残す方を選んだ。理由は、Tailscale が落ちた時のフォールバック手段を残しておきたかったから。
ACL とタグでアクセス制御
家族の iPhone も同じ tailnet に入れたいけど、家族から自分の Pi に SSH されたら困る。そういう時は ACL(Access Control List)を書く。Tailscale の管理画面で JSON を編集する。
{
"tagOwners": {
"tag:server": ["autogroup:admin"],
"tag:family": ["autogroup:admin"]
},
"acls": [
{ "action": "accept", "src": ["autogroup:admin"], "dst": ["*:*"] },
{ "action": "accept", "src": ["tag:family"], "dst": ["tag:server:80,443"] }
]
}
これで「自分(admin)はどこにでも行ける」「家族(tag:family)は tag:server の HTTP/HTTPS だけ叩ける」という分離ができる。Pi 側にタグを付けるには sudo tailscale up --advertise-tags=tag:server。
ちなみに、ACL は変更を保存した瞬間に全デバイスに反映される。Pi を再起動する必要はない。WireGuard 自前運用だと wg syncconf を叩いて回ることになるので、この差は大きい。
ハマったポイント 3 つ
1. 二重 NAT 環境で DERP リレーに落ちる問題
マンションのインターネット契約が CGNAT 配下だった時、Tailscale はピアツーピア接続を諦めて DERP リレー経由になる。tailscale netcheck で UPnP: false、PMP: false、PCP: false が並ぶとほぼ確定。実測で SSH のレイテンシが 80ms → 220ms に上がった。
解決策は 2 つあって、片方の端末を IPv6 で繋ぐとピアツーピアに戻る場合がある。もう一つは Tailscale Funnel(公開機能)や exit node を別 VPS に置く方法。後者が確実だが、追加コストが発生する。Raspberry Pi の自宅 VPN だけが目的なら、レイテンシが多少増えても DERP のままで実用上は問題なかった。
2. systemd-resolved との喧嘩
Pi で MagicDNS が引けない瞬間があって、原因は systemd-resolved が /etc/resolv.conf を上書きしていたこと。tailscale set --accept-dns=true を実行して、resolvectl status で Tailscale の DNS(100.100.100.100)が DNS Servers の先頭に来ていることを確認したら直った。Debian 系で resolved を使っている環境では割と踏みがちな罠。
3. cron / systemd timer から呼び出すと tailnet に届かない
これは自分の Claude Code を cron で動かす 環境で踏んだやつ。バッチ処理から別ホストの API を叩こうとしたら、名前解決が失敗した。原因は systemd ユニットの環境変数が空で、resolvectl の解決パスが効いていなかった。Environment=PATH=/usr/sbin:/usr/bin:/sbin:/bin を追加し、ExecStart でフルパス指定にしたら通った。地味だが timer 移行勢は気をつけてほしい。
こういう人には刺さる
最後に、誰に Tailscale を勧めるかを書いておく。
- 家に Raspberry Pi や NAS があって、外から触りたい人
- VPN を立てたいけどルーターの設定で消耗したくない人
- 会社支給の VPN クライアントが遅すぎて自前で何とかしたい人
- 家族や友人と特定のサービスだけ共有したい人
逆に、不特定多数に Web サイトを公開したいなら Cloudflare Tunnel を使うほうが合っている。Tailscale は「自分(と仲間)だけが入れる private network を作るツール」だ。Raspberry Pi 5 の自宅サーバー運用 Tips で書いた通り、家にサーバーを置く以上、外からのアクセス手段は遅かれ早かれ必要になる。Tailscale は、その問題に対する 2026 年時点の現実解だと思う。
ちなみに、自宅にハードウェアを置くのが難しい人は、最初の 1 台を VPS に置く選択肢もある。自分は試行錯誤の段階で お名前.com の高性能 VPS
を借りて Tailscale の exit node に使ってみたことがある。固定 IP が要る場面では便利だった。Pi に落ち着いてからは出番がないが、用途は分かれる。
セットアップで詰まった時は tailscale status と tailscale netcheck をまず叩く。これで原因の 8 割は当たりがつく。残り 2 割は、だいたい DNS。