Navicat连接腾讯云CDB时DNS解析失败,根本原因是其依赖操作系统resolver,而CDB内网域名(如cdb-xxx.tencentyun.com)仅能被腾讯云内网DNS(如10.53.216.182)正确解析;本地或跳板机若未配置该内网DNS,nslookup即返回空或公网地址,导致Navicat卡在“正在解析主机名”并超时或报Unknown host。
直接用内网 ip + 内网 dns 解析,是连接腾讯云 cdb 最稳的方式;但 navicat 默认走公网 dns、不自动识别内网域名,必须手动干预解析路径和连接参数,否则会超时或解析到错误地址。
Navicat 连接 CDB 时为什么 DNS 解析失败
Navicat 本身不参与 DNS 解析,它依赖操作系统 resolver。问题出在:CDB 实例的内网域名(如 cdb-xxx.tencentyun.com)只能被腾讯云内网 DNS(如 10.53.216.182)正确解析,而你的本地机器或跳板机若没配内网 DNS,nslookup cdb-xxx.tencentyun.com 就会返回空或公网地址,Navicat 连接时自然卡在“正在解析主机名”。
- 常见错误现象:
Connection timed out或Unknown host cdb-xxx.tencentyun.com - Windows 上执行
nslookup cdb-xxx.tencentyun.com,返回的不是10.x.x.x或172.x.x.x,基本可判定 DNS 没走对 - Linux 上检查
/etc/resolv.conf是否包含腾讯云内网 DNS IP(如nameserver 10.53.216.182),而不是8.8.8.8或本地路由器地址 - 即使配置了内网 DNS,若网络不在同一私有网络(VPC)或安全组未放行 3306 端口,也会表现为“解析成功但连接拒绝”
Linux 跳板机上配内网 DNS 的实操要点
多数人用 Linux 服务器作跳板连 CDB,这时不能只改 /etc/resolv.conf —— DHCP 会覆盖它,必须锁死或拦截覆盖逻辑。
- 先确认当前 VPC 对应的内网 DNS 地址(基础网络/私有网络不同,区域不同,DNS 也不同;参考控制台「实例详情 → 网络信息」)
- 编辑网卡配置:
vim /etc/sysconfig/network-scripts/ifcfg-eth0,添加PEERDNS=no,避免重启网络后被覆盖 - 再写死 DNS:
echo "nameserver 10.53.216.182" > /etc/resolv.conf(注意别用>>追加,防止重复) - 验证是否生效:
systemd-resolve --status | grep "Current DNS Server"或直接dig cdb-xxx.tencentyun.com @10.53.216.182 - 如果仍解析失败,检查是否启用了
systemd-resolved:停用它或把resolv.conf指向真实文件(ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf)
Navicat 连接设置里必须关掉的两个选项
Navicat 15+ 默认启用「DNS SRV 记录查询」和「自动检测 SSH 隧道」,这两项在内网环境下不仅无用,还会拖慢连接、甚至干扰解析结果。
- 新建连接 → 「高级」页签 → 取消勾选
Use DNS SRV record - 同页签 →
SSH tunnel必须保持关闭,除非你真在走 SSH 跳转;开启后 Navicat 会尝试解析_mysql._tcp.xxx这类服务发现域名,而腾讯云 CDB 不提供 SRV 记录 - 主机名填
cdb-xxx.tencentyun.com(不要填公网域名),端口填3306,确保「连接测试」前已 flush 本地 DNS 缓存(Linux:sudo systemd-resolve --flush-caches;Windows:ipconfig /flushdns) - 如果还是连不上,换用内网 IP 直连(从控制台复制「内网 IP」字段),绕过 DNS——这是最快速验证网络通路是否正常的手段
Windows 本地直连 CDB 的坑:hosts 文件不解决内网域名解析
有人试图往 C:\Windows\System32\drivers\etc\hosts 里硬写 cdb-xxx.tencentyun.com → 内网 IP,这完全无效。因为腾讯云 CDB 的内网域名是动态绑定的,且证书校验依赖真实域名,硬写 hosts 会导致 TLS 握手失败或连接被重置。
- Windows 本地机器无法直连 CDB 内网域名,除非你通过云服务器(如 CVM)跳转,或使用腾讯云提供的「云数据库代理」或「数据库网关」服务
- 若坚持本地连,唯一合规路径是:开通「数据库公网访问」并配白名单(不推荐,有安全风险),或用
cloudsql-proxy类工具做安全隧道 - AD 域环境更麻烦:若域控 DNS 没配条件转发器指向腾讯云内网 DNS(如用
dnscmd /zoneadd tencentyun.com /forwarder 183.60.82.98),所有域内机器都会解析失败
真正关键的不是 Navicat 设置,而是你发起连接的那台机器是否处于能访问腾讯云内网 DNS 的网络上下文中;解析链路上任何一环(操作系统 resolver → 本地 DNS 缓存 → 转发器 → 腾讯云内网 DNS)断开,都会让 cdb-xxx.tencentyun.com 变成一个不可达的字符串。











