阿里云 ECS 上 Headscale 使用 100.64.0.1 DNS 后无法访问客户端
阿里云 ECS 接入 Headscale 后,如果把 100.64.0.1 配为下发给客户端的 DNS,可能出现服务器无法通过域名访问其他节点的情况。这个案例把该 DNS 改为阿里云公共 DNS 223.5.5.5;动手前仍需确认故障发生在域名解析,还是 100.x 地址的路由。
先判断问题在哪
在 ECS 上执行,替换为实际的客户端地址和域名:
tailscale status
tailscale ping 100.64.0.2
getent hosts client.example.com
ip route get 100.64.0.2- 客户端 IP 可以访问、域名无法解析:重点检查 DNS。
100.64.0.1不是 Tailscale 的固定 MagicDNS 地址;本例中它是配置的 DNS 上游。Tailscale 本机的 MagicDNS 解析器地址是100.100.100.100。 - 客户端 IP 也无法访问:改 DNS 不会修复 IP 连通性。先确认 ECS 自身已通过 Tailscale 客户端加入同一 Headscale 网络,再检查节点状态、访问策略和路由。普通 Linux TUN 模式下,
ip route get应核对流量是否走向tailscale0。
这里还有一个容易混淆的地址段:阿里云 VPC 的系统路由使用 100.64.0.0/10 访问云服务,Tailscale 节点地址也使用这一范围。因此,看到 100.x 客户端无法直连时,应检查实际路由,不能仅凭 DNS 配置断定原因。
修改 Headscale 下发的 DNS
如果确认现有 Headscale 配置的 dns.nameservers.global 包含 100.64.0.1,在原有 dns 配置块中将其替换为:
dns:
# 其他现有配置(如 magic_dns、base_domain)保持原值
nameservers:
global:
- 223.5.5.5这是配置片段,不要再添加第二个 dns 块。magic_dns 和 base_domain 保持原值,客户端也需允许接收 DNS 设置(--accept-dns=true)。按当前安装版本的配置格式修改;Headscale 官方建议使用与安装版本相同标签下的示例配置。
使用 systemd 部署时,检查配置并重启服务:
sudo headscale configtest
sudo systemctl restart headscale容器部署则在容器内执行配置检查,并按实际部署方式重启容器。随后在 ECS 上重新检查域名解析和客户端连通性:
getent hosts client.example.com
tailscale ping 100.64.0.2如果只想调整 ECS 本机的 DNS,先查 resolvectl status,确认 100.64.0.1 是谁下发的,再修改对应配置来源。不要把改写 /etc/resolv.conf 当作持久修复。阿里云 ECS 默认的 VPC DNS 为 100.100.2.136 和 100.100.2.138,能解析阿里云内部域名;公共 DNS 223.5.5.5 不应直接视为它们的等价替代。
