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で困っている人の役に立てれば幸いです。

