DNS从入门到放弃系列(2)

见字如面,大家好,我是小斐,今天带来关于LDNS的最佳实践,关于bind 9的在生产环境中的使用,本篇文章争取言简意赅的说明bind 9在内部企业中的应用。

环境说明:

系统:Ubuntu 22.04.1 LTS

机器:两台做主从(主服务器和辅助服务器)

主:192.168.10.200

从:192.168.10.201

bind 9安装

默认安装目录

默认情况下,BIND 将安装在 /usr/local 中,并将文件放在它的这些子目录中:

sbin    # named 和所有与 BIND 相关的系统管理工具,例如 rndc、dnssec-keygen、named-checkconf 等。
bin      # 非管理员用户的工具 - 你会在这里找到 dig、host 和 nsupdate
lib       # 目标代码库
share   # BIND的手册页和各种子目录
include    # C头文件

编译时未更改默认目录BIND 将使用以下目录(相对于根目录 "/")

/etc    # 配置文件(例如 named.conf、rndc.conf)
/var/run    # named 创建和使用的运行时文件

源码编译安装

# 新建构建目录 下载的源码包放置在该目录中
root@dns01:/home# mkdir bulids
root@dns01:/home/bulids# pwd
/home/bulids

# wget可能会比较慢
root@dns01:/home/bulids# wget https://downloads.isc.org/isc/bind9/9.18.9/bind-9.18.9.tar.xz
root@dns01:/home/bulids# tar -xvf bind-9.18.9.tar.xz

# 进入解压后的目录中
root@dns01:/home/bulids/bind-9.18.9# pwd
/home/bulids/bind-9.18.9

# 查看编译选项参数帮助
root@dns01:/home/bulids/bind-9.18.9# ./configure --help

# 编译依赖库安装
root@dns01:/home/bulids/bind-9.18.9# apt-get install gcc zlib1g-dev build-essential pkg-config autoconf automake libtool libssl-dev libcap-dev libxml2 libxml2-dev libfstrm-dev libprotobuf-c-dev liblmdb-dev libmaxminddb-dev libidn2-dev libreadline-dev libjson-c-dev fstrm-bin protobuf-c-compiler

# 源码编译libuv依赖 辅助服务器使用了 libuv-1.44.2 版本
root@dns01:/home/bulids/libuv-1.42.0# wget https://dist.libuv.org/dist/v1.42.0/libuv-v1.42.0.tar.gz
root@dns01:/home/bulids# tar -zxvf libuv-v1.42.0.tar.gz
root@dns01:/home/bulids# cd libuv-1.42.0/
root@dns01:/home/bulids/libuv-1.42.0# pwd
/home/bulids/libuv-1.42.0
root@dns01:/home/bulids/libuv-1.42.0# sh autogen.sh
root@dns01:/home/bulids/libuv-1.42.0# ./configure
root@dns01:/home/bulids/libuv-1.42.0# make -j4
root@dns01:/home/bulids/libuv-v1.42.0# make install
root@dns01:/home/bulids/libuv-v1.42.0# ldconfig

# 源码编译jemalloc 官方推荐更换内存分配器为jemalloc 解决OOM问题 提高性能
root@dns01:/home/bulids# wget https://github.com/jemalloc/jemalloc/releases/download/5.3.0/jemalloc-5.3.0.tar.bz2
root@dns01:/home/bulids# tar -xjvf jemalloc-5.3.0.tar.bz2
root@dns01:/home/bulids# cd jemalloc-5.3.0
root@dns01:/home/bulids/jemalloc-5.3.0# ./configure
root@dns01:/home/bulids/jemalloc-5.3.0# make -j8
root@dns01:/home/bulids/jemalloc-5.3.0# make install
root@dns01:/home/bulids/jemalloc-5.3.0# ldconfig

# 官方关于内存OOM问题分析
https://www.isc.org/blogs/jemalloc-glitch/

# 源码编译bind 9  编译帮助执行 ./configure --help
root@dns01:/home/bulids# cd bind-9.18.9
root@dns01:/home/bulids/bind-9.18.9# ./configure --prefix=/usr/local/bind --with-openssl --with-json-c --enable-largefile --with-libidn2 --enable-full-report --enable-dnstap --disable-doh
root@dns01:/home/bulids/bind-9.18.9# make
root@dns01:/home/bulids/bind-9.18.9# make install

编译安装完成后如下所示:/usr/local/bind

编译参数说明:

--prefix=/usr/local/bind    # 定义安装目录 如不定义则安装默认目录安装
--sysconfdir=$PERFIX/etc    # 如定义安装目录 就根据--prefix参数定义的目录 创建下一级配置文件所在目录
--localstatedir=$PERFIX/var    # 如定义安装目录 就根据--prefix参数目录 创建下一级目录named运行动态生成的文件目录
--with-openssl    # 开启openssl
--with-json-c    # HTTP 统计信息格式
--enable-largefile    # 2G以上大文件支持
--with-libidn2    # dig 国际化通用域名 IDN支持
--enable-full-report    # 编译显示全部报告
--enable-dnstap    # 开启dnstap日志记录
--disable-doh    # 关闭DNS over HTTPS

编译官方文档说明:

bind 9运行

bind服务器配置角色

  1. 主服务器:负责至少解析一个域内的域名,维护所负责解析的域数据库,可对该域数据进行读写操作
  2. 辅服务器:负责从主服务器或其他辅服务器中复制相关解析库,为主服务器缓解解析压力
  3. 缓存服务器:不负责域名解析,仅仅作为缓存,加速解析速度
  4. 转发服务器:发现非本机负责的请求后,不再向根发起请求,而是直接转发给指定的一台或多台服务器,自身并不保存查询

为了命令方便,把bind 9相关的命令加入环境变量,使得命令不需要绝对路径执行

root@dns01:/usr/local/bind# vim /etc/profile

export PATH=${PATH}:/usr/local/bind/bin:/usr/local/bind/sbin    # 在文件末尾输入这行环境变量
root@dns01:/usr/local/bind# source /etc/profile
root@dns01:/usr/local/bind# named -V    # 查看bind 9版本信息和默认路径

主服务器 - Primary Authoritative Name Server

# 为了安全 以非root运行
root@dns01:/usr/local/bind# groupadd -g 53 -r bind
root@dns01:/usr/local/bind# useradd -u 53 -s /sbin/nolgin -r bind -g bind

# 授权bind目录 named权限
root@dns01:/usr/local/bind# chown -R bind:bind /usr/local/bind

# 使用rndc-confgen生成rndc.conf配置文件
root@dns01:/usr/local/bind/etc# /usr/local/bind/sbin/rndc-confgen > /usr/local/bind/etc/rndc.conf

# rndc.conf配置文件是运行rndc工具所需 rndc是官方推荐管理bind的远程管理工具 rndc 以953端口运行
root@dns01:/usr/local/bind/etc# vim rndc.conf
# Start of rndc.conf
key "rndc-key" {
        algorithm hmac-sha256;
        secret "Ocpnouni6h/ob6Bw9aWAYBoCSYNJQVK/fG3XsYVm56k=";
};

options {
        default-key "rndc-key";
        default-server 127.0.0.1;
        default-port 953;
};
# End of rndc.conf

# 取rndc.conf文件中最后10行的前面9行重定向named.conf文件中,再去掉每一行前面的#符号
root@dns01:/usr/local/bind/etc# tail -10 rndc.conf | head -9 | sed s/# //g > named.conf
#上面为什么这么做呢 是因为rndc要管理bind必须在named.conf中 导入rndc-key信息和controls信息

named.conf 主服务器配置

key "rndc-key" {
  algorithm hmac-sha256;
  secret "Ocpnouni6h/ob6Bw9aWAYBoCSYNJQVK/fG3XsYVm56k=";
};

// rndc通道
controls {
  inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; };
};

// 日志输出 新建日志文件夹logs
logging {
  channel example_log {
  file "logs/example.log" versions 3 size 250k;
  severity info;
  };
  category default {
    example_log;
  };
};

// 为本地主机提供正向映射区域
zone "localhost" {
  type primary;
  file "etc/localhost-forward.db";    //这个文件不需要改变
  notify no;
};

// 为环回口提供反向映射区域 127.0.0.1
zone "0.0.127.in-addr.arpa" {
  type primary;
  file "etc/localhost.rev";    //这个文件不需要改变
  notify no;
};

# DNS 全局选项配置文件
include "/usr/local/bind/etc/named.conf.options"; 
# 自定义区域配置文件
include "/usr/local/bind/etc/named.conf.local";
# 默认区域,例如localhost,其反向和根提示
#include "/usr/local/bind/etc/named.conf.default-zones";

localhost-forward.db 主服务器配置

$TTL 3h
localhost.  SOA      localhost.  nobody.localhost. 42  1d  12h  1w  3h
            NS       localhost.
            A        127.0.0.1
            AAAA     ::1

localhost.rev 主服务器配置

$TTL 1D
@        IN        SOA  localhost. root.localhost. (
                        2007091701 ; serial
                        30800      ; refresh
                        7200       ; retry
                        604800     ; expire
                        300 )      ; minimum
         IN        NS    localhost.
1        IN        PTR   localhost.

named.conf.options 主服务器配置

options {
        version "not currently available";    //隐藏bind版本,为了安全考虑
        directory "/usr/local/bind";    //运行时数据的目录
        pid-file "/usr/local/bind/var/run/named.pid";    //pid文件
        recursion no;    //全局递归关闭
        allow-query { any; };    //面向所有源IP提供解析服务
        allow-query-cache { none; };    //面向所有源IP不提供查询缓存
        listen-on port 53 { any; };    //监听IPv4的53端口  可改为本机IP 192.168.10.200

        //forwarders {    除了本地配置的域名,其他都转发DNS查询到上级DNS服务器
        //      223.5.5.5;
        //      114.114.114.114
        //};
        //forward only;     针对外网域名只转发上级DNS中
        dnssec-validation no;    # DNSSEC验证关闭

        listen-on-v6 { none; };    //关闭监听IPv6的53端口
};

named.conf.local 主服务器配置

// example.com 提供映射区域
zone "example.com" {
  // 这是主服务器区域
  type primary;
  file "zones/primary.example.com";
  notify yes;    // 启动区域传输
  also-notify { 192.168.10.201; };
  // 允许从服务器可以复制
  allow-transfer {
    192.168.10.201;    //从服务器IP
  };
};

// 创建反向区域文件 192.168.10.x
zone "10.168.192.in-addr.arpa" {
    type primary;
    file "zones/db.192.168.10";
    notify yes;    // 启动区域传输
    also-notify { 192.168.10.201; };
    // 允许从服务器可以复制
    allow-transfer {
      192.168.10.201;    //从服务器IP
  };
};

区域配置文件:example.com 以这个域名为例

#cat primary.example.com 文件
; BIND data file for example.com
$TTL    604800
@       IN      SOA     ns01.example.com. admin.example.com. (
                     2022120601         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL

@       IN      NS      ns01.example.com.
@       IN      A       192.168.10.200
@       IN      AAAA    ::1
ns01    IN      A       192.168.10.200

#cat db.192.168.10 文件  # 192.168.10.rev 官方示例配置文件命名方式:网络位.rev
; BIND reverse data file for local 192.168.10.XXX net
$TTL    604800
@       IN      SOA     ns01.example.com. admin.example.com. (
                     2022120601         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      ns01.example.com.
200     IN      PTR     ns01.example.com.

新建systemd管理配置文件:

vim /lib/systemd/system/named.service

[Unit]
Description=BIND Domain Name Server
Documentation=man:named(8)
After=network.target
Wants=nss-lookup.target
Before=nss-lookup.target

[Service]
Type=forking
EnvironmentFile=-/usr/local/bind/etc/named
ExecStart=/usr/local/bind/sbin/named $OPTIONS
ExecReload=/usr/local/bind/sbin/rndc reload
ExecStop=/usr/local/bind/sbin/rndc stop
Restart=on-failure

[Install]
WantedBy=multi-user.target
Alias=bind9.service

在创建named环境变量文件 vim named

# run resolvconf?
RESOLVCONF=no

# startup options for the server
OPTIONS="-u bind -c /usr/local/bind/etc/named.conf"    # 指定启用用户和启动配置文件

主服务器启动

root@dns01:/usr/local/bind/etc# systemctl daemon-reload
root@dns01:/usr/local/bind/etc# systemctl start named.service

启动失败排错:

执行上述操作,无法看到具体的错误信息,故想到named可以前台允许,打印运行信息:

# -g 前台运行 -u 启用用户 -c 指定启动配置文件
root@dns01:/usr/local/bind/sbin# named -u bind -c ../etc/named.conf -g

06-Dec-2022 13:23:17.270 loading configuration from '/usr/local/bind/sbin/../etc/named.conf'
06-Dec-2022 13:23:17.274 directory '/usr/local/bind/var/run' is not writable
06-Dec-2022 13:23:17.274 /usr/local/bind/etc/named.conf.options:3: parsing failed: permission denied
06-Dec-2022 13:23:17.274 loading configuration: permission denied
06-Dec-2022 13:23:17.274 exiting (due to fatal error)

发现问题 directory '/usr/local/bind/var/run' is not writable 指定的运行时数据目录不可写,发现没用创建该目录,新建该目录,并授权bind:

root@dns01:/usr/local# mkdir -p /usr/local/bind/var/run
root@dns01:/usr/local# chown -R bind:bind /usr/local/bind

root@dns01:/usr/local/bind/sbin# named -u bind -c ../etc/named.conf -g
# 第二次运行还是报错,不过是新的错误

06-Dec-2022 13:33:44.844 not using config file logging statement for logging due to -g option
06-Dec-2022 13:33:44.844 checking logging configuration failed: file not found
06-Dec-2022 13:33:44.844 loading configuration: file not found
06-Dec-2022 13:33:44.844 exiting (due to fatal error)

# 检查配置文件named.conf

发现日志记录配置文件路径写错了,log应改为logs文件夹:

因为我新建的文件夹就是logs文件夹,故日志记录开启日志记录,但由于路径设置错误,故启动失败。

修改为:

touch example.log
chown -R bind:bind /usr/local/bind

启动:

root@dns01:/usr/local/bind/etc# systemctl start named.service

root@dns01:/usr/local/bind/etc# systemctl status named.service

named启动成功

验证主服务器是否有效:这里的主服务器也即是权威服务器

# 修改客户端机器DNS和DNS后缀搜索列表
vim /etc/netplan/00-installer-config.yaml

# This is the network config written by 'subiquity'
network:
  ethernets:
    ens33:
      addresses:
      - 192.168.10.200/24
      gateway4: 192.168.10.254
      nameservers:
        addresses: [192.168.10.200]    # 修改主服务器DNS地址
        search: [example.com]    # 输入搜索域列表 可选
  version: 2

# 配置生效
netplan apply

dig命令测试验证:

dig ns01.example.com

如上图所示,解析成功,主服务器(primary DNS)安装完成。

辅助服务器 - Secondary Authoritative Name Server

1、源码编译安装(同上)

2、辅助服务器启动配置

rndc.conf 辅助服务器配置

root@dns02:/home/bulids/bind-9.18.9# cd /usr/local/bind/
root@dns02:/usr/local/bind# ls
bin  etc  include  lib  sbin  share

# 新建目录
root@dns02:/usr/local/bind# mkdir logs
root@dns02:/usr/local/bind# mkdir zones
root@dns02:/usr/local/bind# mkdir -p var/run

# 最终目录结构
root@dns02:/usr/local/bind# ls
bin  etc  include  lib  logs  sbin  share  var  zones

# 为了安全 以非root运行
root@dns02:/usr/local/bind# groupadd -g 53 -r bind
root@dns02:/usr/local/bind# useradd -u 53 -s /sbin/nolgin -r bind -g bind

# 授权bind目录 named权限
root@dns02:/usr/local/bind# chown -R bind:bind /usr/local/bind

# 使用rndc-confgen生成rndc.conf配置文件
root@dns02:/usr/local/bind/etc# /usr/local/bind/sbin/rndc-confgen > /usr/local/bind/etc/rndc.conf

# rndc.conf配置文件是运行rndc工具所需 rndc是官方推荐管理bind的远程管理工具 rndc 以953端口运行
root@dns02:/usr/local/bind/etc# vim rndc.conf
# Start of rndc.conf
key "rndc-key" {
        algorithm hmac-sha256;
        secret "D4Ap4JN71LvPpFeIA+pwOoNsUP/+Rf98uI3IhDoA+Ls=";
};

options {
        default-key "rndc-key";
        default-server 127.0.0.1;
        default-port 953;
};
# End of rndc.conf

# 取rndc.conf文件中最后10行的前面9行重定向named.conf文件中,再去掉每一行前面的#符号
root@dns02:/usr/local/bind/etc# tail -10 rndc.conf | head -9 | sed s/# //g > named.conf
#上面为什么这么做呢 是因为rndc要管理bind必须在named.conf中 导入rndc-key信息和controls信息

named.conf 辅助服务器配置

key "rndc-key" {
  algorithm hmac-sha256;
  secret "D4Ap4JN71LvPpFeIA+pwOoNsUP/+Rf98uI3IhDoA+Ls=";
};

// rndc控制通道
controls {
  inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; };
};

// 日志输出
logging {
  channel example_log {
  file "logs/example.log" versions 3 size 250k;
  severity info;
  };
  category default {
    example_log;
  };
};

// 为本地主机提供正向映射区域
zone "localhost" {
  type primary;
  file "etc/localhost-forward.db";
  notify no;
};

// 为环回口提供反向映射区域 127.0.0.1
zone "0.0.127.in-addr.arpa" {
  type primary;
  file "etc/localhost.rev";
  notify no;
};

include "/usr/local/bind/etc/named.conf.options";
include "/usr/local/bind/etc/named.conf.local";
#include "/usr/local/bind/etc/named.conf.default-zones";

localhost-forward.db 辅助服务器配置 同上

$TTL 3h
localhost.  SOA      localhost.  nobody.localhost. 42  1d  12h  1w  3h
            NS       localhost.
            A        127.0.0.1
            AAAA     ::1

localhost.rev 辅助服务器配置 同上

$TTL 1D
@        IN        SOA  localhost. root.localhost. (
                        2007091701 ; serial
                        30800      ; refresh
                        7200       ; retry
                        604800     ; expire
                        300 )      ; minimum
         IN        NS    localhost.
1        IN        PTR   localhost.

named.conf.options 辅助服务器配置

options {
        version "not currently available";
        directory "/usr/local/bind";
        pid-file "/usr/local/bind/var/run/named.pid";
        recursion no;
        allow-query { any; };
        allow-query-cache { none; };
        listen-on port 53 { 192.168.10.201; };    // 修改辅助服务器IP地址

        //forwarders {
        //      223.5.5.5;
        //      114.114.114.114
        //};
        //forward only;
        dnssec-validation no;

        listen-on-v6 { none; };    // 关闭IPv6端口监听
        //auth-nxdomain no;
};

named.conf.local 辅助服务器配置

// 我们是 example.com 的辅助服务器
zone "example.com" { 
  // 这是辅助服务器区域
  type secondary;
  masterfile-format text;    // 默认raw格式 打开时乱码显示 text文本格式 可查看从主服务器更新过来的数据
  file "zones/secondary.example.com";
  // 主服务器IP
  primaries { 192.168.10.200; };    // 注意替换主DNS服务器IP
};

// 反向区域文件 192.168.10.x
zone "10.168.192.in-addr.arpa" {
  type secondary;
  masterfile-format text;    // 默认raw格式 打开时乱码显示 text文本格式 可查看从主服务器更新过来的数据
  file "zones/db.192.168.10";
  primaries { 192.168.10.200; };    // 注意替换主DNS服务器IP
};

启动:

新建systemd管理配置文件:vim /lib/systemd/system/named.service

[Unit]
Description=BIND Domain Name Server
Documentation=man:named(8)
After=network.target
Wants=nss-lookup.target
Before=nss-lookup.target

[Service]
Type=forking
EnvironmentFile=-/usr/local/bind/etc/named
ExecStart=/usr/local/bind/sbin/named $OPTIONS
ExecReload=/usr/local/bind/sbin/rndc reload
ExecStop=/usr/local/bind/sbin/rndc stop
Restart=on-failure

[Install]
WantedBy=multi-user.target
Alias=bind9.service

named文件新建:vim /usr/local/bind/etc/named

# run resolvconf?
RESOLVCONF=no

# startup options for the server
OPTIONS="-u bind -c /usr/local/bind/etc/named.conf"    # 指定启用用户和启动配置文件

最后执行权限授权:chown -R bind:bind /usr/local/bind

root@dns02:/usr/local/bind/zones# systemctl daemon-reload
root@dns02:/usr/local/bind/zones# systemctl start named.service
root@dns02:/usr/local/bind/zones# systemctl status named.service    # 查看启动成功

启动后:secondary.example.com和db.192.168.10 会从主服务器中自动更新过来,不用自己新建。

添加辅助服务器到区域中:

# 修改主服务器 zone 区域配置 
root@dns01:/usr/local/bind/zones# vim primary.example.com
; BIND data file for example.com
$TTL    604800
@       IN      SOA     ns01.example.com. admin.example.com. (
                     2022120602         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL

@       IN      NS      ns01.example.com.
@       IN      NS      ns02.example.com.

ns01    IN      A       192.168.10.200
ns02    IN      A       192.168.10.201

# 修改主服务器 zone 反向区域配置
root@dns01:/usr/local/bind/zones# vim db.192.168.10    # 192.168.254.rev 官方示例配置文件命名方式:网络位.rev
; BIND reverse data file for local 192.168.10.XXX net
$TTL    604800
@       IN      SOA     ns01.example.com. admin.example.com. (
                     2022120602         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      ns01.example.com.
@       IN      NS      ns02.example.com.
200     IN      PTR     ns01.example.com.
201     IN      PTR     ns02.example.com.

修改完后:可看到辅助服务器配置文件立即更新

# 查看辅助区域文件
root@dns02:/usr/local/bind/zones# vim secondary.example.com

$ORIGIN .
$TTL 604800     ; 1 week
example.com             IN SOA  ns01.example.com. admin.example.com. (
                                2022120602 ; serial
                                604800     ; refresh (1 week)
                                86400      ; retry (1 day)
                                2419200    ; expire (4 weeks)
                                604800     ; minimum (1 week)
                                )
                        NS      ns01.example.com.
                        NS      ns02.example.com.
$ORIGIN example.com.
ns01                    A       192.168.10.200
ns02                    A       192.168.10.201

# 查看辅助区域IP反向映射配置文件
root@dns02:/usr/local/bind/zones# vim db.192.168.10    # 192.168.254.rev 官方示例配置文件命名方式:网络位.rev

$ORIGIN .
$TTL 604800     ; 1 week
10.168.192.in-addr.arpa IN SOA  ns01.example.com. admin.example.com. (
                                2022120602 ; serial
                                604800     ; refresh (1 week)
                                86400      ; retry (1 day)
                                2419200    ; expire (4 weeks)
                                604800     ; minimum (1 week)
                                )
                        NS      ns01.example.com.
                        NS      ns02.example.com.
$ORIGIN 10.168.192.in-addr.arpa.
200                     PTR     ns01.example.com.
201                     PTR     ns02.example.com.

测试区域配置文件:named-checkzone

root@dns01:/usr/local/bind# named-checkzone example.com zones/primary.example.com
zone example.com/IN: loaded serial 2022120601
OK

# 上面信息代表区域配置文件没有语法错误

root@dns01:/usr/local/bind# named-checkzone db.192.168.10 zones/db.192.168.10 
zone db.192.168.10/IN: loaded serial 2022120601
OK

dig测试验证:

缓存服务器 - Caching Name Servers

1、源码编译安装(同上)

2、缓存服务器启动配置

配置和安装方式都和主服务器大同小异,配置文件修改下:

named.conf 配置:

key "rndc-key" {
  algorithm hmac-sha256;
  secret "Ocpnouni6h/ob6Bw9aWAYBoCSYNJQVK/fG3XsYVm56k=";
};

// rndc通道
controls {
  inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; };
};

// 允许查询并缓存的内部私有IP地址段
acl corpnets {
  192.168.4.0/24;
  192.168.7.0/24;
};

// 日志输出
logging {
  channel example_log {
  file "logs/example.log" versions 3 size 250k;
  severity info;
  };
  category default {
    example_log;
  };
};

// 根区域 提示文件
zone "." {
  type hint;
  file "etc/named.root";
};

// 为本地主机提供正向映射区域
zone "localhost" {
  type primary;
  file "etc/localhost-forward.db";
  notify no;
};

// 为环回口提供反向映射区域 127.0.0.1
zone "0.0.127.in-addr.arpa" {
  type primary;
  file "etc/localhost.rev";
  notify no;
};

// 为本地IP反向映射区域
zone "10.168.192.in-addr.arpa" {
  type primary;
  file "etc/192.168.10.rev";
  notify no;
};

include "/usr/local/bind/etc/named.conf.options";
#include "/usr/local/bind/etc/named.conf.local";
#include "/usr/local/bind/etc/named.conf.default-zones";

根提示文件下载:named.root 放在/usr/local/bind/etc 目录下

named.conf.options 配置:

options {
	version "not currently available";
	directory "/usr/local/bind";
	pid-file "/usr/local/bind/var/run/named.pid";
	recursion yes;
	allow-query { corpnets; };
	allow-query-cache { corpnets; };    // 指定哪些主机(IP 地址列表)可以访问此服务器的缓存,从而有效地控制递归。
	listen-on port 53 { 192.168.10.200; };
	dnssec-validation no;
	listen-on-v6 { none; };
        empty-zones-enable yes;
};

转发服务器 - Forwarding Name Servers

1、源码编译安装(同上)

2、缓存服务器启动配置

配置和安装方式都和主服务器大同小异,配置文件修改下:

named.conf 配置:

key "rndc-key" {
  algorithm hmac-sha256;
  secret "Ocpnouni6h/ob6Bw9aWAYBoCSYNJQVK/fG3XsYVm56k=";
};

// rndc通道
controls {
  inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; };
};

// 允许查询并缓存的内部私有IP地址段
acl corpnets {
  192.168.4.0/24;
  192.168.7.0/24;
};

// 日志输出
logging {
  channel example_log {
  file "logs/example.log" versions 3 size 250k;
  severity info;
  };
  category default {
    example_log;
  };
};

// 为本地主机提供正向映射区域
zone "localhost" {
  type primary;
  file "etc/localhost-forward.db";
  notify no;
};

// 为环回口提供反向映射区域 127.0.0.1
zone "0.0.127.in-addr.arpa" {
  type primary;
  file "etc/localhost.rev";
  notify no;
};

// 为本地IP反向映射区域
zone "10.168.192.in-addr.arpa" {
  type primary;
  file "etc/192.168.10.rev";
  notify no;
};

include "/usr/local/bind/etc/named.conf.options";
#include "/usr/local/bind/etc/named.conf.local";
#include "/usr/local/bind/etc/named.conf.default-zones";

named.conf.options 配置:该配置应用在内网有内网域名和公网解析交给公共DNS的场景

options {
	version "not currently available";
	directory "/usr/local/bind";
	pid-file "/usr/local/bind/var/run/named.pid";
	recursion yes;
	allow-query { corpnets; };
	allow-query-cache { corpnets; };    // 指定哪些主机(IP 地址列表)可以访问此服务器的缓存,从而有效地控制递归。
	listen-on port 53 { 192.168.10.200; };
	dnssec-validation no;
	listen-on-v6 { none; };
        empty-zones-enable yes;
        forwarders {
            223.5.5.5;
            114.114.114.114;
        };
        // 表示将转发除已定义区域以外的所有查询
        forward only;
};

区域转发服务器配置:

此转发解析器配置仅将区域example.com的递归查询转发到位于 192.168.250.3 和 192.168.230.27 的解析器。所有其他递归查询,除了那些针对已定义区域的查询和那些答案已经在其缓存中的查询,都由这个解析器处理。转发解析器将缓存来自公共网络和转发解析器的所有响应

named.conf 配置:

key "rndc-key" {
  algorithm hmac-sha256;
  secret "Ocpnouni6h/ob6Bw9aWAYBoCSYNJQVK/fG3XsYVm56k=";
};

// rndc通道
controls {
  inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; };
};

// 允许查询并缓存的内部私有IP地址段
acl corpnets {
  192.168.4.0/24;
  192.168.7.0/24;
};

// 日志输出
logging {
  channel example_log {
  file "logs/example.log" versions 3 size 250k;
  severity info;
  };
  category default {
    example_log;
  };
};

// 为本地主机提供正向映射区域
zone "localhost" {
  type primary;
  file "etc/localhost-forward.db";
  notify no;
};

// 为环回口提供反向映射区域 127.0.0.1
zone "0.0.127.in-addr.arpa" {
  type primary;
  file "etc/localhost.rev";
  notify no;
};

// 为本地IP反向映射区域
zone "10.168.192.in-addr.arpa" {
  type primary;
  file "etc/192.168.10.rev";
  notify no;
};

// 区域文件转发example.com
zone "example.com" {
  type forward;
  forwarders {
    192.168.10.100;  // 针对example.com的查询转发到192.168.10.100和192.168.10.101上
    192.168.10.101;
  };
  forward only;
};

include "/usr/local/bind/etc/named.conf.options";
#include "/usr/local/bind/etc/named.conf.local";
#include "/usr/local/bind/etc/named.conf.default-zones";

named.conf.options 配置

options {
	version "not currently available";
	directory "/usr/local/bind";
	pid-file "/usr/local/bind/var/run/named.pid";
	recursion yes;
	allow-query { corpnets; };
	allow-query-cache { corpnets; };    // 指定哪些主机(IP 地址列表)可以访问此服务器的缓存,从而有效地控制递归。
	listen-on port 53 { 192.168.10.200; };
	dnssec-validation no;
	listen-on-v6 { none; };
        empty-zones-enable yes;
};

bind 9混杂模式

不同角色配置起到不同的功能,但是实际情况是主服务器和辅助服务器,可能需要启用缓存和转发服务器的功能,故在实际环境中,主服务器和辅助服务器 同时也是缓存服务器和转发服务器,可以把配置进行结合启用。


到此就介绍关于bind 9安装和搭建以及基本的运行配置。下一篇将介绍核心配置文件,named.conf配置文件的语法和参数说明。

展开阅读全文

页面更新:2024-04-13

标签:递归   缓存   源码   入门   区域   主机   地址   服务器   文件   目录   系列   日志

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top