現状のVPN環境はヤマハルーター「NVR500」のL2TP/IPsecですが他のVPN環境も検証>Tailscale(WireGuardによる高速VPN)の接続先(サーバー側subnet router機能)をLinuxのDocker環境で動かしてみた(クライアントはWindows 11)

わが家のVPN環境は
YAMAHAの神アップデートによりヤマハルーター「NVR500」がL2TP/IPsecによるVPNサーバーに対応したのでiPhone 6でVPN設定して接続(2017年11月21日 (火曜日))
【ぷらら】VPN(L2TP/IPsec)サーバー機能使って接続してるからPPPoE(IPv4)接続解除してIPv6(IPoE)に移行はできないなぁと思ってたら両方同時使用(併用)すればいいだけだった、爆速になった【NVR500】(2024年12月 8日(日曜日))
ヤマハルーター NVR500でL2TP/IPsecによるVPN接続、Windows 10で接続しようとするとエラーで失敗したので対応(2018年08月29日 (水曜日))
でございます。

VPNの環境は違うものの、VPNの穴をついてのランサムウェア等で被害が受けるところが多い昨今ではございます(パスワードが稚拙だったとかゲスト用アカウントがOnだったとかそういうのもあるのでそれはVPNがどうとかいうより運用がまずやばい状態なのですが)。そんな中、



というようなツイートを見ました。確かにインターネットの大海原に穴をあけておくのはあまりよろしい事ではないですわね。でTailscale(テイルスケール)はなんぞ?とAIに聞くと
「Tailscale(テイルスケール)は、物理的な場所やネットワーク環境(NAT、ファイアウォール)を問わず、デバイス間で安全かつ高速なプライベートネットワーク(VPN)を簡単に構築できるメッシュ型VPNサービスです。最新のVPNプロトコル「WireGuard」を採用し、設定の手間を極限まで減らした「ゼロコンフィグ」で、個人から企業まで無料で利用できるのが特徴です」
だそうな。
Tailscale | Secure Connectivity for AI, IoT & Multi-Cloud
なるほど。

現状だと一応、NVR500のファームウェアは最新にしており(まだサポート継続中)、今の所は問題ないけれどもかなり長い間使っているルーターで、サポート終了も予測され次のVPN接続の候補に検証してみてもいいかな?と。今後もルーター設定とかやるかわからんし、その場合なら別にヤマハルーターや業務用ルーター等での検証も必要ないわけだし、そうなったら速度や安定性があれば一般的なルーターにしてもいいわけで、こういうサービスを利用してもいいのかな?と。あとはIPv4でいつまでオプションなしで接続できるか、というのもあるし。クロスパスのIPv4のIP付与プランとかだと料金は結構するよねぇ、固定IP1個ついてるのもあるけど。

Tailscaleは基本的には接続元(クライアント)、接続先(サーバー側)に専用ソフトを入れる必要があります。その前提だとソフトをインストールできないようなネットワーク周辺機器(例えばプリンタや専用ソフトがインストールできなようなNAS等)には外部から接続できない事になってしまいます。今と同じ使い方、例えば今はヤマハルーターのNVR500がVPNサーバーになっておりますのでこちらに接続するとほぼ、内側にいるのと同様にNASやネットワーク周辺機器にアクセスが出来ます。
でGrokに聞いてみると
Tailscaleでできることまとめ(subnet router機能を使う)
なるほど、私がやりたい事はsubnet router機能を使う事で今のNVR500のVPNと同じ事ができそうだ。サーバーにしているMac miniにソフトをインストールしてsubnet router機能でOnにすりゃいいかな・・・・まだあくまで検証だし、もっと気軽に・・・・・以前にいろいろ検証に使っていた
Intel Mac(x86)のmacOS 12のVirtualBOX(仮想環境)でLinux(CentOS 7)のインストールからサーバー環境構築(2022年11月08日 (火曜日))
Dockerで--mountしてたらそんなフラグ(オプション)はない、とエラー。yumで入れたCentOS 7のDockerのバージョンが古かった【なので最新?安定VerのDockerインストールした】(2023年02月04日 (土曜日))
LinuxのDocker環境使おう。
Using Tailscale with Docker · Tailscale Docs
公式にもサポートしているようだし。検証終えたら消すのも普通にインストールするよりかはゴミとか残らないだろうし。

まずはTailscaleのユーザー登録を行います。
Tailscale | Secure Connectivity for AI, IoT & Multi-Cloud
にアクセスし右上の「Get started - it's free!」でアカウント登録。
Tailscaleのポリシーとして自前でパスワード管理等はしない為、アカウント作成はメールアドレスとパスワードではなくGoogleやMicrosoft等のアカウントと連携する必要があります。何かしらのアカウントをTailscaleを関連づけると
Tailscaleの簡単なアンケート
・簡単なアンケートに答える


・最初のクライアントのソフトをダウンロードしインストール
最初のクライアントのソフトをダウンロードしインストール
の流れが続きソフトをインストールし起動すると認証が始まるので認証。
1台だけの認証だと管理画面まですすまないみたいで今回はLinuxのDocker環境でサーバー側を構築する予定なので画面下の
Already familiar with Tailscale? Skip this introduction
を押してスキップ。管理画面に到達出来ます。

DockerでTailscaleに設定するTailscale用Auth Keyを作成します。
管理画面(管理コンソール)で上の方のメニューから
Settings → Keys → Generate auth key
Tailscale用Auth Keyを作成
でTailscale用Auth Keyを作成します。この画面では設定の名前を決めます。オプションが3つ程ありますがOFFのままの方がセキュリティ的にヨサゲですかな、標準でそうなっていますが。そうするとAuth Keyが生成されます。

TailscaleのWebでの設定はひとまず終了。次にLinuxのDockerの方の設定。
Grokに聞いてみまして。Linux+DockerではまずDockerのホストになってるLinuxの設定で

# 一時的に有効化
sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -w net.ipv6.conf.all.forwarding=1 # IPv6も使うなら

# 永続化(おすすめ)
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

どちらかが必要らしいので永続化で設定。
次に所定のフォルダにdocker-compose.ymlを作成します。

version: "3.9"

services:
tailscale:
image: tailscale/tailscale:latest
container_name: tailscale-subnet
hostname: subnet-router-01 # 好きな名前(tailnet内で重複しないように)
environment:
- TS_AUTHKEY=tskey-auth-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # ← ここに貼る
- TS_STATE_DIR=/var/lib/tailscale # 状態永続化
- TS_USERSPACE=false # kernelモード推奨
- TS_ROUTES=192.168.10.0/24,10.0.50.0/24 # ← 広告したいサブネット(複数可、カンマ区切り)
- TS_EXTRA_ARGS=--advertise-routes=192.168.10.0/24,10.0.50.0/24 # 古い書き方でも可(互換用)←結果的にはこれはいらなかったです。
- TS_ACCEPT_DNS=false # ホストのDNSを壊したくない場合
cap_add:
- NET_ADMIN
- SYS_MODULE # たまに必要(tunモジュール用)
devices:
- /dev/net/tun:/dev/net/tun
volumes:
- tailscale-state:/var/lib/tailscale
- /dev/net/tun:/dev/net/tun
network_mode: host # ← これが超重要!(これがないとsubnet routerにならない)
restart: unless-stopped
# privileged: true # どうしても動かない場合だけ最後の手段で有効化(非推奨)

volumes:
tailscale-state:

のサンプルを例示されました。念のため、昔に読んでいた本やネットやAIで書いてある事の内容を理解。
私が変えるのは
・TS_AUTHKEY
・TS_ROUTES
の部分ですね。
これで
docker compose up -d
とします。起動はしたようですがログを見ていると認証に失敗しているようだ。またGrokに聞くと
2025年5月〜2026年現在、このエラーが多発している主な原因はTailscaleのバージョンアップ(特に1.84以降)で、環境変数や引数の重複/無効扱いが厳しくなったことです。


という事で古い変数を削除すりゃいいのかな?と
- TS_EXTRA_ARGS=--advertise-routes=192.168.10.0/24,10.0.50.0/24 # 古い書き方でも可(互換用)
の部分を削除し、一度Docker composeを停止しイメージを削除、再度
docker compose up -d
とするとエラーもなくTailscaleの管理画面のMachine一覧にDockerに設定したPC名が出てくるようになりました。
Tailscale管理画面のMachine一覧にDocker(Linux)でsubnet routerの環境が出てきた
これで設定は終わりではありません。
Done! your device can now connect form anywhere
「完了!デバイスがどこからでも接続できるようになりました。
Tailscaleネットワーク内のすべてのデバイスには、プライベートな100.x.y.z IPアドレスが割り当てられており、あなたがどこにいても接続できます。そして、すべてのプロトコルが動作します -- SSH、RDP、HTTP、Minecraft -- Tailscaleが起動している間は、好きなものを使用できます。
試してみましょう!デバイス間でpingを送信してください。xxx(クライアントPCの名前)のコマンドプロンプトから、このコマンドを実行してxxx(接続先(Docker Linux)の名前)にpingを送信します」
というようなメッセージが表示されこのDocker環境には接続出来ますが他のローカルネットワーク接続の機器には接続できません。
管理画面のマシン一覧からsubnet routerの機器の設定の一番右にある「・・・」から「Edit route settings」→「Subnet routes」
subnet routerの機器の設定の一番右にある「・・・」から「Edit route settings」→「Subnet routes」
で自分のサブネットが表示されてるはずなのでチェックをつけて保存して設定完了です。

さっそくWindows 11環境から接続してみました。

・SSH
・VNCによるリモートデスクトップ
・Windowsファイル共有
・PC TV Plusによるnasneへの接続(録画一覧表示、録画設定等、動画再生はスマホ回線だと接続が切れた)
・プリントアウト(iPhoneのAirPrintは不可、)
はできました。

ただしTailscaleでVPNに接続してもIPは接続先のものにはならないため(今回はpovo回線でテストしましたのでWebブラウザでの接続元IP表示したら.au-net.ne.jpでした。)、現在は一部サービスで特定のIPからしか接続を受け付けないものを使用しているのですがTailscaleではそれはできないわね。もしくはProxyサーバーもDockerで立ち上げて、Webブラウザはそこからインターネットにアクセスするようにすればいいのか?まあ今は検証なのでそこまでやる必要もないけれども。
-----------2026年2月19日 8時19分追記-----------------
Tailscale(WireGuardによる高速VPN)で接続元のIPではなく接続先のIPで外部のWebサイトにアクセスする際は「exit node」を使用する(2026年2月18日(水曜日))
これでいけました。

-----------2026年2月19日 8時19分追記ここまで-----------------

iPhone 15からも接続してみました。アプリをApp Storeからダウンロード・インストールし紐付けしたアカウントでログイン、VPNのプロファイルをインストールしますか?とか聞いてくるのでOKにして設定を終えるとiPhoneのiOSの標準のVPN設定画面にTailscaleの選択肢が出て来ました。
iPhone 15(iOS)のVPN接続画面にTailscaleが追加されました
iPhone 15(iOS)のVPN接続画面にTailscaleが追加されました、実際に接続
VPN接続するといつものヤマハルーター「NVR500」のL2TP/IPsecの時のようにVPN接続の表示が出て、同様の接続ができるようになりました。
・SMBによるファイル共有先へのアクセスOK
・IPベース指定のプリンタアプリによるプリンタからの印刷OK()(L2TP/IPsecの時と同様、AirPrintでの印刷は不可)
└★VPN(L2TP/IPsec)を使って外から内部のプリンタで印刷する【スマートフォン・タブレット(iPhone・Android)編】(2022年02月11日 (金曜日))を参照
・WebブラウサSafariでWebサイトにアクセスした際はPCの時と同じくVPN先のIPではなく接続元のIP(今回の場合だと.au-net.ne.jp)

という感じ。
Tailscaleの管理画面でSubnet routes(LinuxのDocker環境)、iPhone 15(iOS)、WindowsノートPC(Windows 11)の接続状況表示
Tailscaleの管理画面でSubnet routes(LinuxのDocker環境)、iPhone 15(iOS)、WindowsノートPC(Windows 11)の接続状況表示、Subnet routes(LinuxのDocker環境)とiPhoneが接続されていますね。

Tailscaleは、個人利用であれば最大3ユーザー・100デバイスまで無料(Personalプラン)で、ほぼ全ての機能が利用可能でございます。個人ならこれで全然OKかもね。というか保守料金とかいろいろ考えれば会社でもTailscaleの有料プラン(6ドル~)で全然十分かも。

関連
親Linuxのファイアウォールの設定変更せずにDockerのサービスに外からアクセスできるなぁ、と思っていたら【iptables】(2023年12月22日(金曜日))
ヤマハルーターNVR500のVPN(L2TP/IPsec)接続、不安定な回線で強制切断した際の迂回作でChrome リモート デスクトップを使う(2022年05月12日 (木曜日))

Tailscaleを社内VPNとして採用できるかという観点で試してみた #Network - Qiita
UGREEN NASのDockerで「Tailscale」接続をする方法
DockerでTailscaleコンテナを動かすメリットと方法の詳細|死即小虫