Postman未使用系统指定DNS致域名解析失败,如何修改其DNS设置?
问题描述
Postman无法解析企业VPN相关域名%host%,报错Error: getaddrinfo ENOTFOUND %host%,但其他工具(dig、curl、Node.js、Restfox等)均能正常解析。核心怀疑Postman未使用/etc/resolv.conf指定的DNS,而是直接使用了DHCP推送、经systemd-resolved代理的ISP DNS。
机器配置
- systemd-resolved运行于127.0.0.53,代理路由器DHCP推送的ISP DNS;
- dnsmasq监听127.0.0.1,后端服务器为127.0.0.53、8.8.8.8、8.8.4.4;
- 默认/etc/resolv.conf指向127.0.0.1;
- 企业VPN开启时,/etc/resolv.conf会被覆盖为两个10.x.x.x的企业DNS服务器;
- /etc/nsswitch.conf的hosts配置:
hosts: mymachines dns mdns_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] files myhostname; - 企业DNS与全局DNS均包含%host%指向多个10.x.x.x负载均衡地址;
- 系统为Manjaro,Postman通过Flatpak/Flathub安装。
测试验证
getent hosts %host%可正确解析;dig %host%或dig %host% @127.0.0.1无论VPN是否开启均返回正确地址;dig %host% @127.0.0.53无法解析(该服务器代理ISP DNS);- Node.js的dns模块可正确解析%host%;
- 从Postman复制的curl请求无需修改即可正常运行;
- Postman可正常访问127.0.0.53能解析的公开域名;
- Restfox(Postman分支)可正常解析%host%。
原因分析
问题根源在于Flatpak版本的Postman沙箱机制:
Flatpak应用默认会隔离系统配置,Postman并未遵循系统的nsswitch.conf和/etc/resolv.conf规则,而是直接调用systemd-resolved的127.0.0.53进行DNS解析。而127.0.0.53代理的是ISP DNS,没有企业域名%host%的解析记录,因此出现ENOTFOUND错误。
其他工具(包括Restfox)要么未使用Flatpak沙箱,要么沙箱权限配置不同,能正常读取系统DNS配置并通过dnsmasq或企业DNS完成解析。
解决方法
方案1:修改Flatpak Postman的DNS环境变量
通过Flatpak override命令强制Postman使用指定的DNS服务器(比如系统的dnsmasq地址127.0.0.1,或企业DNS):
flatpak override --user --env=DNS_SERVERS=127.0.0.1 com.getpostman.Postman
如需指定多个DNS,用逗号分隔:
flatpak override --user --env=DNS_SERVERS=127.0.0.1,10.x.x.x com.getpostman.Postman
执行后重启Postman即可生效。
方案2:移除Flatpak沙箱的DNS隔离
允许Postman访问系统的DNS配置文件,绕过沙箱的DNS限制:
flatpak override --user --filesystem=/etc/resolv.conf --filesystem=/etc/nsswitch.conf com.getpostman.Postman
此方法让Postman遵循系统的DNS解析规则,和其他工具行为一致。
方案3:切换为非Flatpak版本的Postman
直接从Postman官网下载tar包安装,该版本完全依赖系统DNS配置,不会受Flatpak沙箱限制。
方案4:配置systemd-resolved支持企业域名解析
在systemd-resolved中添加企业域名的自定义解析规则,让127.0.0.53能解析%host%:
- 创建配置文件:
sudo mkdir -p /etc/systemd/resolved.conf.d/ sudo nano /etc/systemd/resolved.conf.d/enterprise.conf
- 添加以下内容(替换为实际的企业域名和DNS服务器):
[Resolve] Domains=your-enterprise-domain.com DNS=10.x.x.x
- 重启systemd-resolved服务:
sudo systemctl restart systemd-resolved
此方法让systemd-resolved对企业域名使用指定的DNS服务器,Postman即使调用127.0.0.53也能正常解析。
内容的提问来源于stack exchange,提问作者Etki

