摘要
最近在 CentOS 7 虚拟机上进行大数据环境搭建时,遇到了一个棘手的网络问题:无法解析公共域名(例如 github.com 或 baidu.com),导致 curl 等工具无法下载外部资源。通过排查,最终发现问题源于 Tailscale 对系统 DNS 配置的接管。本文将详细分析该问题,并提供多种解决方法,包括临时绕过和永久配置方案。
问题现象
在 CentOS 7 虚拟机上,当尝试执行 curl 命令下载外部文件,或 ping 公共域名时,收到类似以下错误:
[root@localhost ~]# ping baidu.com
ping: baidu.com: 未知的名称或服务
[root@localhost ~]# curl -L "https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:19 --:--:-- 0
curl: (6) Could not resolve host: github.com; 未知的错误
问题排查
检查 Docker 服务状态 (非直接原因,但为了后续安装 Docker Compose 而检查):
sudo systemctl status docker
输出显示 Docker 引擎正常运行。这排除了 Docker 本身的问题。
检查网络连通性 (初步判断):
- Ping IP 地址: 尝试
ping 8.8.8.8(Google 公共 DNS)。如果ping成功,说明虚拟机到互联网的网络路由是通的,问题不在于基本的网络连接,而很可能在 DNS 解析层面。如果ping失败,则需要检查虚拟机的网络配置(如桥接模式是否正确配置,宿主机网络是否正常)。 - Ping 域名: 尝试
ping baidu.com。由于最初的报错就是域名解析失败,这一步自然也失败了。
检查 /etc/resolv.conf 文件内容 (关键线索):
cat /etc/resolv.conf
得到的输出如下:
# resolv.conf(5) file generated by tailscale
# For more info, see https://tailscale.com/s/resolvconf-overwrite
# DO NOT EDIT THIS FILE BY HAND -- CHANGES WILL BE OVERWRITTEN
nameserver 100.100.100.100
search taild4789b.ts.net
这揭示了问题的核心:resolv.conf 文件被 tailscale 接管,并且 DNS 服务器被设置为 100.100.100.100。
确认 Tailscale 运行状态:
sudo systemctl status tailscaled
tailscale status


