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

推荐订阅源

B
Blog RSS Feed
博客园_首页
N
News | PayPal Newsroom
有赞技术团队
有赞技术团队
The Hacker News
The Hacker News
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
S
SegmentFault 最新的问题
Jina AI
Jina AI
人人都是产品经理
人人都是产品经理
P
Privacy & Cybersecurity Law Blog
AI
AI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Schneier on Security
Schneier on Security
博客园 - 三生石上(FineUI控件)
月光博客
月光博客
量子位
Forbes - Security
Forbes - Security
爱范儿
爱范儿
云风的 BLOG
云风的 BLOG
SecWiki News
SecWiki News
Last Week in AI
Last Week in AI
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tor Project blog
Recorded Future
Recorded Future
A
About on SuperTechFans
J
Java Code Geeks
The Register - Security
The Register - Security
PCI Perspectives
PCI Perspectives
H
Hacker News: Front Page
V2EX - 技术
V2EX - 技术
S
Secure Thoughts
V
Vulnerabilities – Threatpost
Hacker News: Ask HN
Hacker News: Ask HN
MongoDB | Blog
MongoDB | Blog
N
Netflix TechBlog - Medium
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Scott Helme
Scott Helme
T
The Exploit Database - CXSecurity.com
Y
Y Combinator Blog
AWS News Blog
AWS News Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
IT之家
IT之家
T
The Blog of Author Tim Ferriss
G
Google Developers Blog
C
CERT Recently Published Vulnerability Notes
L
LangChain Blog
F
Full Disclosure
Application and Cybersecurity Blog
Application and Cybersecurity Blog
The GitHub Blog
The GitHub Blog

博客园 - 悠哉大斌

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不擅长的? TypeScript/JavaScript 中的异步迭代语句 js中的生成器函数 Tailscale Serve and Funnel openclaw gateway的网络绑定模式 websocket协议和http协议有何依赖关系? MCP通信的双方是谁? claude code MCP 安装范围 如何在wsl2环境下给claude code cli 配置 playwright-mcp wsl的网络模式有哪几种,有哪些区别? AI Agent memory是什么? ai agent skills是什么? Go测试生态系统工具与最佳实践深度调研(聚焦认证授权系统) 线性代数中常见矩阵类型的概念关系思维导图 三种主流授权策略
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 的便利性。方案三则风险较高,通常不建议使用。