AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 700046
Accepted
Michael Moser
Michael Moser
Asked: 2015-06-19 10:04:11 +0800 CST2015-06-19 10:04:11 +0800 CST 2015-06-19 10:04:11 +0800 CST

PowerDNS 水平分割解析器

  • 772

我在网上四处寻找解决方案,并发现了许多带有不同建议的线程。我发现的大部分都在解析器上使用 LUA 来返回记录。其他帖子建议使用 GEO-IP 或 Pipe 后端。我读过的所有内容都用过

我很想知道是否有可能通过 LUA 根据网络范围更改转发器,而不是使用 LUA 来存储区域信息。

如果我能得到类似于以下的逻辑来工作,我应该已经准备好了:

if sourceip comes from (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) {
     forwarder = 192.168.0.1;
}else{
     forwarder = 8.8.8.8;
}

我没有看到任何来自 pdns 的 LUA 示例可以证明更改 PDNS 本身内的任何设置,并且我很好奇这是否可能。

domain-name-system
  • 2 2 个回答
  • 5235 Views

2 个回答

  • Voted
  1. Best Answer
    ZaphodB
    2015-06-20T01:50:35+08:002015-06-20T01:50:35+08:00

    PowerDNS Server 和 Recursor 都不支持像 BIND 那样的水平分割设置。

    您可以通过例如在您的递归器中运行 Lua 代码来解决它,该代码直接提供您希望为特定子网提供的答案,但是您已经发现您无法操纵查询将从 Lua 转发到的位置。

    PowerDNS 系列代码中一个相对较新的补充是 DNS 负载均衡器,它在 Lua 中是可编程的,它使您能够根据 DNS 协议允许的任何内容发送查询来执行不同的名称服务器。请参阅http://dnsdist.org/和https://github.com/PowerDNS/pdns/blob/master/pdns/README-dnsdist.md。拆分水平线示例拆分递归和非递归查询,但您也可以根据源地址拆分它,例如通过 addPoolRule(netmask, pool) 函数。

    顺便提一句。当你把它全部大写时,Lua 人不喜欢它。见http://www.lua.org/about.html “名字里有什么” ;-)

    • 4
  2. Robert Calhoun
    2021-04-20T14:16:11+08:002021-04-20T14:16:11+08:00

    这个答案支持@ZaphodB 使用dnsdist的建议。这是一个示例dnsdist.conf文件,它将执行水平分割设置,根据目标 FQDN 将流量定向到 Google 的 DNS 服务器或本地网络中的 DNS 服务器。dq对象是一个DNS Question;您的 lua 函数可以针对该对象的任何属性进行测试。

    -- bind to port 53 (default) on local machine.
    -- setLocal clears existing, addLocal appends to existing
    setLocal("127.0.0.1")
    addLocal("10.22.222.222")
    
    -- set up dns server pools
    newServer({address="8.8.8.8",name="google8888",pool="google"})
    newServer({address="8.8.4.4",name="google8844",pool="google"})
    newServer({address="10.22.222.1",name="localdns1",pool="local"})
    newServer({address="10.22.222.2",name="localdns2",pool="local"})
    
    -- define split horizon policy
    function splitHorizon(servers, dq)
    if (string.find(dq.qname:toString(),'example.com.?$')) then
        print("local address")
        return leastOutstanding.policy(getPoolServers("local"), dq)
      else
        print("other address")
        return leastOutstanding.policy(getPoolServers("google"), dq)
      end
    end
    
    -- apply split horizon policy
    setServerPolicyLua("splitHorizon", splitHorizon)
    
    • 1

相关问题

  • Solaris DNS

  • resolv.conf 在经过一段时间后被更改

  • 为什么有些网站的网址中没有“www”就无法显示?[关闭]

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve