见字如面,大家好,我是小斐,今天带来关于 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服务器配置角色主服务器 :负责至少解析一个域内的域名,维护所负责解析的域数据库,可对该域数据进行读写操作 辅服务器 :负责从主服务器或其他辅服务器中复制相关解析库,为主服务器缓解解析压力 缓存服务器 :不负责域名解析,仅仅作为缓存,加速解析速度 转发服务器 :发现非本机负责的请求后,不再向根发起请求,而是直接转发给指定的一台或多台服务器,自身并不保存查询 为了命令方便,把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配置文件的语法和参数说明。