BIND搭建DNS实践

BIND搭建DNS实践

BIND 是一个开源的 DNS 软件系统,包括权威服务器、递归解析器和相关实用程序。搭建 BIND(Berkeley Internet Name Domain)DNS 服务器实现 DNS 服务的管理和配置。

1. bind安装

bind支持源码安装、镜像源安装等方式。

1.1 CentOS 7安装

sudo yum -y install bind bind-utils

1.2 ubuntu安装

sudo apt-get update
sudo apt-get install bind9 bind9utils bind9-doc

2. 配置 BIND

主要包括主配置文件/etc/named.conf;区域配置文件,例如,/var/named/test.com.zone,根据域名自行创建。

2.1 主配置文件

主配置文件 /etc/named.conf( BIND 的守护进程为named) 包含了 BIND服务器 的全局设置和区域配置。以下为一个配置文件示例:

[root@dns ~]# cat /etc/named.conf

options {
        listen-on port 53 { any; };   # ipv4监听地址:配置为any或者节点ip地址
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { any; };	# 允许查询的主机。引用acl:allow-query { trusted-clients; };

        /*
         - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         # 如果你正在搭建一个权威DNS服务器,请不要启用递归功能。
         - If you are building a RECURSIVE (caching) DNS server, you need to enable
           recursion.	
         # 如果你正在搭建一个递归(缓存)DNS服务器,你需要启用递归功能。
         - If your recursive DNS server has a public IP address, you MUST enable access
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface
         # 如果你的递归DNS服务器拥有一个公网IP地址,你必须启用访问控制以限制查询仅来自合法用户。如果不这样做,你的服务器可能会成为大规模DNS放大攻击的一部分。在你的网络中实施BCP38标准将极大地减少这种攻击面。
        */
        forwarders { 8.8.8.8; 8.8.4.4; };
        recursion yes;	# 是否允许递归查询

        dnssec-enable no;		# dns安全扩展,这里关闭
        dnssec-validation no;	# dns安全扩展确认,这里关闭

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.root.key";

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

acl "trusted-clients" {		# 定义了ACL之后在allow-query位置处应用ACL。
    192.168.1.0/24;
    127.0.0.1;
};

zone "." IN {
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
  1. options区块

options区块定义了全局配置选项和默认值,如服务器使用的IP地址、DNS查询转发、数据文件目录、缓存大小和查询超时等。

  1. Logging区块

定义了日志的记录方式和位置。配置文件为相对路径data/named.run,绝对路径为/var/named/data/named.run

  1. acl区块

acl区块定义了访问控制列表(ACL),包含了允许访问的 IP 范围。有的情况下,配置文件没有acl区块,可以根据需求进行添加。

  1. zone区块

zone区块定义了DNS服务器需要管理的域名,每个域名需要一个zone区块,并可以指定区域类型(master或slave)、对应的数据文件名和转发策略等。默认有一个根区域 .(通常用于引导 DNS 解析)。

  1. include语句

include语句用于将其他文件中的配置项包含到named.conf文件中,使配置文件更加灵活和易于管理。


这里以域名test.com为例,将域名区域信息写到配置文件/etc/named.rfc1912.zones

[root@dns ~]# cat /etc/named.rfc1912.zones

# 增加域名配置,以test.com为例。
## 正向解析:
zone "test.com" IN {
    type master;
    file "test.com.zone";
    allow-update { none; };
};

## 反向解析:zone名对应网络地址的反写。这里以10.210.10.0/24网段为例。
zone "10.210.10.in-addr.arpa" IN {
    type master;
    file "10.210.10.zone";
    allow-update { none; };
}

配置完成后通过下面命令检查语法:

named-checkconf

2.2 区域配置文件

区域配置文件包含了指定区域(域名)的 DNS 记录,例如/var/named/test.com.zone,需要根据域名进行创建。

1. 创建主区域文件

  • 正向解析文件

在目录/var/named/下,复制named.localhost文件,更改属组为named

cp -p named.localhost test.com.zone	# 通过-p保持文件权限和所属一致
chown named:named test.com.zone
vi test.com.zone

添加以下内容:

$TTL 3H
@          IN SOA @        dns.test.com.  (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@          IN       NS  dns.test.com.
dns        IN       A   110.210.10.220
harbor     IN       A   110.210.10.210
os-master  IN       A   110.210.10.216
os-node1   IN       A   110.210.10.217
os-node2   IN       A   110.210.10.218

检查区域配置文件语法:

[root@dns named]# named-checkzone "test.com" /var/named/test.com.zone
zone test.com/IN: loaded serial 0
OK
  • 反向解析文件

使用named.localhost文件的副本,更改属组为named。

cp named.localhost 10.210.10.zone
chown named:named 10.210.10.zone
vi 10.210.10.zone

10.210.10.zone文件内容如下:

$TTL 1D
@       IN SOA  @ 			dns.test.com. (
                                        2017020701      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@        IN NS   dns.test.com.
220      IN PTR  dns.test.com.
210      IN PTR  harbor.test.com.

检查语法:

named-checkzone "10.210.10.ip-addr.arpa" /var/named/10.210.10.zone

3. 启动和测试 BIND

3.1 启动 BIND

# centos
sudo systemctl start named
sudo systemctl enable named

3.2 检查 BIND 状态

sudo systemctl status named

3.3 测试 DNS 解析

使用 dig , nslookup ,host命令来测试 DNS 解析,测试解析域名harbor.test.com(10.210.10.210),dns服务器地址为10.210.10.220

# dig正向解析测试
dig @10.210.10.220 harbor.test.com
# dig反向解析测试
dig -x 10.210.10.210 @10.210.10.220

# nslookup测试
[root@client ~]# cat /etc/resolv.conf
nameserver 10.210.10.220
[root@client ~]# nslookup
> harbor.test.com               # 正向解析
Server:         10.210.10.220
Address:        10.210.10.220#53

Name:   harbor.test.com
Address: 10.210.10.210
> 10.210.10.220                 # 反向解析
220.10.210.10.in-addr.arpa      name = dns.test.com.


# host测试
[root@client ~]# host harbor.test.com
harbor.test.com has address 10.210.10.210
[root@client ~]# host 10.210.10.210
210.10.210.10.in-addr.arpa domain name pointer harbor.test.com.

4. 排错

  1. 区域配置文件语法错误
[root@infra named]# named-checkzone "test.com" test.com.zone
dns_rdata_fromtext: test.com.zone:3: near '1D': not a valid number
zone test.com/IN: loading from master file test.com.zone failed: not a valid number
zone test.com/IN: not loaded due to errors.

原因:

/var/named/test.com.zone配置文件 SOA 后面要加@ 或主域名。

5. 相关资料

  1. 官网:https://bind9.net/

  2. 文档: https://bind9.readthedocs.io/en/latest/

  3. 仓库:https://gitlab.isc.org/isc-projects/bind9

  4. https://blog.csdn.net/dinglinuX/article/details/54898189

  5. https://www.cnblogs.com/zhijiyiyu/p/14957522.html

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lldhsds

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值