带BIND9的二合一DNS服务器

本教程将向您介绍如何配置BIND9 DNS服务器以同时提供内部网络和外部网络,并提供不同的信息。 为了实现这一目标,使用了一个称为视图的BIND9的新功能。 作为一个教程,它将引导您完成整个设置,但需要初步了解BIND和DNS,有大量文档可以覆盖互联网上的信息。

继续阅读原始网站下载PDF

内容

1问题

正在发展的组织中,一个典型的问题是它们必须同时解决两个问题:

  • 要拥有公司内部网络的DNS服务器,因为很久以前,已经有太多的计算机记住他们的IP 1 ,甚至太多的计算机来维护一组主机文件2
  • 为外部服务器,外部客户端等设置DNS服务器

解决这个问题成为一个更大的问题,当不断增长的组织不能提供比一个DNS服务器更多的资源3 。 这是一个更大的问题,因为如果您只是使用所有您的名称(公共和私人)配置服务器,那么最终会以私有地址污染Internet,这是非常糟糕的,并且还显示了您的内部网络。 你不想要一个可能的攻击者/破解者。

问题的另一部分是,为了提高效率,当您在外部时,您可能希望在内部IP和外部IP时解决内部IP。 在这里,我正在接触有公共和私人连接的电脑。

这个问题有很多不同的解决方案,我记得用BIND4来解决问题,但现在我要用BIND9做一个非常干净的解决方案。 这部署在Debian GNU / Linux 3.1服务器中,但它也适用于运行BIND9的其他操作系统,只需确保正确更改路径。

2初始配置

让我们想象一下我所在的组织是什么样的例子? 我不知道,但可以在example.com上订购。 示例公司已经分配了网络192.0.2.0/24,内部我们使用10.0.0.0/24。

我们开始提供外部名称和IP,我们编辑/etc/bind/named.conf.local 4并添加:

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

然后我们使用以下内容创建/etc/bind/db.example.com:

; example.com
$TTL 604800
@ IN SOA ns1.example.com. root.example.com. (
2006020201 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800); Negative Cache TTL
;
@ IN NS ns1
IN MX 10 mail
IN A 192.0.2.1
ns1 IN A 192.0.2.1
mail IN A 192.0.2.128 ; We have our mail server somewhere else.
www IN A 192.0.2.1
client1 IN A 192.0.2.201 ; We connect to client1 very often.

正如你所看到的,我们的启动有一台电脑为所有服务,除了邮件,它甚至拥有IP转发和几个数据库。

现在,一个良好的DNS设置至少有一个辅助服务器,实际上,一些注册服务商(注册域名)强制执行此操作。 由于我们没有第二台计算机,所以我们去XName ,打开一个帐号,并注册example.com作为第二个192.0.2.1作为IP转移。 我们现在需要让XName的IP进行转移; 我们是一个小型组织,但是由于我们想要成功的启动,我们尽量做到尽可能聪明。 所以我们使用BIND9配置指令acl来定义一个标识符,该标识符与XName的IP地址相同; 在/etc/bind/named.conf.local的开头,我们添加:

acl slaves {
195.234.42.0/24; // XName
193.218.105.144/28; // XName
193.24.212.232/29; // XName
};

我们将区域声明更改为:

zone "example.com" {
type master;
file "/etc/bind/db.example.com";
allow-transfer { slaves; };
};

我们可以直接键入我们键入“从属”的IP。

3内部和外部

现在我们有了坚实的基础,我们可以开始把内容和外部网络的不同内容放在一起,但首先我们要定义什么是内部的,什么是外部的。

在/etc/bind/named.conf.local中,我们添加以下定义(在从站的顶部或下方):

acl internals {
127.0.0.0/8;
10.0.0.0/24;
};

如果我们有更多的内部网络,我们可以把它们添加到那里。 我们不定义外部因素,因为不是内部的所有内容都是外部的。 如果您想要将不同的内容提供给不同的互联网块,您可以定义不同外部的集合。

我们将使用一个称为视图的BIND9的新功能。 一个视图让我们将一个配置放在一个可以依赖于一些事情的条件中,在这种情况下,我们只需要依赖于内部。 我们用/etc/bind/named.conf.local替换区域声明:

view "internal" {
match-clients { internals; };
zone "example.com" {
type master;
file "/etc/bind/internals/db.example.com";
};
};
view "external" {
match-clients { any; };
zone "example.com" {
type master;
file "/etc/bind/externals/db.example.com";
allow-transfer { slaves; };
};
};

匹配客户端配置指令允许我们有条件地显示基于一组IP的视图,“任何”代表任何IP。 内部IP将被内部视图缓存,其余的将被丢弃在外部视图中。 外部世界看不到内部视图,其中包括我们的次要DNS提供商XName,但是我们从内部视图中删除了允许转移,因为我们不希望任何人在任何情况下能够转移内容内部观点。

我们也改变了路径,我们必须创建目录/ etc / bind / externals和/ etc / bind / internals,并将/etc/bind/db.example.com移动到/ etc / bind / externals /。

在/etc/bind/internals/db.example.com上,我们放置一个类似于外部的对应的区域文件,但是保留内部IP:

; example.com
$TTL 604800
@ IN SOA ns1.example.com. root.example.com. (
2006020201 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800); Negative Cache TTL
;
@ IN A 10.0.0.1
boss IN A 10.0.0.100
printer IN A 10.0.0.101
scrtry IN A 10.0.0.102
sip01 IN A 10.0.0.201
lab IN A 10.0.0.103

太好了,我们现在可以用我们老板的电脑来ping

ping boss.example.com

但尝试到达mail.example.com会让我们失望,发生了什么事? 在内部区域文件中没有引用mail.example.com,因为我们在内部网络中,我们可以解析mail.example.com。 好的,我们只需将外部区域文件的内容复制到内部区域文件。 这将工作。

但是我们是一个小而聪明的启动,我们可以做的更好地将每个修改的地方文件复制粘贴到区域文件,此外,这是非常容易出错的(你会永远记得修改内部区域文件,当你修改外部的一个,或者你会忘记和花费几天调试网络问题?)。

我们将如何将外部区域文件以这种方式包含在内部文件中:

$include "/etc/bind/external/db.example.com"
@ IN A 10.0.0.1
boss IN A 10.0.0.100
printer IN A 10.0.0.101
scrtry IN A 10.0.0.102
sip01 IN A 10.0.0.201
lab IN A 10.0.0.103

和瞧! 在当前文档中查找$ include指令是很难的..只要记住更改外部区域文件的序列,只要你改变内部的文件,但它不是一件大事,如果你忘记,没有什么不好会发生,因为你是不可能在您自己的小型网络中有缓存服务器。

4安全

不建议使用与某些域(在我们的example.com中)相同的DNS服务器,以及缓存DNS服务器,但在我们的例子中,我们被迫执行此操作。 从外部世界192.0.2.1是example.com的主要DNS服务器,从我们自己的内部网络,192.0.2.1(或其私有地址,10.0.0.1)是我们的缓存Nameservers,应该配置为要使用的Nameservers在我们每个工作站上

其中一个问题是有人可能会从外面开始使用我们的缓存Nameservers,有一种称为缓存中毒的攻击和许多其他令人讨厌的事情,可以在[ SINS ]中进行记录(包括如何避免它们)。

为了提高安全性,我们将在配置文件中添加几个指令:

view "internal" {
match-clients { internals; };
recursion yes; zone "example.com" { type master; file "/etc/bind/internals/db.example.com"; }; }; view "external" { match-clients { any; }; recursion no; zone "example.com" { type master; file "/etc/bind/externals/db.example.com"; allow-transfer { slaves; }; }; };

这将阻止任何危​​险的Internet上的用户递归地使用我们的服务器,而在我们自己的网络上,我们仍然可以这样做。

5配置文件

5.1 /etc/bind/named.conf.local

acl slaves {
195.234.42.0/24; // XName
193.218.105.144/28; // XName
193.24.212.232/29; // XName
};

acl internals {
127.0.0.0/8;
10.0.0.0/24;
};

view "internal" {
match-clients { internals; };
recursion yes;
zone "example.com" {
type master;
file "/etc/bind/internals/db.example.com";
};
};
view "external" {
match-clients { any; };
recursion no;
zone "example.com" {
type master;
file "/etc/bind/externals/db.example.com";
allow-transfer { slaves; };
};
};

5.2 /etc/bind/externals/db.example.com

; example.com
$TTL 604800
@ IN SOA ns1.example.com. root.example.com. (
2006020201 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800); Negative Cache TTL
;
@ IN NS ns1
IN MX 10 mail
IN A 192.0.2.1
ns1 IN A 192.0.2.1
mail IN A 192.0.2.128 ; We have our mail server somewhere else.
www IN A 192.0.2.1
client1 IN A 192.0.2.201 ; We connect to client1 very often.

5.3 /etc/bind/internals/db.example.com

$include "/etc/bind/external/db.example.com"
@ IN A 10.0.0.1
boss IN A 10.0.0.100
printer IN A 10.0.0.101
scrtry IN A 10.0.0.102
sip01 IN A 10.0.0.201
lab IN A 10.0.0.103

参考书目

SINS
保护InternetNameservers

脚注

... IP 1
对我来说,两台电脑已经有资格将太多的电脑记住他们的IP了。
...文件 2
主机文件驻留在/ etc / hosts上,是本地计算机从名称到IP的简单映射。 这是解决名称到IP的第一种方法,很久以前,维护了一个中央大型主机文件,后者通过FTP或类似的方式分发。 它迅速发展成由DNS的发明解决的问题。 尝试不要让你的主机文件成为一个问题,然后再把它变成DNS,从先驱者学习!
...服务器 3
或者当你是一个完美主义者,并相信这应该只能用一台服务器。
... / etc / bind / named.conf.local 4
如果不是Debian,您的操作系统可能只是/etc/bind/named.conf。
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏