在公司内网部署了一套 ubuntu 24.04 Desktop 作为一个内部 MES 小服务器。但是在 golang 服务中调用企业微信机器人消息接口时报错:
Post “https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx”: dial tcp: lookup qyapi.weixin.qq.com on 127.0.0.53:53: server misbehaving
我印象中,还是第一次遇到这个问题。用了这么多云服务器都是 ubuntu server,以及 windows WSL 里安装的 ubuntu,好像这个错误是第一次见。
本地 DNS 缓存服务
systemctl status systemd-resolved
看来一下,这个服务是正常运行的。
但是,
cat /etc/systemd/resolved.conf
配置文件里 DNS 一行是空的。改成 114.114.114.114 之后,重启服务:
sudo systemctl restart systemd-resolved
然后再次在 golang 接口中测试企业微信消息推送就正常了。
为何 golang 会出现这个问题
我印象中安装这个系统时,应该用过浏览器访问网站是正常的。为何在 golang 中就失败了呢?
使用纯 Go 的 DNS 解析器,它严格遵循 /etc/resolv.conf 中列出的 第一个 nameserver(这里是 127.0.0.53),如果该服务器返回错误(如 server misbehaving)或不响应,Go 解析器不会自动尝试其他 nameserver,直接报错。
我看了一下 /etc/resolv.conf, 确实里面只有一行记录:
nameserver 127.0.0.53
关于作者 🌱
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式