微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

domain-name-system – 覆盖BIND中用于内部网络的一些DNS条目

我有一个运行BIND的DNS服务器的内部网络,通过单个网关连接到互联网.我的域“example.com”由外部DNS提供商管理.该域中的一些条目,例如“host1.example.com”和“host2.example.com”,以及顶级条目“example.com”,指向网关的公共IP地址.

我希望位于内部网络上的主机将“host1.example.com”,“host2.example.com”和“example.com”解析为内部IP地址而不是网关的IP地址.其他主机如“otherhost.example.com”仍应由外部DNS提供商解析.

通过在BIND中为“host1.example.com”和“host2.example.com”定义两个单一条目区域,我已经成功地为host1和host2条目执行了此操作.但是,如果我为“example.com”添加区域,则该域的所有查询都由我的本地DNS服务器解析,例如查询“otherhost.example.com”会导致错误.

是否可以将BIND配置为仅覆盖域的某些条目,并以递归方式解析其余条目?

解决方法

最好的方法是通过Bind 9.8.1或更高版本中的响应策略区域.它允许您覆盖任意区域中的单个记录(并且不需要为此创建整个子域,只需要创建您想要更改的单个记录),它允许您覆盖CNAME等.其他解决方案(如Unbound)不能覆盖CNAME .

https://www.redpill-linpro.com/sysadvent/2015/12/08/dns-rpz.html

编辑:让我们正确地做到这一点.我将基于上面链接的教程记录我所做的事情.

我的操作系统是RaspBerry Pi的Raspbian 4.4,但该技术应该可以在Debian和Ubuntu上进行任何更改,或者在其他平台上进行最小的更改.

转到绑定配置文件保存在系统中的位置 – 这是在/ etc / bind中.在那里创建一个名为db.rpz的文件,其中包含以下内容

$TTL 60
@            IN    SOA  localhost. root.localhost.  (
                          2015112501   ; serial
                          1h           ; refresh
                          30m          ; retry
                          1w           ; expiry
                          30m)         ; minimum
                   IN     NS    localhost.

localhost       A   127.0.0.1

www.some-website.com    A        127.0.0.1

www.other-website.com   CNAME    fake-hostname.com.

它有什么作用?

>它使用虚假地址127.0.0.1覆盖www.some-website.com的IP地址,有效地将该站点的所有流量发送到环回地址
>它将www.other-website.com的流量发送到另一个名为fake-hostname.com的站点

你可以在这里使用绑定区域文件中的任何内容.

要激活这些更改,还有一些步骤:

编辑named.conf.local并添加此部分:

zone "rpz" {
  type master;
  file "/etc/bind/db.rpz";
};

上面链接的教程告诉您向区域“rpz”{}添加更多内容,但在简单设置中这不是必需的 – 我在这里展示的是使其在本地解析器上运行的最小值.

编辑named.conf.options和options {}部分中的某处添加response-policy选项:

options {
  // bunch
  // of
  // stuff
  // please
  // ignore

  response-policy { zone "rpz"; };
}

现在重启Bind:

service bind9 restart

而已.名称服务器现在应该开始覆盖这些记录.

如果需要进行更改,只需编辑db.rpz,然后重新启动Bind.

Bonus:如果你想将DNS查询记录到syslog中,那么你可以关注程序,编辑named.conf.local并确保有一个包含这些语句的日志记录部分:

logging {
    // stuff
    // already
    // there

    channel my_syslog {
        syslog daemon;
        severity info;
    };
    category queries { my_syslog; };
};

再次重新绑定,就是这样.

在运行Bind的机器上测试:

dig @127.0.0.1 www.other-website.com. any

如果你在另一台机器上运行dig,只需使用@ the-ip-address-of-Bind-server而不是@ 127.0.0.1

我已经非常成功地使用这种技术来覆盖我正在处理的网站的CNAME,并将其发送到我刚刚测试的新AWS负载均衡器. RaspBerry Pi用于运行Bind,RPi也配置为WiFi路由器 – 所以通过将设备连接到RPi上运行的SSID,我将获得测试所需的DNS覆盖.

原文地址:https://www.jb51.cc/html/229956.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐