×

解决 OpenWrt PassWall 开启后内网泛域名解析失效的问题

Falcon 2026-03-07 views:
自动摘要

正在生成中……

问题描述

在 OpenWrt 路由器上,如果配置了公网域名的解析指向内网私有 IP(例如将 *.ubt.example.com 解析到 192.168.0.42),通常在关闭插件时解析正常。但在开启 PassWall 或类似的代理插件后,通过 nslookup 查询会发现返回结果为空或显示“Non-authoritative answer”却无具体地址。

核心原因:DNS 重绑定保护 (DNS Rebind Protection)

OpenWrt 的 DNS 转发器 Dnsmasq 默认开启了“重绑定保护”。该机制的作用是防止恶意网站将公网域名解析到你的内网 IP,从而绕过浏览器同源策略攻击内网设备。

当 PassWall 启动后,它接管了 DNS 解析流程。如果它将你的内网域名请求转发到了公网 DNS(如 8.8.8.8),返回的私有 IP 结果会被 Dnsmasq 认为是不安全的“重绑定攻击”而直接拦截丢弃。

解决方案:配置域名白名单(推荐方法)

这种方法既能解决解析问题,又能保留系统整体的安全性,不需要完全关闭重绑定保护。

1. 通过 Luci 网页界面配置

  1. 登录 OpenWrt 后台,进入 网络 (Network) -> DHCP/DNS
  2. 常规设置 (General Settings) 选项卡中,找到 域名白名单 (Domain Whitelist) 框。
  3. 输入你的主域名:ubt.example.com
  • 注:Dnsmasq 的白名单机制默认支持泛解析,添加主域名后,其所有子域名(如 123.ubt.example.com)都会自动生效。
  1. 点击页面下方的 保存并应用

2. 通过 SSH 命令行配置 (针对习惯 vi 的用户)

如果你更倾向于直接修改配置文件,可以操作 /etc/config/dhcp

# 使用 vi 编辑配置文件
vi /etc/config/dhcp

# 在 config dnsmasq 部分添加以下行(如果已有 list rebind_domain,则另起一行添加)
# 这会将该域名加入 RFC1918 响应的允许列表
list rebind_domain 'ubt.example.com'

# 保存退出后重启服务
/etc/init.d/dnsmasq restart

为什么不建议直接关闭“重绑定保护”?

虽然在截图界面直接取消勾选“重绑定保护”能立刻修复解析,但这会暴露你的整个局域网。一旦你访问了恶意网页,该网页可能通过 DNS 重绑定技术获取你路由器的管理权限或 NAS 中的敏感数据。使用域名白名单是平衡便利与安全的最佳实践。

验证方法

在开启 PassWall 的状态下,在终端执行:

nslookup whatever.ubt.example.com

如果能正确看到 Address: 192.168.0.42,说明配置已成功生效。


本文收录于