【发布时间】:2020-07-01 08:24:01
【问题描述】:
当查询来自内部网络时,我正在尝试让 pnds-recursor 将主机名解析为不同的 A 记录(因为这将通过 VPN 路由)。
为此,我设置了一个实现预解析功能的 LUA 脚本:
pdnslog("pdns-recursor Lua script starting!", pdns.loglevels.Warning)
function preresolve(dq)
if dq.qtype == pdns.A
then
if dq.qname:equal("<host.to.resolve>")
then
dq.rcode=0 -- make it a normal answer
netMask = newNMG()
netMask:addMask("172.28.0.0/14")
netMask:addMask("xxxx:xxx:5:f1:0:0:0:0/64")
if netMask:match(dq.remoteaddr)
then
dq:addAnswer(pdns.A, "<internal IP>")
else
dq:addAnswer(pdns.A, "<public IP>")
end
return true
end
end
return false
end
现在奇怪的是:对于来自 192.168.23.x 的某些客户端,这是可行的,对于其他客户端,它返回内部 IP,尽管客户端的远程 IP 不在上面指定的范围内。
有人知道为什么它没有按预期工作吗?
谢谢
【问题讨论】:
-
我想我找到了解决方案。这可能是一个缓存问题,当内部客户端请求 IP 时,recursor 会将结果缓存一段时间。也许关闭数据包缓存会有所帮助。我试试,当它有效时,我会确认。