Blog

Tailscaleでネットに繋がらないとき

結論

sudo networksetup -setdnsservers "hogefuga" 1.1.1.1 8.8.8.8
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

何が起こるのか

Talescale を入れたときにネットが死ぬパターンがあり、
上記のコマンドを実行すると治ります。

ChatGPT くんの見解

ここから下は ChatGPT に聞いたものを適宜編集しています。

何が起きていたのか

Tailscale は macOS 上で、接続時に独自の DNS 設定を適用できます。
特に MagicDNS を使う場合、100.100.100.100 という Tailscale ローカルの DNS リゾルバが関与します。
Tailscale 公式でも、macOS は「Use Tailscale DNS settings」を通じて DNS 設定を切り替える仕組みになっています。

たとえばブラウザで、

https://google.com

を開くと、実際には最初に

google.com
↓ DNS
142.xxx.xxx.xxx

という変換が必要です。

ところが Tailscale 接続後に DNS の経路や設定が変になって、

Mac

 ├─ インターネットへの経路 → 生きてる

 └─ DNS問い合わせ → 壊れてる

                    名前が引けない

となると、見た目としては

「Tailscale を ON にするとネットが繋がらない」

になります。

実際には IP 通信自体は生きていて、名前解決だけ死んでいる可能性があります。

解決方法について

今回のコマンドの本体はここです。

sudo networksetup -setdnsservers "A83B3_A1" 1.1.1.1 8.8.8.8
sudo networksetup -setdnsservers "Wi-Fi" 1.1.1.1 8.8.8.8

これで macOS の各ネットワークサービスに対して、

DNS 1 → Cloudflare 1.1.1.1
DNS 2 → Google     8.8.8.8

明示的に指定しています。

つまり、

変更前

Mac

Tailscale / DHCP / MagicDNS周辺のDNS設定

???

DNS失敗

だったものを、

変更後

Mac

1.1.1.1

8.8.8.8

正常にDNS解決

という単純な構成に戻したわけです。

Tailscale 側にも「ローカル DNS を使うか」「tailnet 側で指定した DNS を強制するか」という仕組みがあり、設定次第ではローカル DNS が無視されます。
Tailscale 公式も、DNS サーバーへの到達性や ACL 設定が悪い場合、名前解決できなくなると説明しています。

なお、DNS サーバーを変えただけでは、macOS が以前の DNS 情報をキャッシュしていることがあります。

dscacheutil -flushcache

でキャッシュを捨て、

killall -HUP mDNSResponder

で macOS の名前解決サービスに設定を再読み込みさせています。

ざっくり言えば、

DNS設定を直す

でもMac「前の結果覚えてます」

キャッシュ削除

DNS Resolver再読み込み

1.1.1.1 / 8.8.8.8で再問い合わせ

です。

今回分かったこと

この操作だけで直ったなら、かなり重要な切り分けができています。

Tailscale そのものの通信・ルーティングが壊れていた可能性は低く、DNS 周辺が原因だった可能性が高いです。

例えば本当にルーティングが死んでいたなら、

ping 1.1.1.1

自体が通りません。

DNS だけ死んでいる場合は、

ping 1.1.1.1

は通るのに、

ping google.com

は通らない、

という状態になります。


ただし 1 点だけ注意があります。

この解決策は 「Tailscale DNS を正常化した」わけではなく、「通常の DNS を Cloudflare/Google に固定して回避した」 と考えた方がいいです。

Tailscale の MagicDNS は、

server-a
nas
ubuntu-01

のような tailnet 内のホスト名を引ける便利な機能です。Tailscale の 100.100.100.100 は、そのための端末内 DNS リゾルバです。(Tailscale)

なので、

普通のWeb
google.com
github.com
cloudflare.com

は直ったものの、

ubuntu-01
server-a.tailxxxx.ts.net

のような MagicDNS 名がどうなるかは別問題です。

今回みたいな環境なら、個人的には次に

scutil --dns

networksetup -getdnsservers "Wi-Fi"

を見て、Tailscale ON/OFF で DNS 設定がどう書き換わっているか確認すると、原因をかなり特定できます。

要するに今回の現象は、

Tailscale でインターネットが壊れたというより、Tailscale 接続時の DNS 経路が壊れていて、1.1.1.1 / 8.8.8.8 を明示したことでそれを迂回した

と捉えるのが一番近いです。(Tailscale)

ChatGPTここまで

Tailscaleで困っている人の役に立てれば幸いです。

SNS
Follow Me