ホーム › 記事一覧 › Tailscaleで自宅LANの他の機器に届かない:サブネットルーターとDNS設定を見直す

Tailscale

Tailscaleで自宅LANの他の機器に届かない:サブネットルーターとDNS設定を見直す

公開 2026-10-27読了 6 分

Photo: Vladimir Srajber / Pexels

この記事でわかること
Tailscaleのサブネットルーター経由で自宅LANのNASやプリンターに届かないときに、経路の承認・accept-routes・IP転送・アドレス重複・DNSの順で原因を絞り込む手順を整理します。

先に結論です。Tailscale をサブネットルーターにしたのに、外出先から自宅 LAN の NAS やプリンターへ届かないときは、原因はだいたい次のどこかにあります。上から順に見ると早く絞り込めます。

  1. 管理コンソールで経路(ルート)が承認されていない
  2. 接続する側が Linux で、経路を受け取る設定(--accept-routes)が入っていない
  3. サブネットルーター側で IP 転送やファイアウォールが通信を止めている
  4. 出先のネットワークと自宅 LAN のアドレス帯が重なっている
  5. IP では届くが、名前(nas.lan など)で引けない=DNS の問題

この記事では、それぞれの確認方法と直し方をまとめます。サブネットルーターの基本的な立て方は、以前の記事「Tailscaleでポート開放なしに外出先から自宅NASへ接続する設定」で書いています。

まず「IP で届くか」と「名前で届くか」を分ける

最初に切り分けたいのは、IP アドレスを直接指定しても届かないのか、名前だと届かないのか です。外出先の端末(スマホのテザリングなど、自宅 LAN の外にいる状態)から、NAS の LAN 側 IP に ping やブラウザでアクセスしてみます。

ping 192.168.1.20

IP で届かないなら経路の問題なので、次の「手順1」から見ます。IP では届くのに名前だと届かないなら、経路は正常なので「手順5:DNS」へ飛んでください。

手順1:管理コンソールで経路を承認したか

tailscale set --advertise-routes=192.168.1.0/24 を実行しただけでは、経路は有効になりません。管理コンソールの Machines 画面で、サブネットルーターにした端末のメニューから「Edit route settings」を開き、広告した経路にチェックが入っているかを確認します。

承認待ちの端末には「Subnets」の表示に注意マークが付くとされています。経路を変更して広告し直したときも、改めて承認が必要になる点に注意してください。

サブネットルーター側では、自分が何を広告しているかを次のコマンドで確認できます。

tailscale debug prefs | grep -A3 AdvertiseRoutes

手順2:接続する側が Linux なら –accept-routes

Tailscale の公式ドキュメントでは、Windows・macOS・iOS・Android のクライアントは承認済みの経路を自動で使う一方、Linux のクライアントは初期状態では経路を受け取らない とされています。外出先のノート PC が Linux の場合は、その端末で次を実行します。

sudo tailscale set --accept-routes

受け取れているかは、Linux ならルーティングテーブル 52 番で確認できます。

ip route show table 52 | grep 192.168.1.0

ここに自宅 LAN のアドレス帯が出ていなければ、経路が届いていません。なお、tailscale up をオプション付きで打ち直すと、以前に付けた設定がリセットされることがあるため、設定の追加には tailscale set を使うのが安全です。

手順3:サブネットルーター側の IP 転送とファイアウォール

経路が届いているのに通信が返ってこない場合は、サブネットルーター(ラズパイやミニPC)の中を確認します。

IP 転送が有効か

sysctl net.ipv4.ip_forward

= 1 になっていなければ、パケットを LAN 側へ流してくれません。/etc/sysctl.d/ に設定ファイルを置き、再起動後も有効になるようにします。

ファイアウォールが転送を止めていないか

Ubuntu の ufw は、初期状態で転送(FORWARD)を拒否する設定になっています。ufw を有効にしているなら、Tailscale 側からの転送を許可します。

sudo ufw route allow in on tailscale0

firewalld を使うディストリビューションでは、マスカレードを有効にする手順が公式ドキュメントに書かれています。

SNAT を無効にしていないか

サブネットルーターは初期状態で、転送する通信の送信元を自分の LAN 側 IP に書き換えます(SNAT)。そのため LAN 側の機器から見ると、通信相手はサブネットルーターに見え、返事も自然に戻ってきます。--snat-subnet-routes=false にしている場合は、自宅ルーターに「100.64.0.0/10 宛てはサブネットルーターへ」という静的経路を足さないと、返事が戻ってこなくなります。特別な理由がなければ初期値のままにしておくのが無難です。

常時動かすサブネットルーターには、消費電力の小さい Raspberry Pi 5 や N100 クラスのミニPC がよく使われています。

手順4:出先と自宅 LAN のアドレス帯が重なっていないか

意外と多いのがこれです。自宅 LAN が 192.168.1.0/24 で、出先のホテルや実家の Wi-Fi も 192.168.1.0/24 だった場合、端末はまず目の前の LAN を優先するため、自宅の 192.168.1.20 ではなく、出先の同じ番号の機器を探しに行ってしまいます。

確認は簡単で、出先の端末の IP アドレスを見て、自宅と同じアドレス帯になっていないかを比べます。根本的に避けるには、自宅ルーターの LAN 側を 192.168.47.0/24 のように、家庭用ルーターの初期値と重なりにくい番号に変えておく方法があります。ただし DHCP の範囲や固定 IP の機器もすべて変わるので、変更する前に IP アドレスの一覧を手元に控えておくことをおすすめします。

手順5:名前で届かないときは DNS を見直す

MagicDNS で引けるのは、Tailscale を入れた端末の名前だけ です。サブネットルーターの先にある NAS やプリンターの名前(ルーターが配る nas.lan や printer.home.arpa など)は、MagicDNS では解決されません。また、nas.local のような mDNS の名前は Tailscale を越えて届かないとされています。

LAN 内の名前を外から引きたい場合は、管理コンソールの DNS 画面で Split DNS を設定します。

  1. DNS 画面の Nameservers で「Add nameserver」→「Custom」を選ぶ
  2. 自宅の DNS サーバーの LAN 側 IP(ルーターや AdGuard Home など)を入れる
  3. 「Restrict to domain」をオンにし、lan や home.arpa など自宅で使っているドメインを入れる

こうすると、そのドメインの問い合わせだけが自宅の DNS へ送られます。DNS サーバーの IP にはサブネットルーター経由で届く必要があるので、手順1〜4で IP の到達を先に確保しておくのが前提です。

Linux のクライアントで名前が引けない場合は、--accept-dns=false にしていないかも確認してください。

確認の順番まとめ

  • IP 直打ちで届くか、名前だけ届かないのかを分けた
  • 管理コンソールで経路を承認した
  • Linux クライアントで --accept-routes を有効にした
  • サブネットルーターの IP 転送・ufw / firewalld・SNAT を確認した
  • 出先と自宅の LAN アドレス帯が重なっていないか見た
  • 名前解決は Split DNS で自宅の DNS へ振り分けた

まとめ

  • 届かないときは「IP で届くか」「名前で届くか」を最初に分ける
  • IP で届かないなら、経路の承認 → --accept-routes → IP 転送・ファイアウォール → アドレス重複の順に見る
  • 名前で届かないなら、MagicDNS ではなく Split DNS で自宅の DNS サーバーへ振り分ける
  • 自宅 LAN を珍しいアドレス帯にしておくと、出先での重複トラブルを避けやすい

運営者が作った Excel テンプレートを BOOTH で配布しています。IT 資産管理台帳(無料 Lite 版あり) / IT 資格の学習管理シート

部長(本業: IT インフラ) 家でも同じことをして遊んでいます。記事は実機で試してから書き、失敗もそのまま載せます。