はじめに
この記事は DENSO アドベントカレンダー 2025 の14日目の記事です。
この記事は、マンション共有回線などでVPN構築に困っている方、自宅IoT環境を整えたい方向けです。
電子工作が趣味で、日常のちょっとした不便を解決するIoTデバイスをESP32で作っています。
例えば以下のようなものを作っています。
-
猫の餌やり記録デバイス: 餌の蓋が開くと自動で記録され、餌のやり忘れや二重給餌を防止
-
3Dプリンター監視システム: 印刷の様子をストリーミング&タイムラプス動画を作成できる


餌やり記録デバイス うちの猫、よく餌をくれと鳴く
便利に使っているのですが、ローカルネットワーク内で動かすことしか考えていなかったため、いくつか不満が出てきました。
- データやログが保存・活用できていない
- 外出先から3Dプリンターの様子を確認できない
- デバイス同士の連携がやりづらい
そこで、自宅のサーバーやIoTデバイスに対して、外出先からも安全にアクセスできる環境が欲しくなりました。
やりたいこと
- Raspberry PiやIoT端末に外出先からも安全にアクセスしたい
- ただし、サーバーを直接インターネットに公開するのは怖い
- スマホやESP32からも簡単に接続できるようにしたい
サーバーを直接公開せずに外部からアクセスする方法として、VPNを使うことにしました。
早速、自宅でVPN環境を構築してみることにしました。
最初の挑戦:ルーターのVPN機能
メインで使っているルーターを確認したところ、OpenVPNサーバー機能が搭載されていました。
「これを使えば簡単にVPN環境が作れる!」
早速設定してみました。
- ルーターの管理画面でOpenVPNサーバーを有効化
- 証明書ファイルをエクスポート
- スマホにOpenVPNクライアントをインストール
- 外のネットワークから接続テスト
結果:つながらない
何度試しても、外のネットワークからVPNに接続できませんでした。
設定を見直しても原因がわからず、AIとトラブルシューティングを行ったところ、問題が判明しました。
原因:マンション共有回線の壁
まず、自分のグローバルIPを確認しました。
- ブラウザで https://ifconfig.me にアクセス
- ルーターの管理画面でWAN側IPを確認
すると、ルーターのWAN側IPがプライベートIPアドレス(192.168.x.x)になっていることがわかりました。
二重NAT環境だったことが判明
私の住んでいるマンションは、インターネット回線を共有契約しています。そのため、各部屋にはプライベートIPしか割り当てられません。
つまり:
- ポート開放ができない:上位ルーターの管理権限がない
- グローバルIPがない:外部から直接アクセスする手段がない
- ルーターのVPN機能が使えない:外部から自宅ルーターに到達できない
せっかくルーターにVPNサーバー機能があっても、二重NAT環境では意味がありませんでした。
インターネット
|
[マンション共有ルーター] ← グローバルIPはここ
|
192.168.x.x(プライベートIP)
|
[自宅ルーター] ← ここにはグローバルIPが来ない
|
[Raspberry Pi / ESP32]
Tailscaleとの出会い
インターネットの契約を変えたり、専用回線を引くことは避けたかったので、他の方法を探しました。
調べていくうちに、Tailscaleというサービスを見つけました。公式サイトを見てみると、まさに私が求めていたものでした。
Tailscaleとは
WireGuardベースのVPNサービスで、最大の特徴はNAT越えを自動で行ってくれること。
- ポート開放が不要
- 二重NAT環境でも動作
- 設定が簡単
- 無料枠で100台まで接続可能(個人利用には十分)
なぜ二重NAT環境でも動くのか
Tailscaleは**DERP(Designated Encrypted Relay for Packets)**という中継サーバーを使用します。
[Raspberry Pi] ----> [Tailscale DERP] <---- [外出先のスマホ]
↑ ↑ ↑
内側から外へ クラウド上の中継 内側から外へ
両方のデバイスが「内側から外へ」接続するため、NAT環境でも問題なく通信できます。
詳しい仕組みは理解しきれていませんが、「これなら動きそう」と思い、実際に試してみることにしました。
【2025/12/20 追記】UDPホールパンチングについて
コメントでご指摘いただき、改めて調べてみました。
上の図ではすべての通信がDERPサーバーを経由するように見えますが、実際にはUDPホールパンチングという技術でP2P接続を確立し、デバイス同士が直接通信します。
P2P接続確立の流れ:
- 両方のデバイスがTailscaleのサーバーに「内側から外へ」接続
- サーバーが仲介役となり、お互いのNAT情報(外部IP・ポート)を交換
- その情報を使って、NAT越えのP2P通信を確立
[Raspberry Pi] <======= P2P通信 =======> [外出先のスマホ]
(直接通信・低遅延)
DERPサーバーは主に接続確立時の仲介役であり、UDPホールパンチングが失敗した場合のみフォールバックとして実際の中継を行います。
コメントありがとうございました!
実際に構築してみた
使用環境
| 項目 | 内容 |
|---|---|
| サーバー | Raspberry Pi 4 |
| サーバーOS | Raspberry Pi OS |
| IoTデバイス | ESP32 |
| クライアント | Windows / macOS / iOS / Android |
1. Tailscaleのアカウント作成
まず、Tailscale公式サイトでアカウントを作成します。
- 「Get Started」をクリック
- Google、Microsoft、GitHubなどのアカウントでサインアップ
- ダッシュボードが表示されれば完了
アカウント作成は無料です。
2. Tailscaleのインストール
Raspberry Piで以下を実行します。
curl -fsSL https://tailscale.com/install.sh | sudo sh
インストール後、認証を行います。
sudo tailscale up
表示されたURLにブラウザでアクセスし、Googleアカウントなどで認証を完了させます。
ヘッドレス環境の場合
ブラウザがない環境では、事前に管理画面でAuth Keyを生成しておくと、以下のコマンドで認証できます。sudo tailscale up --authkey=tskey-auth-xxxxx
3. ファイアウォール設定(UFW)
セキュリティのため、Tailscaleネットワークからのみアクセスを許可します。
# UFWのインストール
sudo apt update
sudo apt install -y ufw
# Tailscaleネットワーク(100.64.0.0/10)からのみ許可
sudo ufw allow from 100.64.0.0/10 to any port 22 # SSH
# Webサーバーを使う場合(例:ポート3000)
sudo ufw allow from 100.64.0.0/10 to any port 3000
# ファイアウォールを有効化
sudo ufw enable
注意: UFWを有効化する前に、必要なポートの許可ルールを追加してください。後から追加し忘れると、Tailscale経由の通信がブロックされます。
4. クライアント側の設定
各クライアントにTailscaleをインストールし、同じアカウントでログインします。
- Windows/Mac: https://tailscale.com/download
- iOS/Android: 各アプリストアから
5. 動作確認
TailscaleのIPアドレスを確認します。
tailscale ip -4
# 例: 100.100.100.100
外出先からSSH接続してみます。
ssh user@100.100.100.100
無事に接続できました!
ハマったポイント
再起動時の自動起動
Raspberry Piを再起動した際にTailscaleが自動で起動するよう、以下を確認しておくと安心です。
sudo systemctl enable tailscaled
DNS設定のミス
Tailscale導入後、外部のインターネット(GoogleやYahooなど)に接続できなくなることがありました。
原因はTailscaleのDNS設定でした。以下の手順で解決できます。
- Tailscale管理画面にアクセス
- 「DNS」タブを開く
- 「Override local DNS」がオンになっている場合:
- オフにする、または
- 「Add nameserver」でパブリックDNS(例:
8.8.8.8や1.1.1.1)を追加
設定変更後、デバイス側でTailscaleを再接続すると反映されます。
使ってみての感想
非常に満足しています。
二重NAT環境という制約の中で、ここまで簡単にVPN環境を構築できるとは思いませんでした。
現在の活用方法
- ファイルサーバー: SambaをインストールしてNASとして利用。スマホで外出先からファイルにアクセスできる
- Webアプリサーバー: Raspberry Pi上で動かしているWebアプリに、外部から安全に接続
インターネットに直接公開せず、Tailscaleネットワーク経由でのみアクセスできるので、セキュリティ面でも安心です。
良かった点
- 設定が本当に簡単(数分で完了)
- 安定して動作する
- 無料枠で十分実用できる
- 部屋ごとに異なるWiFiルーターを使っていても、Tailscale経由で統一的にアクセスできる
未解決の課題
スマホで常にTailscaleを有効にしていると、一部のアプリが正常に動作しなくなることがあります。
必要なときだけTailscaleを有効にする運用でカバーしていますが、根本的な解決方法は見つかっていません。同じ問題に遭遇した方がいれば、ぜひ教えてください。
今後の展望
Tailscaleで安全なネットワーク環境が構築できたので、様々な自作デバイスを連携させたり、ログを貯め、解析することでさらなる利便性を追求したいと考えています。
まとめ
マンション共有回線の二重NAT環境で、ルーターのVPN機能が使えず困っていましたが、Tailscaleのおかげで解決できました。
- ポート開放なしでVPN環境を構築
- 二重NAT環境でも問題なく動作
- 設定が簡単で、すぐに使い始められる
同じ環境で困っている方、IoTデバイスのネットワーク環境を整えたい方の参考になれば幸いです。