基础介绍
DNS 从哪里获取 IP 地址?
- 本地缓存: DNS服务器会将先前查询过的域名和对应的IP地址存储在本地缓存中,以便在后续查询中加快响应速度。如果之前已经查询过某个域名,DNS服务器会直接从本地缓存中获取对应的IP地址。
- 递归查询: 如果本地缓存中没有目标域名的IP地址,DNS服务器会发起递归查询。它首先向根域名服务器发送查询请求,根域名服务器会返回指向负责顶级域(如.com、.net、.org等)的权威域名服务器的IP地址。然后,DNS服务器会向权威域名服务器发送查询请求,直到获取到目标域名的IP地址或者查询失败。
- 转发查询: DNS服务器还可以配置为转发查询,即将未命中本地缓存的查询请求转发给其他DNS服务器处理。通常情况下,本地DNS服务器会将这些请求发送给ISP(Internet Service Provider,互联网服务提供商)提供的DNS服务器或者其他可靠的DNS服务器进行处理。
DNS的作用
- 域名解析: DNS最主要的作用是将域名解析为对应的IP地址。当用户在浏览器中输入一个域名时,DNS系统会将这个域名转换为相应的IP地址,然后浏览器才能通过IP地址找到并访问目标网站。
- 负载均衡: 通过DNS解析可以实现负载均衡,即将多个服务器的域名解析为不同的IP地址并在不同的时间将其返回给用户。这样可以分散流量到多台服务器上,提高网站的访问速度和稳定性。
- 邮箱服务器定位: DNS也用于指定邮件服务器的IP地址。当发送电子邮件时,邮件服务器通过DNS解析找到收件人域名的邮件服务器IP地址,然后发送邮件。
- 防止DNS劫持: DNS还能够通过各种方式来防止DNS劫持,即恶意修改DNS解析结果以实施网络攻击或监视用户活动的行为。例如,DNSSEC(DNS Security Extensions)可以通过数字签名来保护DNS解析结果的完整性和真实性。
- 提供其他网络服务: DNS还可以用于提供其他网络服务,如反向DNS解析(将IP地址解析为域名)、动态域名解析(将动态IP地址映射到域名)、域名注册等。
BIND 简介:
BIND 全称为 Berkeley Internet Name Domain(伯克利因特网名称域系统),BIND 主要有三个版本:BIND4、BIND8、BIND9
BIND8 版本:融合了许多提高效率、稳定性和安全性的技术,而 BIND9 增加了一些超前的理念:IPv6支持、密钥加密、多处理器支持、线程安全操作、增量区传送等等
基础环境
mv /etc/yum.repos.d/CentOS-* /tmp/
systemctl disable firewalld --now && setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
curl -o /etc/yum.repos.d/centos.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
安装DNS服务
[root@dns ~]# cat /etc/named.confyum install -y bind bind-chroot bind-utilsbind-9.9.4-50.el7.x86_64 # 该包为 DNS 服务的主程序包。
bind-chroot-9.9.4-50.el7.x86_64 # 提高安全性。
#bind-chroot 是 bind 的一个功能,使 bind 可以在一个 chroot 的模式下运行,也就是说,bind 运行时的/(根)目录,并不是系统真正的/(根)目录,只是系统中的一个子目录而已,这样做的目的是为了提高安全性,因为在 chroot 的模式下,bind 可以访问的范围仅限于这个子目录的范围里,无法进一步提升,进入到系统的其他目录中。
bind-utils-9.9.4-50.el7.x86_64.rpm #该包为客户端工具,系统默认已经安装的了,它用于搜索域名指令。
DNS 相关配置文件
[root@dns ~]# ll /etc/named.conf`named.conf 是 BIND 的核心配置文件,它包含了 BIND 的基本配置,但其并不包括区域数据`
`/var/named/ 目录为 DNS 数据库文件存放目录,每一个域文件都放在这里`
修改配置文件
[root@dns ~]# cat /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator's Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.htmloptions {# listen-on port 53 { 127.0.0.1; }; 修改为anylisten-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";recursing-file "/var/named/data/named.recursing";secroots-file "/var/named/data/named.secroots";# allow-query { localhost; };allow-query { any; };/* - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.- If you are building a RECURSIVE (caching) DNS server, you need to enable recursion. - 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 willcause your server to become part of large scale DNS amplification attacks. Implementing BCP38 within your network would greatlyreduce such attack surface */recursion yes;dnssec-enable yes;dnssec-validation yes;/* 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;};
};zone "gxl.com" IN {type master;file "gxl.com.zone";allow-update { none; };
};
zone "169.168.192.in-addr.arpa" IN {type master;file "gxl.com.arpa";allow-update { none; };
};include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
以下是详细配置解释:
options
这个部分包含了DNS服务器的一般选项设置listen-on port 53 { any; }
指定DNS服务器监听的端口。在这个示例中,DNS服务器监听在53端口,允许任何IP地址连接到该端口。这意味着DNS服务器会接受来自任何IP地址的DNS查询请求listen-on-v6 port 53 { ::1; }
指定IPv6地址的监听端口。在这个示例中,DNS服务器监听IPv6地址的53端口,只允许本地IPv6地址(::1)连接到该端口directory "/var/named";
指定存储DNS服务器相关数据文件的目录路径。在这个示例中,数据文件存储在/var/named目录下dump-file "/var/named/data/cache_dump.db";
指定DNS服务器在关闭时将缓存内容写入的文件路径。这个文件通常用于调试和故障排除statistics-file "/var/named/data/named_stats.txt";
指定DNS服务器的统计信息输出文件路径,用于记录DNS服务器的运行统计数据memstatistics-file "/var/named/data/named_mem_stats.txt";
指定DNS服务器的内存使用统计输出文件路径,用于记录DNS服务器的内存使用情况recursing-file "/var/named/data/named.recursing";
指定DNS服务器递归查询的记录文件路径secroots-file "/var/named/data/named.secroots";
指定DNS服务器的安全根文件路径allow-query { any; };
指定允许查询的IP地址范围。在这个示例中,允许任何IP地址进行DNS查询
定义正向查询
正向查询是最常见的DNS查询方式之一
正向查询用于将域名解析为IP地址,这样用户就可以使用易记的域名来访问互联网上的各种网络资源,而不需要记忆IP地址
在dns配置文件中加入如下信息:
[root@dns ~]# cat /etc/named.conf
zone "gxl.com" IN {type master;file "gxl.com.zone";allow-update { none; };
};
以下是配置详解:
### 需要强调的是file指定的是文件路径
`type master;` 表明这是主 DNS 服务器,负责提供 "example.com" 区域的数据`file "example.com.zone";` 指定了包含 "example.com" 区域数据的文件的路径`allow-update { none; };` 指定了允许对区域进行动态更新的权限。在这种情况下,none 表示不允许任何动态更新,因此区域数据只能通过手动编辑区域文件来更新
定义反向查询
反向查询是一种从IP地址到域名的查询方式之一
反向查询主要用于安全审计、网络管理和验证IP地址归属等方面。例如,当收到来自某个IP地址的网络流量时,可以通过反向查询确认该IP地址对应的域名,从而了解到流量的来源
[root@dns ~]# cat /etc/named.conf
zone "169.168.192.in-addr.arpa" IN {type master;file "gxl.com.arpa";allow-update { none; };
};
检测是否语法错误
[root@dns ~]# named-checkconf /etc/named.conf
修改正反区域文件(重点)
进入到DNS服务器相关文件存储目录
/var/named/
named.empty
和named.localhost
观察这两个文件 其实是一个实例文件接下来我们复制两份用(找任意一个都可以)
[root@dns ~]# cd /var/named/[root@dns named]# ll
total 24
drwxr-x---. 7 root named 61 Apr 17 03:28 chroot
drwxrwx---. 2 named named 23 Apr 17 04:31 data
drwxrwx---. 2 named named 60 Apr 17 04:32 dynamic
-rw-r-----. 1 root named 2253 Apr 5 2018 named.ca
-rw-r-----. 1 root named 152 Dec 15 2009 named.empty
-rw-r-----. 1 root named 152 Jun 21 2007 named.localhost
-rw-r-----. 1 root named 168 Dec 15 2009 named.loopback
drwxrwx---. 2 named named 6 Oct 16 2023 slaves
[root@dns named]# cp -p named.localhost gxl.com.zone ### 当做正向查询解析来使用
[root@dns named]# cp -p named.localhost gxl.com.arpa ### 当做反向查询解析来使用
修改解析信息(正向)
[root@dns named]# cat gxl.com.zone
$TTL 1D
@ IN SOA gxl.com. admin.gxl.com. (0 ; serial1D ; refresh1H ; retry1W ; expire3H ) ; minimum
@ IN NS dns.gxl.com.
dns IN A 192.168.169.204
exam IN A 192.168.169.204
www IN A 192.168.169.204
mail IN A 192.168.169.205
ftp IN A 192.168.169.204
* IN A 192.168.169.204
gxl.com.
: 指定了主域名为gxl.com
admin.gxl.com.
: 这个字段指定了负责管理该域名的DNS服务器的邮箱地址,形式为admin@gxl.com
。admin
是指定了这个域名的管理员(或者叫根管理员),而gxl.com
是该管理员的邮箱地址的域名部分@ IN NS dns.gxl.com.
:这行指定了域名gxl.com
的DNS服务器是dns.gxl.com
。NS记录(Name Server)指定了管理特定区域的DNS服务器dns IN A 192.168.169.204
:这行指定了主机名dns
对应的IP地址是192.168.169.204
。A记录(Address Record)用于将域名解析为IPv4地址exam IN A 192.168.169.204
:这行指定了主机名exam
对应的IP地址是192.168.169.204
www IN A 192.168.169.204
:这行指定了主机名www
对应的IP地址是192.168.169.204
mail IN A 192.168.169.204
:这行指定了主机名192.168.169.204
ftp IN A 192.168.169.204
:这行指定了主机名ftp
对应的IP地址是192.168.169.204
sun IN A 192.168.169.204
:这行指定了主机名sun
对应的IP地址是192.168.169.204
* IN A 192.168.169.204
:这行指定了主机名*
泛域名解析代表任意主机名
修改解析信息(反向)
[root@dns named]# cat gxl.com.arpa
$TTL 1D
@ IN SOA gxl.com. admin.gxl.com. (0 ; serial1D ; refresh1H ; retry1W ; expire3H ) ; minimum
@ IN NS dns.gxl.com.
204 IN PTR dns.gxl.com.
204 IN PTR www.gxl.com.
204 IN PTR exam.gxl.com.
204 IN PTR ftp.gxl.com.
204 IN PTR sun.gxl.com.
PTR 记录将 IP 地址映射到相应的域名
@ IN NS dns.example.com.
:这行指定了该反向区域的DNS服务器是dns.gxl.com
。NS记录(Name Server)指定了管理特定区域的DNS服务器。
204 IN PTR dns.example.com.
:这行指定了IP地址以204
结尾的主机对应的域名是dns.gxl.com
。PTR记录(Pointer Record)用于将IP地址解析为域名204 IN PTR www.gxl.com.
:这行指定了IP地址以204
结尾的主机对应的域名是www.gxl.com
204 IN PTR exam.gxl.com.
:这行指定了IP地址以204
结尾的主机对应的域名是exam.gxl.com
204 IN PTR ftp.gxl.com.
:这行指定了IP地址以204
结尾的主机对应的域名是ftp.gxl.com
204 IN PTR sun.gxl.com.
:这行指定了IP地址以204
结尾的主机对应的域名是sun.gxl.com
客户机测试
[root@dns ~]# vim /etc/resolv.conf
[root@dns ~]# cat /etc/resolv.conf
# Generated by NetworkManager
#nameserver 114.114.114.114
#nameserver 8.8.8.8
nameserver 192.168.169.204
正向解析
[root@dns ~]# nslookup www.gxl.com
Server: 192.168.169.204
Address: 192.168.169.204#53Name: www.gxl.com
Address: 192.168.169.204[root@dns ~]# host www.gxl.com
www.gxl.com has address 192.168.169.204
反向解析
[root@dns ~]# nslookup 192.168.169.204
204.169.168.192.in-addr.arpa name = exam.gxl.com.
204.169.168.192.in-addr.arpa name = www.gxl.com.
204.169.168.192.in-addr.arpa name = ftp.gxl.com.
204.169.168.192.in-addr.arpa name = sun.gxl.com.
204.169.168.192.in-addr.arpa name = dns.gxl.com.[root@dns ~]# host 192.168.169.204
204.169.168.192.in-addr.arpa domain name pointer ftp.gxl.com.
204.169.168.192.in-addr.arpa domain name pointer exam.gxl.com.
204.169.168.192.in-addr.arpa domain name pointer www.gxl.com.
204.169.168.192.in-addr.arpa domain name pointer dns.gxl.com.
204.169.168.192.in-addr.arpa domain name pointer sun.gxl.com.