はじめに
これまでのシリーズでは、Node-REDやHome Assistantはすべて自宅のLAN内で完結していました。ただ実際に使い始めると、「外出先からもダッシュボードを見たい」「今、家のesp32ioの状態がどうなっているか確認したい」というシーンが必ず出てきます。
ここで真っ先に思い浮かぶのが「ルーターのポート開放」や「DDNS」ですが、これらは設定がやや面倒なうえ、一度開放すると常にインターネットからの攻撃対象になり続けるというリスクも背負うことになります。
ここで使えるのがTailscaleです。WireGuardという暗号化技術をベースにしたメッシュ型のVPNで、ポートを一切開放せずに、安全に自宅のRaspberry Piへアクセスできるようになります。
この記事でやること
- Tailscaleの仕組み(認証・経路・スマート家電やIoTデバイス)を先に理解する
- Raspberry PiにTailscaleを導入
- スマホ/ノートPCなど外部端末からRaspberry Piに接続確認
- Node-RED(1880/ui)・Home Assistant(8123)など既存サービスに外出先からアクセス
- (参考)ACL(アクセス制御)で「誰が何にアクセスできるか」を絞る方法にも触れる
使用機材・環境
| 項目 | 内容 |
|---|---|
| サーバ | Raspberry Pi 4B 8GB(Node-RED/Mosquitto/Home Assistant稼働中) ※環境構築方法はこちら |
| VPNサービス | Tailscale(無料プラン) |
| 外部端末 | iPhone 15 / Windows 11 Home + モバイル回線 ※PC検証時はテザリングにて接続 |
| 既存サービス | Node-RED(:1880)、Home Assistant(:8123)、Mosquitto(:1883) |
1. まずTailscaleの仕組みを理解する
Tailscaleを理解している方は2章まで読み飛ばしてください。
そもそもTailscaleって何をしてくれるもの?
一言でいうと、「自分のデバイスだけが入れる、鍵のかかった専用の道」を勝手に作ってくれるサービスです。
外出先のスマホから自宅のRaspberry Piに繋ぎたいとき、本来はルーターの設定をいじったり(ポート開放)、難しいVPNサーバーを自分で立てたりする必要がありました。Tailscaleを使うと、そのへんの面倒な作業をほぼ全部おまかせできます。
ステップ1:デバイスの身分証明(Tailnetへの参加)
sudo tailscale upを実行すると、認証用のURLが表示されます。これをブラウザで開いて、普段使っているGoogle/Microsoft/GitHubアカウントなどでログインします。
これは「このデバイスは自分のものです」と証明する作業です。一度証明されれば、そのデバイスは以後、専用ネットワーク(Tailnet)のメンバーとして扱われます。
この裏側では、デバイスごとに暗号の鍵ペア(WireGuardの鍵)が自動で作られます。Tailscale社のサーバーは、この鍵の情報を仲介するだけで、実際の通信内容(Node-REDの画面データなど)には一切触れません。
ステップ2:通信そのものの暗号化(WireGuard)
身分証明が済んだデバイス同士は、基本的にはWireGuardという技術で直接つながります。Tailscale社のサーバーを経由せず、スマホとRaspberry Piが1対1でトンネルを作るイメージです。
「自宅に入り込む」わけではない
従来のVPNは「VPNサーバーという1つの窓口を通って、社内ネットワークの中に入る」イメージでした。
Tailscaleはこれと発想が違います。それぞれのデバイスが個別にTailscale社と連絡を取り、認証済みデバイス同士だけで新しい仮想ネットワークを組み上げる、という形です。「外から自宅LANに侵入する」のではなく、「自宅LANの中にいるRaspberry Piと、外にいるスマホが、お互いを直接見つけて手を繋ぐ」ようなイメージだと理解しやすくなります。
自宅LAN(192.168.x.xのアドレス)は今まで通り物理的なネットワークとして存在し続けます。それとは別に、Tailnet(100.x.y.zのアドレス)という仮想ネットワークが上に重なる形です。本記事のRaspberry Piはこの両方に足を突っ込むことになるので、Tailnet側から見ると「自宅LANへの入り口」のような役割を果たします。
アカウントのセキュリティについて
Tailscaleのログインに使うアカウント(Google/Microsoft/GitHubなど)は、いわばTailnet全体の合鍵です。このアカウントが乗っ取られると、繋がっている全デバイスにアクセスされてしまいます。セキュリティを重視する方は、そのアカウント自体に2段階認証(2FA)を有効にしておくことをおすすめします。
自宅にいる時はどうなる?
「自宅の中でTailscale IPを使ったら、わざわざインターネットを経由して遠回りするのでは?」という疑問が浮かぶかもしれませんが、その心配は不要です。
Tailscaleは2台が同じLAN内にいることを自動で検知し、インターネットを経由せずLAN内で直接つないでくれます。つまり、どこにいるか気にせず同じIPアドレス(100.x.y.z)を使うだけで、Tailscaleが裏側で一番効率のいい経路を勝手に選んでくれるということです。
| アクセス元 | 使うIP | 実際の経路 |
|---|---|---|
| 自宅LAN内 | 192.168.x.x | いつも通りの直接LAN通信 |
| 自宅LAN内 | 100.x.y.z | Tailscale経由の表示だが、実体はLAN内で直接通信(遠回りしない) |
| 外出先 | 100.x.y.z | Tailscale経由でインターネットを越えて直接接続 |
つまり自宅にいても外出先にいても、Tailscale IPさえ使っておけば常に同じ操作感になります。ブックマークやダッシュボードのURLをTailscale IPで統一しておくと、「今どこにいるか」を意識せずアクセスできるのが実用面での大きなメリットです。
注意点:LAN内で開いてるポートは全部見えてしまう
Tailscaleを導入した端末は、その端末が受け付けているポート(サービス)がTailscale IP経由で全部アクセス可能になります。ファイル共有やリモートデスクトップの機能なども例外ではありません。
ただし、Tailscaleが道を作っても、OS自体のファイアウォールがブロックしていれば通れません。特に次のケースでつまずきやすいので覚えておいてください。
- Windows:Windows Defender ファイアウォールが、Tailscaleの通信を「パブリックネットワーク(見知らぬネットワーク扱い)」と判定し、着信をブロックしてしまうことがあります。ファイアウォールの設定でこのネットワークを「プライベート」に変更するか、該当ポートの受信を個別に許可する必要があります
- iOS/iPadOS:アプリからすると、Tailscale経由の通信も「ローカルネットワークへのアクセス」として扱われることがあり、初回アクセス時に許可を求めるダイアログが出ることがあります(その場合は「許可」を選んでください)
結局どのデバイスに入れればいい?
家にあるデバイス全部にTailscaleを入れる必要はありません。Tailscaleは「繋ぎたい側」と「繋がれたい側」の両方に入っていて初めて意味を持ちます。
たとえば自宅のデスクトップPCに入れる意味があるのは、次のようなケースだけです。
- 外出先からそのデスクトップに繋ぎたい(リモートデスクトップ、ファイルアクセスなど)
- そのデスクトップを踏み台(Exit Node)にしたい(出先の不安なフリーWi-Fiから、自宅回線を経由してインターネットに出る使い方)
逆に「Raspberry Piに繋ぎたいだけ」なら、繋ぐ側(スマホやノートPC)とRaspberry Piの2台だけがTailnetに入っていれば十分です。家にある他のデバイス全部に入れる必要はありません。判断基準はシンプルで、**「このデバイスは、外から誰かに繋いでほしいか?それとも外の何かに自分から繋ぎたいか?」**を考えればOKです。
無料プランでどこまで使える?
2026年8月現在、以下の3点だけ覚えておけば十分です。
- 1つのTailnet(自分専用のネットワーク)につき、無料ユーザーは6人まで参加できます
- 「ユーザーデバイス」(個人アカウントに紐づく普通の端末:PC・スマホ・Raspberry Piなど)は、台数の上限なく無料で登録できます。
- 台数制限がかかるのは「タグ付きリソース」(個人用ではなく会社のインフラなどとして管理するために、ACLで
tag:〇〇というラベルを付けたデバイス)だけです
つまり本記事のように、自分のアカウントでスマホ・PC・Raspberry Piを登録するだけの使い方であれば、実質的にデバイス数を気にする必要はありません。「タグ」という概念は6章のACLの話で少しだけ登場しますが、基本の使い方では今は気にしなくて大丈夫です。
2. Raspberry PiにTailscaleを導入
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
Raspberry PiにSSHなどでログインして上のコマンドを実行すると、まずTailscale本体がインストールされ(1行目)、続けて認証用のURLが表示されます(2行目)。このURLをブラウザで開いて、Google/Microsoft/GitHubなどのアカウントでログインします。
ログイン後、以下の画面でConnectをクリックするとRaspberry Piが自分のTailnetに参加します。
ログインが終わると、Tailscaleの管理コンソール(Web上のダッシュボード)にRaspberry Piがデバイスの一覧として表示されるようになります。
ここで割り当てられたTailscale IP(100.x.y.zの形式)は、以下のコマンドでいつでも確認できます。
tailscale ip -4
確認すること:
-
tailscale statusでデバイスがオンライン表示されるか - 管理コンソールにRaspberry Piが表示されるか
- 割り当てられたTailscale IPをメモ
3. 外部端末(スマホ/PC)にもTailscaleを導入
Raspberry Pi側の準備ができたら、次は繋ぐ側の端末にもTailscaleを入れます。スマホの場合はApp Store(iPhone)やGoogle Play(Android)からTailscaleアプリをインストールし、Raspberry Piの時と同じアカウントでログインします。PCの場合はTailscaleの公式サイトからクライアントをダウンロードし、同様にログインします。
ログイン後、Connectすると以下の様に一覧にデバイスが表示されます。
これで、Raspberry Piと外部端末が同じTailnet(仮想ネットワーク)のメンバーとして揃ったことになります。
確認すること:
- 外出先を想定してWi-Fiを切ってモバイル回線で接続テスト
-
tailscale statusで相互に見えるか確認
4. スマート家電やIoTデバイスには直接は届かない
ここで一つ、混乱しやすいポイントを整理しておきます。スマートプラグやセンサーなどのIoTデバイス自体には、多くの場合Tailscaleクライアントをインストールできないため、Tailnetの一員にはなれません。ただ、本シリーズの構成では、それで困ることはありません。
IoTデバイスの制御は「Node-RED/Home Assistant → Mosquitto(Raspberry Pi) → IoTデバイス」という経路を通っています。つまりRaspberry PiさえTailnetに参加していれば、そこから先はいつも通りのLAN内通信でIoTデバイスまで届くため、間接的に操作できます。
5. 外部端末からRaspberry Piへの接続確認
確認はブラウザでhttp://<Tailscale IP>:1880にアクセスするだけです。外出先(モバイル回線)からNode-REDのエディタが表示されれば成功です。同じ要領でhttp://<Tailscale IP>:8123にアクセスし、Home Assistantも見えるか確認します。
もし繋がらない場合は、1章で紹介したOS側ファイアウォールの設定が原因になっている可能性があるので、そちらも見直してみてください。
- PCをモバイル回線のテザリングで接続し、Node-REDに繋がった画面
- モバイル回線でスマホからHome Assistantに接続した画面
※Home Assistantアプリを使用している場合は以下の外部URLにTailscaleのIPアドレスを入力します。
6. (参考)ACL(アクセス制御)を設定する
デフォルトでは、同じTailnetに参加しているデバイス同士は互いにフルアクセスできます。個人用途で自分の端末だけを繋いでいる範囲であれば、これで特に困ることはありません。
ただ、「特定の端末からしか特定のポートに繋がせない」という制御をしたくなった場合は、Access controls⇒JSON editorからACLを設定することで絞り込むことも可能です。本記事ではここまでの範囲では設定していませんが、参考までにやり方だけ紹介しておきます。
管理コンソールを開くと、デフォルトで以下のような「全員が全員に全ポートアクセス可能」というルールが最初から入っています。制限をかける場合は、まずこの行をコメントアウトするところから始めます。
"grants": [
// Allow all connections.
// {"src": ["*"], "dst": ["*"], "ip": ["*"]},
],
タグを使わないシンプルな例だと、自分のアカウントに紐づくメンバー端末同士に限定して、Raspberry Piの1880番・8123番ポートだけを許可する、といった書き方になります。
// grants設定例1: タグなし、自分のメンバー端末からのみ許可
{
"grants": [
{
"src": ["autogroup:member"],
"dst": ["100.x.y.z"],
"ip": ["tcp:1880,8123"]
}
]
}
ここで出てくるautogroup:memberは、「自分のTailnetに参加している通常のメンバー端末すべて」を指すキーワードです。1章で「タグは基本使わなくていい」と説明した内容と矛盾しないシンプルな書き方になっています。dstに接続先(Raspberry PiのIP)、ipに許可するプロトコルとポート番号を指定する形です。
さらに絞り込みたい場合(例えば「自分のスマホからだけ」)は、Adminコンソールの「Machines」タブでRaspberry Piにtag:home-serverのようなタグを付け、送信元も特定のデバイス名で指定する形にします。タグ付けは設定エディタ内のtagOwnersで誰がそのタグを付けられるかも定義する必要があり、少し手順が増えるため、ここでは概要だけ紹介します。興味があれば公式ドキュメントを参照してみてください。
// grants設定例2(発展): タグ付きリソースに絞る場合
{
"tagOwners": {
"tag:home-server": ["autogroup:admin"]
},
"grants": [
{
"src": ["autogroup:member"],
"dst": ["tag:home-server"],
"ip": ["tcp:1880,8123"]
}
]
}
まとめ
ここまでの手順で、ポート開放やDDNSを使わずに、外出先から自宅のNode-REDやHome Assistantへ安全にアクセスできるようになりました。通信はWireGuardベースで暗号化されており、ルーターの設定は一切変更していません。より厳密にアクセスを絞りたい場合は、6章で紹介したACL(アクセス制御)を使うことで、さらに安全な構成にすることもできます。
参考リンク
- Tailscale公式: https://tailscale.com/
- 普段の開発内容(ハブ記事): https://qiita.com/Noritama-Lab/items/4532265ec6197ea5deee








