🔍

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