You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言net.LookupIP报错连接拒绝,nslookup正常的排查求助

Go net.LookupIP 连接拒绝但nslookup正常的排查方向
  • 检查Go程序的DNS配置优先级
    Go默认读取系统resolv.conf,但如果程序运行环境(如容器、不同用户)的resolv.conf与执行nslookup的环境不一致,会导致解析差异。可以核对程序读取的resolv.conf路径,或通过自定义Resolver强制指定DNS测试:

    resolver := &net.Resolver{
        PreferGo: true,
        Dial: func(ctx context.Context, network, address string) (net.Conn, error) {
            // 强制使用IPv4连接公共DNS
            return net.Dial("udp4", "8.8.8.8:53")
        },
    }
    ips, err := resolver.LookupIP(context.Background(), "ip", host)
    

    另外错误中显示Go尝试连接[::1]:53(本地IPv6 DNS),而nslookup可能默认用IPv4 DNS,这也可能是差异原因。

  • 验证程序运行的权限与网络环境
    确认执行nslookup的用户和运行Go程序的用户是否一致,不同用户的DNS配置或网络限制(如SELinux、AppArmor规则)可能不同。如果程序在容器中运行,需进入容器内部执行nslookup,排查容器与宿主机的DNS配置差异。

  • 检查本地DNS服务状态
    执行ss -ulnp | grep :53查看53端口的监听情况,确认是否有服务监听[::1]:53——错误提示该端口连接被拒绝,说明本地IPv6 DNS服务未启动或未监听IPv6端口。若nslookup用的是IPv4本地DNS(127.0.0.1:53),可修改resolv.conf将nameserver改为127.0.0.1,或确保本地DNS服务同时监听IPv6和IPv4端口。

  • 核对Go版本差异
    不同Go版本的DNS解析逻辑存在差异,老版本可能存在resolv.conf处理bug或IPv6支持问题。尝试升级Go到稳定版本,或切换到已知正常的版本测试,排查是否为版本导致的问题。

  • 测试自定义DNS服务器
    在Go程序中直接指定公共DNS服务器(如8.8.8.8、1.1.1.1)进行解析,若能成功则说明本地DNS配置存在问题,可进一步定位本地DNS的故障点。

内容的提问来源于stack exchange,提问作者Amol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 05:36:12