<%+header%> <% local uci = require "luci.model.uci".cursor() local function g(sec, opt, def) local v = uci:get("dnsguard", sec, opt) if v == nil or v == "" then return def or "" end return v end local function e(s) s = tostring(s or "") return (s:gsub("&", "&"):gsub("<", "<"):gsub(">", ">"):gsub('"', """)) end local function on(sec, opt) return g(sec, opt, "0") == "1" end -- 取 API 地址:优先 build_url,拿不到就退回固定路径(保证页面不白屏) local api_url = "/cgi-bin/luci/admin/services/dnsguard/api" local ok_disp, disp = pcall(require, "luci.dispatcher") if ok_disp and disp and disp.build_url then local ok1, u1 = pcall(disp.build_url, "admin", "services", "dnsguard", "api") if ok1 and u1 then api_url = u1 end end local cfg_enabled = on("main", "enabled") local cfg_redirect = on("main", "redirect53") local cfg_watch = on("main", "watch") local cfg_853 = on("main", "block853") local cfg_doh = on("main", "blockdoh") local cfg_port = g("main", "target_port", "53") local cfg_ifaces = g("main", "ifaces", "br-lan") local cfg_skip = g("main", "skip_devices", "") local cfg_loglimit = g("main", "log_limit", "5") local cfg_rollmin = g("main", "rollback_minutes", "10") local cfg_nh4 = g("limits", "never_hijack4", "") local cfg_nh6 = g("limits", "never_hijack6", "") local cfg_dohsrv = g("limits", "doh_servers", "") %>

DNS 防绕过

把局域网内「绕过 AdGuard Home 的 DNS」拉回本机解析:53 明文用透明重定向(客户端无感)、 853 DoT 用阻断(逼其回落 53)、DoH 专用 IP 可选阻断。 配置存于 /etc/config/dnsguard,保存后渲染到 /etc/nftables.d/20-dns-guard.nft 并重载 fw4。

当前状态

总开关读取中…
AdGuard Home—
:53 监听—
53 透明重定向—
已收编包数—
观察计数(forward)—
规则文件—
观察期累计日志—

开关

checked="checked"<% end %> />
总开关。关闭后不生成任何规则(等于恢复出厂状态)。
checked="checked"<% end %> />
把 LAN 内发往外部 :53 的 TCP/UDP 查询改道到本机 AdGuard Home(nat prerouting,优先级 -105)。 客户端无感,硬编码 DNS 的设备不用改设置。
⚠️ 只在 AdGuard Home 正常运行时才有意义:AGH 挂了就会被安全闸门拒绝应用。
checked="checked"<% end %> />
只计数 + 抽样记日志到 /mnt/data/logs/messages,不拦截。
注意:53 被重定向后不再进入 forward 链,此计数会趋近于 0(只剩 853 / DoH),这是正常的。
checked="checked"<% end %> />
DoT 无法透明重定向,只能阻断;客户端会回落到 853 之外的明文 53,从而被上面的重定向收编。建议重定向稳定 1 天后再开。
checked="checked"<% end %> />
⚠️ 风险最高:按 IP 命中,可能误伤「恰好也部署在这些 IP 上」的其它服务(例如 223.5.5.5:443)。 更精准的做法是在 AdGuard Home 里加域名规则。默认关闭。

参数

本机 AdGuard Home 的监听端口,默认 53。不要填 dnsmasq 的 5353。
监听哪个接口进来的流量,默认 br-lan。多个用空格分隔。
这些源地址不做重定向(IPv4 / IPv6 混填,空格分隔)。只在确实需要保留某个设备走外部 DNS 时使用。
⚠️ 不要把整个 192.168.0.0/16 填进「永不劫持」:那样红米 K80 这类静态指向旧私网地址的设备会继续解析失败。
观察日志每分钟最多写几条(1-999),防止刷爆日志。
把「53 重定向」从关改到开时,自动拍一个回滚快照并倒计时;到点未点「确认保留」就自动还原。
DNS 是全家网的命门,改错了人可能连这台路由器都访问不到(域名解析不了)——这是最后的保险绳。单位:分钟(1-120)。

高级:地址集合

指向这些网段的 DNS 查询不会被改道(内网 / 保留段)。空格分隔。
用于「DoH 专用 IP 阻断」与观察计数,也用于反查哪些设备在走这些地址。空格分隔。

操作

自检结果 / 规则预览 / 命令回显(点开查看)
(等待操作)

回滚点

还原会同时恢复 UCI 配置 + 规则文件并重载防火墙。回滚点目录:/mnt/data/backup-dnsguard/
<%+footer%>