Tailscale の MagicDNS を無効化した状態で Tailnet の名前解決をさせる方法
概要
Tailscale において Tailnet 内の名前解決を担う仕組みとして MagicDNS があります。
MagicDNS は最近のバージョンの Tailscale クライアントを起動するとデフォルトで有効になっており、何もせずとも *.ts.net な FQDN を解決してくれる便利なツールなのですが、環境によっては既存の DNS と競合してうまく動かないことがあります。
既存の DNS クライアントとの競合
私の環境では、MagicDNS を有効にした Linux の Tailscale クライアントにおいてしばしば /etc/resolv.conf を上書きされ、Tailnet 外の名前解決に失敗する状況がみられました。
これは既知の問題のようで、Configuring Linux DNS · Tailscale Docs によれば MagicDNS は NetworkManager + systemd-resolved の環境の場合共存を試みる、ただしうまくいかないこともある、というような記述があります。
対処法
原因の追求までしていないのですが、いったんの解決策として以下のような設定を実施すると MagicDNS を無効にしつつ Tailnet の名前解決を行うことができました。
大まかに言うと systemd-resolved の設定で MagicDNS を無効化した状態でも特定のドメインのみ 100.100.100.100 (Tailscale の DNS サーバ)で解決するようにしています。
動作確認環境
- Fedora Linux 42
- systemd-resolved と NetWorkManager が有効
事前準備
Tailscale を MagicDNS を無効にした状態で起動します。
$ sudo tailscale up --accept-dns=false
Tailscale のダッシュボードから自分に割り当てられている *.ts.net のサブドメインを調べておきます(以下、*.taila1b2c3.ts.net とします)
systemd-resolved 設定
/etc/systemd/resolved.conf.d/tailscale.conf を作成し、以下のような設定を記述します。
$ cat /etc/systemd/resolved.conf.d/tailscale.conf
[Resolve]
DNS=100.100.100.100
Domains=~taila1b2c3.ts.net
systemd-resolved, tailscaled をそれぞれ再起動して反映します。
$ sudo systemctl restart systemd-resolved
$ sudo systemctl restart tailscaled
Discussion