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

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%:

  1. 创建配置文件:
sudo mkdir -p /etc/systemd/resolved.conf.d/
sudo nano /etc/systemd/resolved.conf.d/enterprise.conf
  1. 添加以下内容(替换为实际的企业域名和DNS服务器):
[Resolve]
Domains=your-enterprise-domain.com
DNS=10.x.x.x
  1. 重启systemd-resolved服务:
sudo systemctl restart systemd-resolved

此方法让systemd-resolved对企业域名使用指定的DNS服务器,Postman即使调用127.0.0.53也能正常解析。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:29:54