DNS服务器

TOC

了解DNS服务

什么是域名?

是互联网上用来标识和定位网站、服务器等资源的文字形式的地址。它的主要作用是让人类用户方便记忆和使用,而不是直接使用难以记忆的IP地址。

域名的关系和组成

域名层级结构:

层级 说明 示例
根域 最高层级,用 . 表示 .
顶级域 (TLD) 组织域/国家地区域 .com.cn.net
二级域 注册的个性化名称 baidugoogle
主机名 设备的具体标识 wwwimages

举例说明: 我们常见的域名:www.baidu.com,实际域名地址:www.baidu.com.
FQDN(完全限定域名)主机名.二级域名.顶级域.根域,比如:www.baidu.com.

什么是DNS服务?

DNS全称是Domain Name System,域名系统,用于将域名解析为IP地址或者相反作用的系统。比如:解析www.example.com的IP地址为192.168.1.100。

主要作用: 支持正向解析(域名 → IP)和反向解析(IP → 域名),方便人类将容易记住的域名翻译为计算机可识别的IP地址。还能够分布式管理,提高访问速度和可靠性。

核心概念:

  • 域名(Domain Name):如:example.com
  • 记录类型(Record Type):A、AAAA、CNAME、MX、NS等
  • DNS 服务器(DNS Server):负责存储和解析域名

DNS解析过程

DNS解析可以分为递归解析迭代解析,一般客户端使用递归解析。

  1. 客户端查询本地缓存
    • 先查看操作系统本地缓存是否有该域名对应的 IP
  2. 查询本地 DNS 服务器
    • 如果缓存没有,则向配置的 DNS 服务器发送请求
  3. 递归查询过程
    • DNS 服务器向根 DNS 服务器请求 .com 顶级域信息
    • 根服务器返回 .com 顶级 DNS 服务器地址
    • 向顶级 DNS 服务器请求 example.com 的权威 DNS 服务器
    • 权威 DNS 返回域名的 IP
  4. 返回结果给客户端
    • 客户端收到 IP 后,建立连接访问网站
    • 同时缓存结果,加快下次访问速度

DNS服务搭建

DNS安装

yum -y install bind bind-utils

配置文件

主配置文件

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

options {
	listen-on port 53 { 127.0.0.1; 192.168.101.201; };   # DNS监听IP
	listen-on-v6 port 53 { ::1; };      # ipv6监听地址
	forwarders {    # 设置上游DNS,所有未解析的DNS查询会被转发到这些服务器
	  192.168.101.1;
	  8.8.8.8;
	};
	allow-query     { any; };         # 允许查询的主机
	directory       "/var/named";     # zone文件目录
	pid-file "/run/named/named.pid";  # pid文件位置
	recursion yes;                    # 是否允许递归查询
	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";

	dnssec-validation yes;
	managed-keys-directory "/var/named/dynamic";
	geoip-directory "/usr/share/GeoIP";
	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";
};
// 正向解析区域配置
zone "example.com" IN {
    type master;
    file "example.com.zone";
    allow-update { none; };
};
// 反向解析区域配置
zone "101.168.192.in-addr.arpa" IN {
    type master;
    file "192.168.101.zone";
    allow-update { none; };
};

在主配置文件指定文件名之后需要在/var/named/目录下添加该文件,如上我的文件名是example.com.zone和192.168.10.zone。

子配置文件

可以在Zone配置文件中添加某个二级泛域名的解析记录。
Zone正向解析配置文件:/var/named/example.com.zone

$TTL    86400                     ; 默认TTL(1天)
@       IN      SOA     dns.example.com. admin.example.com. (
                2024090101      ; 序列号 (格式:YYYYMMDDNN)
                3600            ; 刷新时间 (1小时)
                1800            ; 重试时间 (30分钟)
                604800          ; 过期时间 (1周)
                86400           ; 最小TTL (1天)
                )

; ------------ 基础记录 ------------
@       IN      NS      dns.example.com.       ; 域名服务器记录
dns     IN      A       192.168.101.201        ; DNS服务器IP
; ------------ 其他常用记录 ------------
@       IN      A       192.168.101.201     ; 根域名A记录(网站)
blog    IN      A       192.168.101.202
www     IN      A       192.168.101.203
; ------------ CNAME类型记录 ------------
test    IN      CNAME   www.example.com.    ; WWW别名

Zone反向解析配置文件:/var/named/192.168.10.zone

$TTL 86400
@   IN  SOA dns.example.com. admin.example.com. (
        2025082701 ; 序列号
        3600       ; 刷新
        1800       ; 重试
        604800     ; 过期
        86400 )    ; 最小TTL

; ---------- 名称服务器 ----------
      IN  NS    dns.example.com.
; ----------- PTR 记录 -----------
201   IN  PTR   email.example.com.
202   IN  PTR   blog.example.com.
203   IN  PTR   www.example.com.

常用记录类型

  • A:IPv4地址
  • AAAA:IPv6地址
  • CNAME:别名
  • MX:邮件服务器
  • NS:权威DNS

配置文件检测

如果你需要检查正向解析区域文件和反向解析区域文件的语法是否正确可以使用named-checkzone命令即可,使用如下:

# 检查正向解析区域文件
named-checkzone example.com /var/named/example.com.zone
# # 检查反向解析区域文件
named-checkzone 101.168.192.in-addr.arpa /var/named/192.168.101.zone

语法正确会有如下信息提示:

$ named-checkzone example.com /var/named/example.com.zone
zone example.com/IN: loaded serial 2024090101
OK

DNS服务管理

# 启动DNS服务
systemctl start named
# 设置DNS服务开机自启动
systemctl enable named
# 检查DNS服务状态
systemctl status named

测试阶段

使用dig或者nslokkup命令进行测试

# 指定DNS服务器为192.168.101.201
dig @192.168.101.201 www.example.com
nslookup www.example.com 192.168.101.201

或者配置本地的DNS服务器地址为192.168.101.201进行解析测试

正向解析测试

$ nslookup blog.example.com
Server:		192.168.101.201
Address:	192.168.101.201#53

Name:	blog.example.com
Address: 192.168.101.202

$ nslookup www.example.com
Server:		192.168.101.201
Address:	192.168.101.201#53

Name:	www.example.com
Address: 192.168.101.203

$ nslookup test.example.com
Server:		192.168.101.201
Address:	192.168.101.201#53

test.example.com	canonical name = www.example.com.
Name:	www.example.com
Address: 192.168.101.203

反向解析测试

$ nslookup 192.168.101.201
Server:		192.168.101.201
Address:	192.168.101.201#53

201.101.168.192.in-addr.arpa	name = email.example.com.

$ nslookup 192.168.101.202
Server:		192.168.101.201
Address:	192.168.101.201#53

202.101.168.192.in-addr.arpa	name = blog.example.com.

$ nslookup 192.168.101.203
Server:		192.168.101.201
Address:	192.168.101.201#53

203.101.168.192.in-addr.arpa	name = www.example.com.