はじめに
これまで自宅へのリモートアクセスには WireGuard を利用してきましたが、以下の運用コストとリスクが課題となっていました。
- ポート開放の維持: ルーターに穴をあける必要があり、セキュリティリスクをゼロにできない。
- DDNSの管理: 動的IPへの追従設定や、更新確認の手間。
これらを一掃するため、ポート開放不要でメッシュVPNを構築できる Tailscale を採用し、さらにNASを 「サブネットルーター」 とすることで、同一LAN内のリモートアクセス環境を構築しました。
Docker Composeによる構築
ディレクトリの作成
NAS上に設定保存用のvar_libフォルダを作ります。 作らないとコンテナ起動時エラーになります。 ※パス(volume1等)はご自身の環境に合わせて適宜読み替えてください。 /volume1/docker/tailscale/var_lib
docker-compose.yml の作成
以下の内容でYAMLファイルを作成します。
services:
tailscale:
image: tailscale/tailscale:latest
container_name: tailscale
hostname: ugreen-nas #任意の名前でよい
network_mode: host
volumes:
- /volume1/docker/tailscale/var_lib:/var/lib/tailscale
- /dev/net/tun:/dev/net/tun
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
# 外出先から自宅のネットワーク(192.168.1.xxx)全体へアクセス可能にする設定
- TS_ROUTES=192.168.1.0/24
# NAS自体のDNS設定変更を禁止し、iSCSI接続や既存のネットワーク安定性を優先する設定
- TS_ACCEPT_DNS=false
restart: always
設定のポイント
今回サブネットルーターとしての設定をします。この設定を行うことで既存のIPアドレスで自宅ローカルネットワーク内の機器へのアクセスが可能となります。
- network_mode: host: サブネットルーターとして動作させるために必須です。
- TS_ROUTES: 自宅のローカルネットワーク範囲を指定します。
- TS_ACCEPT_DNS=false: TailscaleがNASのDNS設定を書き換えるのを防ぎます。これにより、iSCSIターゲットを見失う等のトラブルを回避できます。
コンテナのデプロイと初期認証
-
コンテナの起動 NASのDockerからデプロイして起動します。
-
初期ログイン 初回起動時は認証が必要です。コンテナのログ画面を確認してください。 To authenticate, visit: https://login.tailscale.com/a/xxxxxx というURLが表示されるので、ブラウザで開き、ログインを承認します。
Tailscale管理画面での承認作業
コンテナを動かすだけではサブネットルーターとして機能しません。Tailscaleの管理側(サーバー側)で許可を与える必要があります。
- Tailscale Admin Console へアクセス。
- 対象マシン(例:
ugreen-nas)の横にある 「…」 ➔ 「Edit route settings」 を選択。 - 「Subnet routes」 セクションにある
192.168.1.0/24にチェックを入れ、Save を押す。
動作確認
- スマートフォンのWi-Fiを切り、モバイル通信(4G/5G)に切り替える。
- TailscaleアプリをONにする。
- ポートを開けていないのに、自宅と同じ感覚でアクセスできれば成功です!
まとめ
WireGuard+ポート開放という「従来のVPN」から、Tailscale+サブネットルーターという「次世代の構成」へ移行することで、管理の手間を大幅に削減できました。
当初はWindows PCに直接Tailscaleをインストールしようと試みましたが、環境の影響かうまくログインできないトラブルに見舞われました。しかし、今回のようにNASをサブネットルーター化することで、Windowsへのアプリインストール自体が不要になり、結果としてよりクリーンで安定した環境を手に入れることができました。
この構成なら、ポート開放もDDNSも一切不要。もちろん、外出先から自宅LAN内のWindowsへのリモートデスクトップ接続も快適に行えます。
