服务器配置教案 Help

4-2 搭建bind服务

介绍

Bind: (Berkely Internet Name Daemon)是一款最流行的域名解析服务软件,实现了DNS协议,伯克利公司出品。

场景:

  • 域名到公网IP: 平时上网和软件的各种请求,99%以上都是这种情况。

  • 域名到内网IP: 某公司需要搭建内部OA管理系统和文件共享服务,为了安全没有连互联网,为了避免IP地址好记,做一个域名到局域网IP的解析。

  • 反向解析: 自己的服务器被某些IP大量访问,反查这些ip是否是大公司的爬虫来判断是否有风险。

机房虚拟机准备和实验环境

服务器: 桥接,root用户登录,详见0-2节文章。
客户端: 可以用宿主机Windows,一人一组。也可以跟旁边人配合,两人一组。

系统环境: centOS stream 8。 Bind9。

实验环境:假设有1个域名、2台服务器、n台客户端:

  • 域名: apple.com

  • 服务器1-网站服务: 公网ip(假设) 11.22.33.44 。其上有官网、OA等网站。

  • 服务器2-DNS Bind服务: 172.31.5.100 ,即你自己的虚拟机服务器ip。

  • 服务器2-DNS服务-解析记录: apple.com ➡️11.22.33.44、www.apple.com ➡️11.22.33.44、oa.apple.com ➡️11.22.33.44。

  • 客户端: n台,其中一台为172.31.5.200,可以访问到同网段的自建的dns服务器。

实验设计:
由于我们没有购买域名和云服务器,暂无法体验真实的域名解析,因此实验环境为内网 、假设的域名、假设的服务器IP。
假设域名为apple.com (当然,我们不是这个域名的所有者,几个亿也买不到),假设其对应的IP为11.22.33.44。 正常情况下,浏览器请求apple.com会先去114.114.114.1148.8.8.8之类的常用DNS服务器查询对应的苹果服务器IP然后再访问苹果服务器。 在这节实验中,我们自己在局域网中搭建DNS服务器IP形如172.31.5.100 ,然后在客户端测试时修改DNS服务器地址(或修改hosts文件)使先强制访问我们自建的DNS服务器, 找到解析记录**@ A 11.22.33.44**并返回结果。

安装

bind是主程序、bind-utils是相关管理工具。

(可选)检查是否已安装

yum list installed | grep bind

(跳过)在线安装

yum install bind
yum install bind-utils

本地安装

  1. 老师下发离线安装包到学生机桌面, bind-installer.tar.gz (文件名可能略有不同),拖动到安装包到虚拟机中的图形化文件管理器。即下载安装包到/root目录下。

  2. 解压缩解包

tar -zxvf bind-installer.tar.gz

然后的到📁bind-installer文件夹,里面有约两百个.rpm文件,为bind软件及其依赖库。

4-2准备离线安装包.png
  1. 安装

rpm -iv --nodeps --force ./bind-installer/*.rpm
  1. (可选)验证安装,能看到默认配置文件和软件版本 cat /etc/named.conf

配置

  • 主配置文件 /etc/named.conf

  • 区域主配置 /etc/named.rfc1912.zones

  • 根域配置 /var/named/named.ca

  • 正向解析区域 /var/named/apple.com.zone

  • 逆向解析区域 /var/named/44.33.22.11.zone

配置文件有多个,比之前实验复杂。其实都写在named.conf中也行,但因为一些软件配置较多复杂,所以根据功能分层更清晰。 配置文件包含关系: named.conf包含named.rfc1912.zones,named.rfc1912.zones又包含apple.com.zone。

字段含义: 详见课本p70~p74。

注意一些配置文件在/var目录下。

1. 主配置文件 named.conf

主配置文件: 全局配置,包括监听端口、日志、根域查询、包含的子配置文件路径。

nano /etc/named.conf

修改两处:

  1. 监听地址加上网卡地址: 接受来自网卡的请求,添加服务端网卡IP地址(即实验虚拟机的IP地址)。添加服务端网卡地址后那行配置形如*listen-on port 53 { 127.0.0.1; 172.31.5.200; }; *。也可以写成用any关键字,程序将会自动识别网卡。

  2. 允许所有客户端使用dns查询功能。

options { // ⬇️修改前为 listen-on port 53 { 127.0.0.1; };。 listen-on port 53 { any; }; 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"; secroots-file "/var/named/data/named.secroots"; recursing-file "/var/named/data/named.recursing"; // ⬇️修改前为 allow-query { localhost; }; allow-query { any; }; recursion yes; dnssec-enable yes; dnssec-validation yes; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; include "/etc/crypto-policies/back-ends/bind.config"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";

(可选)重启服务和查看服务监听端口:

1. systemctl restart named 2. netstat -tunlp | grep named
ctive Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 192.168.156.135:53 0.0.0.0:* LISTEN 73773/named tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 73773/named tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 73773/named tcp6 0 0 ::1:53 :::* LISTEN 73773/named tcp6 0 0 ::1:953 :::* LISTEN 73773/named udp 0 0 192.168.156.135:53 0.0.0.0:* 73773/named udp 0 0 127.0.0.1:53 0.0.0.0:* 73773/named udp6 0 0 ::1:53 :::* 73773/named

可以看到named服务自动识别网卡IP,通过tcp和udp协议,在53端口监听。

2. (跳过)根域解析配置文件 named.ca

根域配置文件: 全球13台顶级域名服务器映射列表。写死固定的,不需要编辑。

cat /var/named/named.ca
; <<>> DiG 9.18.20 <<>> -4 +tcp +norec +nostats @d.root-servers.net ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47286 ;; flags: qr aa; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 27 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1450 ;; QUESTION SECTION: ;. IN NS ;; ANSWER SECTION: . 518400 IN NS a.root-servers.net. . 518400 IN NS b.root-servers.net. . 518400 IN NS c.root-servers.net. . 518400 IN NS d.root-servers.net. . 518400 IN NS e.root-servers.net. . 518400 IN NS f.root-servers.net. . 518400 IN NS g.root-servers.net. . 518400 IN NS h.root-servers.net. . 518400 IN NS i.root-servers.net. . 518400 IN NS j.root-servers.net. . 518400 IN NS k.root-servers.net. . 518400 IN NS l.root-servers.net. . 518400 IN NS m.root-servers.net. ;; ADDITIONAL SECTION: a.root-servers.net. 518400 IN A 198.41.0.4 b.root-servers.net. 518400 IN A 170.247.170.2 c.root-servers.net. 518400 IN A 192.33.4.12 d.root-servers.net. 518400 IN A 199.7.91.13 e.root-servers.net. 518400 IN A 192.203.230.10 f.root-servers.net. 518400 IN A 192.5.5.241 g.root-servers.net. 518400 IN A 192.112.36.4 h.root-servers.net. 518400 IN A 198.97.190.53 i.root-servers.net. 518400 IN A 192.36.148.17 j.root-servers.net. 518400 IN A 192.58.128.30 k.root-servers.net. 518400 IN A 193.0.14.129 l.root-servers.net. 518400 IN A 199.7.83.42 m.root-servers.net. 518400 IN A 202.12.27.33 a.root-servers.net. 518400 IN AAAA 2001:503:ba3e::2:30 b.root-servers.net. 518400 IN AAAA 2801:1b8:10::b c.root-servers.net. 518400 IN AAAA 2001:500:2::c d.root-servers.net. 518400 IN AAAA 2001:500:2d::d e.root-servers.net. 518400 IN AAAA 2001:500:a8::e f.root-servers.net. 518400 IN AAAA 2001:500:2f::f g.root-servers.net. 518400 IN AAAA 2001:500:12::d0d h.root-servers.net. 518400 IN AAAA 2001:500:1::53 i.root-servers.net. 518400 IN AAAA 2001:7fe::53 j.root-servers.net. 518400 IN AAAA 2001:503:c27::2:30 k.root-servers.net. 518400 IN AAAA 2001:7fd::1 l.root-servers.net. 518400 IN AAAA 2001:500:9f::42 m.root-servers.net. 518400 IN AAAA 2001:dc3::35

3. 扩展配置文件 named.rfc1912.zones

扩展配置文件: 具体的域名映射规则。默认配置包括本地127.0.0.1的正向和逆向解析。

RFC介绍: (Request For Comments),是由互联网工程任务组(IETF)发布的一系列备忘录。文件收集了有关互联网相关信息,以及UNIX和互联网社群的软件文件,以编号排定。目前RFC文件是由互联网协会(ISOC)赞助发行。rfc1912规定了DNS相关内容。

修改两处(在文件末尾添加):

  • 正向解析

  • 逆向解析。如果域名对应的ip为11.22.33.44,那么写倒序44.33.22.11,接上后面的.ip-addr.arpa是固定写法。

nano /etc/named.rfc1912.zones
zone "localhost.localdomain" IN { type master; file "named.localhost"; allow-update { none; }; }; zone "localhost" IN { type master; file "named.localhost"; allow-update { none; }; }; zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN { type master; file "named.loopback"; allow-update { none; }; }; zone "1.0.0.127.in-addr.arpa" IN { type master; file "named.loopback"; allow-update { none; }; }; zone "0.in-addr.arpa" IN { type master; file "named.empty"; allow-update { none; }; }; // 双正斜杠开头的为bind软件配置中的注释语法,不用抄。 // 👇️在文件末尾添加信息。正向解析匹配规则写域名。指向的区域配置文件名要与后面创建的文件名保持一致。 zone "apple.com" IN { type master; file "apple.com.zone"; // 文件名一定要与后面复制或创建在/var/named目录下的文件名保持一致。配置文件不支持行内注释,注释不要抄写。 }; // 👇️逆向解析为域名指向IP的倒写+.in-addr+.arpa。指向的区域配置文件名要与后面创建的文件名保持一致,各种写法风格都有例如apple.com.reverse.zone,这里用ip倒写。 zone "44.33.22.11.in-addr.arpa" IN { type master; file "44.33.22.11.zone"; };

4. ➡️正向解析配置 apple.com.zone

  1. 手动创建文件或复制模版,根据域名修改文件名。

cp -a /var/named/named.localhost /var/named/apple.com.zone
  1. 编辑。

    • SOA记录: Start of Authority。它标志着一个DNS区域文件的开始,包含了关于这个区域的重要管理信息、如区域的首要名称服务器,负责该区域的管理员联系信息、区域文件的默认TTL值、区域的刷新时间等。关注管理方面。

    • NS记录: NS记录指的是Name Server记录,它定义了该域名的权威名称服务器,即负责响应解析该域的服务器。指向我们自建的dns服务器ip。关注dns服务器ip方面。

    • A记录 三级域名 dns: 指向我们自建的dns服务器ip。

    • A记录 三级域名 空 : 官网主页,访问网址 apple.com 会指向到后面的IP。@符号表示三级域名为空。

    • A记录 三级域名 www : 官网主页,访问网址 www.apple.com。

    • A记录 三级域名 oa : 办公主页,访问网址 oa.apple.com。

nano /var/named/apple.com.zone
$TTL 1D @ IN SOA dns.apple.com. admin.apple.com. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum @ NS dns.apple.com. // 此文件不支持行内注释,仅作说明,不要抄写//和后面的内容。 dns A 172.31.5.100 // ⬅️⚠️替换成你的服务器IP,即虚拟机IP。 @ A 11.22.33.44 // 即apple.com指向11.22.33.44 www A 11.22.33.44 // 即www.apple.com指向11.22.33.44 oa A 11.22.33.44
  1. (可选。前面cp -a已携带正确权限)文件授权给named用户组。(这样设计可能是为了安全)否则将导致服务进程无法加载区域配置文件。

ll /var/named/apple.com.zone # 返回信息-rw-r--r-- root:root chown root:named /var/named/apple.com.zone # 也可以赋予其他人权限 chmod 777 /var/named/apple.com.zone ll /var/named/apple.com.zone # 返回信息-rw-r--r-- root:named

5. ⬅️逆向解析配置 44.33.22.11.zone

手动创建文件或复制模版,根据域名修改文件名。文件名应该与/etc/named.rfc1912.zone中的配置文件名保持一致。
1.

cp -a /var/named/named.loopback /var/named/44.33.22.11.zone
  1. 添加PTR指针记录,让IP能找到对应的域名。由于一个ip对应的服务器上可能有多个Web应用,所以PTR记录也可能有多个。


    如果named.rfc1912.zone中配置的反向解析为"44.33.22.ip-addr.arap"那么应该配置为"11 PTR www.apple.com."数字为ip最后一段,因为我的配置是四段写全,所以最后不需要补写作@。

nano /var/named/44.33.22.11.zone
$TTL 1D @ IN SOA dns.apple.com. admin.apple.com. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum @ NS dns.apple.com. dns A 172.31.5.100 // ⬅️⚠️替换成你的服务器IP,即虚拟机IP。 @ PTR www.apple.com. @ PTR oa.apple.com.
  1. (可选,因为前面cp时已使用-a参数)修改文件所有者为named用户组

chown root:named /var/named/44.33.22.11.zone

再次检查配置

  1. 检查主配置及其包含的区域主配置和apple.com区域正向解析配置。-z参数表示检查include包含的下级配置文件。

named-checkconf -z

返回信息最后两行为正向和逆向配置文件已经加载。

zone localhost.localdomain/IN: loaded serial 0 zone localhost/IN: loaded serial 0 zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0 zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0 zone 0.in-addr.arpa/IN: loaded serial 0 zone apple.com/IN: loaded serial 0 zone 11.22.33.44.in-addr.arpa/IN: loaded serial 0
  1. 检查详细的正向解析和逆向解析记录配置

named-checkzone apple.com /var/named/apple.com.zone
named-checkzone apple.com /var/named/44.33.22.11.zone

启动服务

systemctl restart named
systemctl status named

返回的信息中包含一些关于ipv6的解析服务器找不到的错误,不影响

● named.service - Berkeley Internet Name Domain (DNS) Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled) Active: active (running) since Sun 2024-10-20 09:03:59 EDT; 5s ago Process: 80994 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS) Process: 81012 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS) Process: 81008 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; e> Main PID: 81013 (named) Tasks: 7 (limit: 22874) Memory: 23.5M CGroup: /system.slice/named.service └─81013 /usr/sbin/named -u named -c /etc/named.conf Oct 20 09:03:59 localhost.localdomain named[81013]: network unreachable resolving './DNSKEY/IN': 2001:503:ba3e::2:30#53 Oct 20 09:03:59 localhost.localdomain named[81013]: network unreachable resolving './NS/IN': 2001:503:ba3e::2:30#53 Oct 20 09:03:59 localhost.localdomain named[81013]: network unreachable resolving './DNSKEY/IN': 2001:500:9f::42#53 Oct 20 09:03:59 localhost.localdomain named[81013]: network unreachable resolving './NS/IN': 2001:500:9f::42#53 Oct 20 09:03:59 localhost.localdomain named[81013]: network unreachable resolving './DNSKEY/IN': 2001:500:2d::d#53 Oct 20 09:03:59 localhost.localdomain named[81013]: network unreachable resolving './NS/IN': 2001:500:2d::d#53 Oct 20 09:03:59 localhost.localdomain named[81013]: network unreachable resolving './DNSKEY/IN': 2001:500:a8::e#53 Oct 20 09:03:59 localhost.localdomain named[81013]: network unreachable resolving './NS/IN': 2001:500:a8::e#53 Oct 20 09:04:00 localhost.localdomain named[81013]: network unreachable resolving './DNSKEY/IN': 2001:7fe::53#53 Oct 20 09:04:00 localhost.localdomain named[81013]: resolver priming query complete

关闭防火墙:

systemctl stop firewalld

(可选,正规做法)防火墙放通服务端口:
firewall-cmd --add-service=bind --permanent
firewall-cmd --reload

======== 以下为客户端 =========

  1. Windows宿主机或再开一台虚拟机客户端桥接,能ping通服务器IP。

  2. (重要)手动设置dns服务IP。 把自动的114.114.114.114或8.8.8.8设置为named服务器的局域网IP 形如172.31.5.100 ,(如果是同一台机器既做服务器又做客户端,那么如图填127.0.0.1也行)。


    这样ping/host/dig命令就会强制从我们自健的dns服务器查询信息。

  • 方式一 命令行:

1. nmcli connection modify ens33 ipv4.dns "172.31.5.100" ⬅️替换成你的服务器IP 2. nmcli device down ens33 3. nmcli device up ens33
  • 方式二 图形界面设置:


    设置/网络/以太网卡⚙️/ipv4/关闭DNS自动开关,设置为127.0.0.1你的服务器IP

4-2手动设置dns.png
  1. 测试域名解析结果

  • host命令

    host apple.com

    返回下面信息即为成功

    apple.com has address 11.22.33.44

    🎉终于成功!🎉

  • nslookup命令(Windows上也有这个命令)

    nslookup apple.com
    Server: 127.0.0.1 Address: 127.0.0.1#53 Name: apple.com Address: 11.22.33.44 Name: apple.com Address: ::1
  • dig命令返回更详细的信息(dig可能需要额外安装)

    dig apple.com
    dig apple.com ; <<>> DiG 9.11.36-RedHat-9.11.36-13.el8 <<>> apple.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55341 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ; COOKIE: de738ca644787f1cafb1a98f67150dd60ee678225ba29890 (good) ;; QUESTION SECTION: ;apple.com. IN A ;; ANSWER SECTION: apple.com. 86400 IN A 11.22.33.44 ;; AUTHORITY SECTION: apple.com. 86400 IN NS dns.apple.com. ;; ADDITIONAL SECTION: dns.apple.com. 86400 IN A 11.22.33.44 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sun Oct 20 10:04:06 EDT 2024 ;; MSG SIZE rcvd: 116
  1. 其它测试

  • 测试二级域名正向
    host www.apple.com
    host oa.apple.com

  • 测试反向解析
    nslookup 11.22.33.44

总结

废了这么大劲,最后获取到一行信息。梳理下映射和包含关系。

  1. 客户端请求apple.com

  2. 搜索/etc/hosts文件看里面有相关映射没有,没有继续

  3. 请求网卡DNS地址(已手动修改为局域网自建DNS服务器IP)

  4. 服务器DNS服务监听来自客户端的请求

  5. 查询named.conf主文件,此文件include区域主文件

  6. 查询named.rfc1912.zone,此文件包含域名指向到域名区域配置文件路径

  7. 查询apple.com.zone,根据解析记录中的*@ A 11.22.33.44*找到域名对应的服务器IP。

服务端命令一览:

1 yum list installed | grep bind 2 pwd 3 ls 4 tar -zxvf bind-installer.tar.gz // 压缩包名可能与实际略有差异,tab自动补全不容易出错 5 rpm -iv --nodeps --force ./bind-installers/*.rpm // 文件夹名可能与实际略有差异,tab自动补全不容易出错 6 yum list installed | grep bind 7 nano /etc/named.conf 8 cat /var/named/named.ca 9 nano /etc/named.rfc1912.zones 10 cp -a /var/named/named.localhost /var/named/apple.com.zone 11 cd /var/named 12 ll 13 nano apple.com.zone 14 cp -a /var/named/named.loopback /var/named/44.33.22.11.zone 15 nano 44.33.22.11.zone 16 named-checkconf -z 17 named-checkzone apple.com /var/named/apple.com.zone 18 named-checkzone apple.com /var/named/44.33.22.11.zone 19 systemctl stop firewalld 20 systemctl start named 21 systemctl status named 22 host apple.com 23 host 11.22.33.44 24 history

参考

bind官网
配置DNS服务的正反向解析
反向解析不生效原因

Last modified: 25 十一月 2024