阿里云 ECS 内部访问业务域名失效?用这几招优雅解决!

在使用阿里云 ECS 搭建业务系统的过程中,很多人会遇到一个看似诡异的问题:

我在 ECS 上部署了 Nginx,绑定了公网 EIP,配置好域名指向,外部访问一切正常,但在同一个 VPC 内部的 ECS 上,无法通过域名访问该服务

是不是你也踩过这个坑?我们就来深入分析这个问题,并介绍几种优雅的解决方案。

问题场景

我们公司在阿里云上面的业务系统,不能通过域名访问。

  • 4 台 ECS 都在同一个 VPC 内
  • 一台 ECS 上部署了 Nginx,绑定了一个公网 EIP(比如 123.123.123.123
  • 你的域名 a.com 指向了这个 EIP
  • Nginx 做反向代理,把请求分发给 VPC 内的服务 A、B、C

外部访问 a.com 没问题,内部 ECS 访问 a.com 却失败了。


原因:VPC 内不支持 Hairpin NAT(回环访问)

阿里云目前不支持在 VPC 内部通过公网 IP(EIP)访问自身或 VPC 内的其它 ECS 实例。这是由其 NAT 网关和路由机制决定的。

所以当你在 ECS 内执行:

curl http://a.com

DNS 会解析 a.com → EIP → Nginx(公网 IP),然后 ECS 通过公网出去再回来,这条回环路线是被阿里云 VPC 明确禁止的

解决方案 1:使用阿里云私有域名解析(PrivateZone)

最推荐、最优雅的方式是使用 阿里云云解析 PrivateZone,为你的内网环境创建私有的 DNS 解析记录。

配置步骤:

  1. 进入控制台云解析 PrivateZone 控制台
  2. 新建 Zone
    • 域名:a.com
    • 类型:私有域名
    • 绑定你的 VPC(确保所有 ECS 都在这个 VPC 内)
  3. 添加解析记录
    • 主机记录:@
    • 记录类型:A
    • 记录值:Nginx 的内网 IP(如 192.168.1.10

这样,在 VPC 内部 所有 ECS 执行 curl http://a.com 时,解析到的是内网 IP,绕过了公网路径问题。

✅ 优点:

  • 中央化配置,无需手动维护 /etc/hosts
  • 支持多个记录,灵活扩展
  • 内外解析隔离,外部仍走公网 IP

🟠 注意:

PrivateZone 是 收费服务,但费用较低(按解析记录数和请求量计费)

解决方案 2:自建 DNS + Split-Horizon DNS

如果你不想使用阿里云增值服务,可以在 VPC 内部自建一个 DNS 服务器,如:

  • CoreDNS
  • dnsmasq
  • Bind

并设置:

  • 内部访问 a.com → 内网 IP
  • 外部仍解析到公网 EIP

然后修改 ECS 的 /etc/resolv.conf 指向你的 DNS 即可。

address=/a.com/192.168.1.10

适合中大型企业或有 DevOps 团队的情况。

解决方案 3:临时使用 hosts 文件

如果 ECS 数量很少,短期内可以手动添加:

echo "192.168.1.10 a.com" >> /etc/hosts

不过这不是长久之计,后续维护麻烦,不建议长期使用。

总结对比

方案解析方式内外一致性成本维护难度推荐程度
PrivateZone云解析(私有域名)💰(付费)⭐⭐⭐⭐⭐⭐⭐
自建 DNS自定义 DNS 服务自主(弹性)⭐⭐⭐⭐⭐⭐⭐⭐
hosts 文件手动维护免费⭐⭐⭐⭐⭐(繁琐)⭐⭐

最佳实践建议

企业级或项目正式环境: 推荐使用阿里云 PrivateZone,稳定高效,原生集成,兼容性好。
测试或预算有限: 可先自建 DNS 或临时用 hosts,但建议后期逐步过渡到 PrivateZone。


如果你在使用过程中遇到具体配置问题,欢迎留言讨论,我会持续更新更多实用技巧。

📚 参考资料

  1. 阿里云帮助文档:ECS 无法通过公网地址访问自己
    https://help.aliyun.com/document_detail/42848.html
  2. 阿里云开发者社区问答:关于 Hairpin NAT 的讨论
    https://developer.aliyun.com/ask/381831
  3. 阿里云云解析 PrivateZone 介绍
    https://help.aliyun.com/document_detail/64611.html
  4. PrivateZone 使用文档
    https://help.aliyun.com/document_detail/100646.html
  5. CoreDNS 内网部署教程
    https://coredns.io/manual/toc/