<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tailscale on Tuan's Blog</title><link>https://blog.cloudorz.com/tags/tailscale/</link><description>Recent content in Tailscale on Tuan's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>mt</copyright><lastBuildDate>Sun, 01 Nov 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://blog.cloudorz.com/tags/tailscale/index.xml" rel="self" type="application/rss+xml"/><item><title>阿里云内网 DNS 解析配置</title><link>https://blog.cloudorz.com/p/aliyun-internal-ddns/</link><pubDate>Mon, 26 Feb 2024 15:09:08 +0800</pubDate><guid>https://blog.cloudorz.com/p/aliyun-internal-ddns/</guid><description>&lt;img src="https://blog.cloudorz.com/p/aliyun-internal-ddns/cover.svg" alt="Featured image of post 阿里云内网 DNS 解析配置" /&gt;&lt;h2 id="前言"&gt;前言&#10;&lt;/h2&gt;&lt;p&gt;在阿里云中，大学生通过身份认证后可以免费 &lt;a class="link" href="https://developer.aliyun.com/plan/student" target="_blank" rel="noopener"&#10; &gt;直接领取一台 1 个月的 ECS 云服务器&lt;/a&gt;，做完任务后自动续费半年（这是 2024 年初的活动，现在的规则可能有变化）。任务简单得很：搭建一个 WordPress 博客。&lt;/p&gt;&#10;&lt;p&gt;这台免费服务器的规格是：2 核 4 GB，1 Mbps 带宽，40 GB SSD 系统盘，&lt;strong&gt;100% 独享 CPU&lt;/strong&gt;，不是以前那种拉垮的 &lt;code&gt;突发性能 t5 实例&lt;/code&gt;。&lt;/p&gt;&#10;&lt;p&gt;这个配置、这个性能，足够用来搭建个人博客、各种小型网站、个人云盘、游戏服务器（Minecraft、幻兽帕鲁、七日杀（7 Days to Die）balabala，太多了）。&lt;/p&gt;&#10;&lt;p&gt;阿里云还是很大方的。&lt;/p&gt;&#10;&lt;p&gt;但是！！！当我准备在上面跑 &lt;code&gt;derper&lt;/code&gt; + &lt;code&gt;tailscale&lt;/code&gt; 的时候，发现了致命的问题 = =：&lt;/p&gt;&#10;&lt;h2 id="问题描述"&gt;问题描述&#10;&lt;/h2&gt;&lt;p&gt;开启 Tailscale 后，使用 &lt;code&gt;apt&lt;/code&gt; 进行软件更新时，无法连接到阿里云的内网镜像站 &lt;code&gt;mirrors.cloud.aliyuncs.com&lt;/code&gt;。&lt;/p&gt;&#10;&lt;h3 id="问题排查"&gt;问题排查&#10;&lt;/h3&gt;&lt;p&gt;经查，Tailscale 给设备分配的 IP 段是固定的 &lt;a class="link" href="https://tailscale.com/kb/1015/100.x-addresses" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;100.64.0.0/10&lt;/code&gt;&lt;/a&gt;，目前没法直接更改：&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;分配 &lt;code&gt;100.64.0.0/10&lt;/code&gt; 子网中的地址（从 &lt;code&gt;100.64.0.0&lt;/code&gt; 到 &lt;code&gt;100.127.255.255&lt;/code&gt;）。这称为运营商级 NAT（CGNAT）地址空间，由 RFC 6598（IANA 为共享地址空间保留的 IPv4 前缀）保留。&lt;/p&gt;&#10;&lt;p&gt;—— 取自 &lt;a class="link" href="https://tailscale.com/kb/1015/100.x-addresses" target="_blank" rel="noopener"&#10; &gt;Tailscale 官方文档&lt;/a&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;另外，Tailscale 的 MagicDNS 地址 &lt;code&gt;100.100.100.100&lt;/code&gt; 也在这个网段里。&lt;/p&gt;&#10;&lt;p&gt;戏剧性的重点来了：阿里云默认的内网 DNS 地址也在 &lt;code&gt;100.100.x.x&lt;/code&gt; 网段，恰好落在 Tailscale 的地址范围里：&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="阿里云内网地址与 Tailscale 地址段重叠" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.cloudorz.com/p/aliyun-internal-ddns/conflict.svg"&gt;&lt;/p&gt;&#10;&lt;p&gt;这就导致我在使用 Tailscale 的同时，无法使用阿里云的内网解析服务，具体影响如下：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;影响使用内网地址访问 OSS 等服务，甚至影响 ECS 之间的内网通信；&lt;/li&gt;&#10;&lt;li&gt;影响使用阿里云的内网镜像站 &lt;code&gt;mirrors.cloud.aliyuncs.com&lt;/code&gt;，进而影响 &lt;code&gt;apt&lt;/code&gt;/&lt;code&gt;dnf&lt;/code&gt; 等包管理器进行更新。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;本以为修改 Tailscale 的 ACL 配置可以解决问题，但 Tailscale 的 IP 段是不支持修改的，所以只能从内网 DNS 下手。&lt;/p&gt;&#10;&lt;h3 id="解决方案"&gt;解决方案&#10;&lt;/h3&gt;&lt;p&gt;说了这么多，直接贴出阿里云内网的 DNS 服务器 IP 地址吧：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;100.100.2.136&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;100.100.2.137&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;100.100.2.138&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;上述 3 个 IP 地址都可以正常解析 &lt;code&gt;mirrors.cloud.aliyuncs.com&lt;/code&gt; 以及其他内网服务。&lt;/p&gt;&#10;&lt;p&gt;我用的是 Ubuntu 22.04 LTS，直接修改 &lt;code&gt;/etc/resolv.conf&lt;/code&gt; 是不行的，因为这个文件由程序自动生成，文件头也写明了手动修改会被覆盖：&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="默认的 /etc/resolv.conf" class="gallery-image" data-flex-basis="803px" data-flex-grow="334" height="286" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.cloudorz.com/p/aliyun-internal-ddns/default-resolv.png" srcset="https://blog.cloudorz.com/p/aliyun-internal-ddns/default-resolv_hu_58cfb0cde0abc16c.png 800w, https://blog.cloudorz.com/p/aliyun-internal-ddns/default-resolv.png 958w" width="958"&gt;&lt;/p&gt;&#10;&lt;p&gt;现在你有两个选择：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;继续保留 &lt;code&gt;systemd-resolved&lt;/code&gt;，通过修改 &lt;code&gt;/etc/systemd/resolved.conf&lt;/code&gt; 来指定 DNS（稍麻烦）；&lt;/li&gt;&#10;&lt;li&gt;直接干掉 &lt;code&gt;systemd-resolved&lt;/code&gt;，简单粗暴地自己管理 &lt;code&gt;/etc/resolv.conf&lt;/code&gt;（推荐）。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="方式一保留-systemd-resolved"&gt;方式一：保留 systemd-resolved&#10;&lt;/h4&gt;&lt;p&gt;编辑 &lt;code&gt;/etc/systemd/resolved.conf&lt;/code&gt;，在 &lt;code&gt;[Resolve]&lt;/code&gt; 段中加入：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;[Resolve]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;DNS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;100.100.2.136 100.100.2.138&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;然后重启服务并确认生效：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl restart systemd-resolved&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;resolvectl status&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h4 id="方式二停用-systemd-resolved推荐"&gt;方式二：停用 systemd-resolved（推荐）&#10;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl stop systemd-resolved&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl disable systemd-resolved&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl mask systemd-resolved&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;在 Ubuntu 上，&lt;code&gt;/etc/resolv.conf&lt;/code&gt; 通常是一个指向 &lt;code&gt;/run/systemd/resolve/&lt;/code&gt; 下文件的软链接。停用 &lt;code&gt;systemd-resolved&lt;/code&gt; 后，要先删掉这个软链接，再新建一个普通文件，否则改动可能在重启后丢失：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ls -l /etc/resolv.conf &lt;span class="c1"&gt;# 如果显示 -&amp;gt; ../run/systemd/resolve/... 就是软链接&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo rm /etc/resolv.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo nano /etc/resolv.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;写入如下内容：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nameserver 100.100.2.136&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nameserver 100.100.2.137&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nameserver 100.100.2.138&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;至于如何根治……感觉需要修改 Tailscale 分配 IP 的那一段代码（？），用 Headscale 魔改也许可以，没精力折腾了。&lt;del&gt;能用就行&lt;/del&gt;&lt;/p&gt;&#10;&lt;p&gt;2024-03-29 20:46:13 更新：好像也不太行，直接看下面的临时解决方法吧 = =。&lt;/p&gt;&#10;&lt;h3 id="为什么改了-dns-还是不行"&gt;为什么改了 DNS 还是不行&#10;&lt;/h3&gt;&lt;p&gt;原因在于：Tailscale 在 Linux 上会往防火墙里加一条规则，&lt;strong&gt;丢弃所有源地址在 &lt;code&gt;100.64.0.0/10&lt;/code&gt;、却不是从 &lt;code&gt;tailscale0&lt;/code&gt; 网卡进来的数据包&lt;/strong&gt;，用来防止有人伪造 Tailscale 地址。&lt;/p&gt;&#10;&lt;p&gt;阿里云内网 DNS 的回包源地址是 &lt;code&gt;100.100.2.136&lt;/code&gt;，从 &lt;code&gt;eth0&lt;/code&gt; 进来，正好命中这条规则被丢掉了。很多阿里云内网服务的地址同样在 &lt;code&gt;100.100.x.x&lt;/code&gt;，所以光换 DNS 解决不了问题：&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="回包被 Tailscale 的防火墙规则丢弃" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.cloudorz.com/p/aliyun-internal-ddns/drop-path.svg"&gt;&lt;/p&gt;&#10;&lt;p&gt;可以自己确认一下这条规则（使用 iptables 模式时）：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo iptables -S ts-input&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;输出里能看到类似 &lt;code&gt;-A ts-input -s 100.64.0.0/10 ! -i tailscale0 -j DROP&lt;/code&gt; 的一行。&lt;/p&gt;&#10;&lt;p&gt;想绕过它，可以用 &lt;code&gt;sudo tailscale up --netfilter-mode=off&lt;/code&gt; 让 Tailscale 不再管理防火墙规则，但这样也失去了上面说的防伪造保护，需要自己维护防火墙，请评估后再用。&lt;/p&gt;&#10;&lt;h3 id="临时解决方法"&gt;临时解决方法&#10;&lt;/h3&gt;&lt;p&gt;临时的解决方法就是先用 &lt;code&gt;tailscale down&lt;/code&gt; 停掉 Tailscale，这期间正常使用内网 DNS 和内网服务，用完之后再用 &lt;code&gt;tailscale up&lt;/code&gt; 启动。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo tailscale down&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo apt upgrade&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo tailscale up&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;最终效果：&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="效果图" class="gallery-image" data-flex-basis="383px" data-flex-grow="159" height="438" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.cloudorz.com/p/aliyun-internal-ddns/result.png" width="700"&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;而且对于内网的访问也是正常的：&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="内网访问" class="gallery-image" data-flex-basis="634px" data-flex-grow="264" height="408" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.cloudorz.com/p/aliyun-internal-ddns/apt.png" srcset="https://blog.cloudorz.com/p/aliyun-internal-ddns/apt_hu_31a74eba540abff.png 800w, https://blog.cloudorz.com/p/aliyun-internal-ddns/apt.png 1078w" width="1078"&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://tailscale.com/kb/1015/100.x-addresses" target="_blank" rel="noopener"&#10; &gt;Tailscale：100.x addresses&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://tailscale.com/kb/1033/ip-and-dns-addresses" target="_blank" rel="noopener"&#10; &gt;Tailscale：IP and DNS addresses&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.rfc-editor.org/rfc/rfc6598" target="_blank" rel="noopener"&#10; &gt;RFC 6598：IANA-Reserved IPv4 Prefix for Shared Address Space&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item></channel></rss>