TechQuant Blog

Tailscale で自宅 LAN を VPN 化する — 5 分で外出先から Raspberry Pi に SSH

8分で読める

新幹線の中で自宅の 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 netcheckUPnP: falsePMP: falsePCP: 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 statustailscale netcheck をまず叩く。これで原因の 8 割は当たりがつく。残り 2 割は、だいたい DNS。