惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
C
Check Point Blog
博客园_首页
B
Blog
D
Docker
U
Unit 42
量子位
I
InfoQ
有赞技术团队
有赞技术团队
Martin Fowler
Martin Fowler
GbyAI
GbyAI
L
LangChain Blog
云风的 BLOG
云风的 BLOG
博客园 - Franky
美团技术团队
T
The Blog of Author Tim Ferriss
阮一峰的网络日志
阮一峰的网络日志
月光博客
月光博客
Vercel News
Vercel News
Recent Announcements
Recent Announcements
雷峰网
雷峰网
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
Google DeepMind News
Google DeepMind News

博客园 - 悠哉大斌

AI治好了我的linux桌面恐惧症 全新Qoder CN (非Qoder CN IDE)技术架构分析 AI Agent 安全沙箱技术对比:E2B、Cube Sandbox 与 Docker Sandboxes linux 升级 claude code的坑 debian(WSL) apt 代理配置 linux内核之Namespaces、Cgroups、Capabilities、Seccomp和Landlock 大语言模型推理中的隐藏瓶颈及其解决方法 Docker Sandboxes 技术是什么,和docker容器有什么区别 什么是 Docker Agent以及一个Docker Agent示例 windows wsl 安装 Temurin® JDK claude Code 和 codex 作为编程代理,前者使用typescript开发,后者使用rust,他们的决策依据是什么 Java 并发编程发展史与 java.util.concurrent 全景解析 LLM 真的改变了编码风格吗? 如果人工智能会犯错且不精确,为什么它正在改变世界? Python 的协程模型和 JavaScript 的 async/await python闭包和function.__closure__特殊属性 python 的 dunder name和 sunder name 基于nodejs设计REST API的知名开源框架 windows上使用node-oracledb Thick 模式连接 Oracle 11g Claude Code CLI连接 DeepSeek V4模型后调用报400错误 python里对象(object)到底是什么 Python 泛型演变史 Python 类型别名的演变 Python 类型提示的演变史 PEP 593 新增的Annotated 类型 Alibaba AgentScope 和 microsoft agent framework 详细对比分析 spring AI Alibaba Agent Framework 和 agentscope有什么区别和联系 AI Agent协作模式以及主流开源框架对协作模式的支持 Agent = Model + Harness 使用rust编写typescript编译器的难点在什么地方,哪些数据结构是rust不擅长的?
Tailscale 是如何接管 DNS 的?
悠哉大斌 · 2026-04-03 · via 博客园 - 悠哉大斌

💡 Tailscale 是如何接管 DNS 的?

Tailscale 通过一个叫做 MagicDNS 的核心功能来管理 DNS,默认情况下处于启用状态。当满足以下条件时,Tailscale 就会接管:

  1. Tailnet(你的私有网络)中启用了 MagicDNS:这通常在 Tailscale 管理后台配置,是全局性的。
  2. 本机接受了 Tailscale 的 DNS 设置:通过 --accept-dns 参数控制,默认值为 true,即接受 Tailscale 下发的 DNS。
  3. 系统没有其他活跃的 DNS 管理程序:比如 systemd-resolvedNetworkManager。Tailscale 会检查这些程序,如果都没有,它就会直接接管 /etc/resolv.conf

🛡️ 如何防止 Tailscale 接管 DNS?

如果你想继续使用手动指定的 DNS,可以按以下优先级选择方法:

方案一:配置 systemd-resolved(⭐ 强烈推荐)

这是 Tailscale 官方建议的方案,也是现代 Linux 发行版的默认 DNS 管理方式。它能实现最佳兼容性,让 Tailscale 和你的本地 DNS 设置和谐共存。

  1. 确保 systemd-resolved 正在运行
    sudo systemctl enable --now systemd-resolved
    sudo systemctl restart systemd-resolved
    
  2. 调整 systemd-resolved 配置
    sudo nano /etc/systemd/resolved.conf
    
    取消注释并填写你希望系统使用的 DNS 服务器,例如:
    [Resolve]
    DNS=8.8.8.8 223.5.5.5
    
  3. 创建正确的符号链接:这是关键步骤,确保 /etc/resolv.conf 指向 systemd-resolved 管理的存根文件。
    sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
    
  4. 重启相关服务
    sudo systemctl restart systemd-resolved
    sudo systemctl restart tailscaled
    

配置完成后,你可以通过 resolvectl status 命令来查看 DNS 设置是否生效。

方案二:禁用 Tailscale 的 DNS 管理(✅ 直接有效)

如果你不希望依赖 systemd-resolved,可以直接在本机禁用 Tailscale 对 DNS 的修改。

  1. 执行以下命令(重启失效):

    sudo tailscale set --accept-dns=false
    

    这条命令会立即生效,Tailscale 将停止接管你的 DNS 设置,/etc/resolv.conf 也会恢复为你之前手动指定的值。

    或者永久生效(写入配置)

    sudo tailscale set --accept-dns=false
    sudo systemctl restart tailscaled
    
  2. 配置结果说明

    • 执行命令后,Tailscale 不会再覆盖你的 /etc/resolv.conf 文件。
    • Tailscale 的 MagicDNS 服务器 (100.100.100.100) 仍然会在后台运行。
    • 如果仍需解析 Tailscale 网络内的主机名,可以手动添加一条静态 DNS 记录,将 *.ts.net 域名指向 100.100.100.100

查看是否成功:tailscale dns status
运行后输出信息非常明确:

  • Tailscale DNS: enabled: 说明--accept-dns已启用,Tailscale 正在接管 DNS。
  • Tailscale DNS: disabled: 说明--accept-dns未启用,设备使用本地 DNS。

方案三:锁定 /etc/resolv.conf 文件(⚠️ 不推荐)

这是一种粗暴的方式,通过给文件添加“不可修改”的属性来阻止任何程序写入。这可能会在未来导致难以排查的问题,仅作为最后的备选方案

# 1. 先完成你的手动配置
sudo nano /etc/resolv.conf
# 2. 锁定文件,阻止写入
sudo chattr +i /etc/resolv.conf
# 3. 如果需要修改,必须先解除锁定
sudo chattr -i /etc/resolv.conf

⚠️ 重要警告:Tailscale 官方不推荐这种做法,它可能会在检测到无法写入配置文件时,触发“Linux DNS configuration issue”之类的警告信息,并且可能导致你难以享受到 Tailscale 的高级 DNS 功能。

💎 总结

综合来看,方案一(使用 systemd-resolved 是最符合 Linux 生态惯例、也最受 Tailscale 官方支持的做法,能确保系统长期稳定。方案二(--accept-dns=false)同样有效,但会牺牲 MagicDNS 的便利性。方案三则风险较高,通常不建议使用。