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

如何配置dnsmasq仅响应远程DNS请求,本地程序走公网DNS?

完全可以实现你的需求!下面是分步配置方案

核心思路

我们要让dnsmasq只监听主机的外部网络接口(不监听本地回环127.0.0.1),这样本地程序默认使用系统resolv.conf里的公网DNS;同时配置dnsmasq处理远程请求、限制允许的IP,以及添加特定域名的伪造解析记录。


1. 配置dnsmasq仅监听外部接口

编辑dnsmasq的主配置文件(通常是/etc/dnsmasq.conf),添加以下配置:

# 只监听指定的外部网卡(比如eth0,换成你的实际网卡名)
interface=eth0
# 或者直接绑定主机的局域网IP(更精确)
# listen-address=192.168.1.100

# 禁止监听本地回环接口(确保本地请求不走dnsmasq)
except-interface=lo

这样dnsmasq只会响应发往你主机外部IP的DNS请求,本地程序会直接使用系统resolv.conf里的公网DNS,完全忽略dnsmasq。

2. 配置dnsmasq处理远程请求的规则

继续在配置文件中添加:

# 指定公网DNS服务器,用于转发非本地配置的域名查询
server=8.8.8.8
server=8.8.4.4

# 添加本地伪造解析记录(针对你的场景:远程服务器故障时返回伪造IP)
# 示例:让嵌入式系统查询faulty-server.com时返回192.168.1.10
address=/faulty-server.com/192.168.1.10

这样远程系统发过来的请求,要么返回你配置的伪造IP,要么转发到公网DNS获取真实结果。

3. 限制允许查询的远程系统IP

为了安全,只允许指定IP/子网的远程系统查询,添加:

# 允许单个IP查询
allow-list=192.168.1.50

# 或者允许整个子网查询(比如192.168.1.0/24)
# allow-list=/192.168.1.0/24/

注意:如果使用旧版dnsmasq(v2.85之前),可能需要用local-service配合interface来限制本地子网,但allow-list是更灵活的新特性。

4. 确保本地程序使用公网DNS

检查主机的/etc/resolv.conf,确保里面没有指向127.0.0.1的nameserver,而是直接写公网DNS:

nameserver 8.8.8.8
nameserver 8.8.4.4

如果你的系统用systemd-resolved管理DNS,可能需要调整相关配置,确保本地解析不走dnsmasq。

最后验证

重启dnsmasq服务:

sudo systemctl restart dnsmasq
  • 在本地主机上执行nslookup faulty-server.com,应该返回公网的真实IP;
  • 在允许的远程嵌入式系统上执行nslookup faulty-server.com 192.168.1.100(替换成你的主机IP),应该返回你配置的伪造IP。

内容的提问来源于stack exchange,提问作者Paul D Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:35:47