了解最新公司动态及行业资讯
DNS简介
DNS(Domain Name System,域名系统)乃是互联网的一项核心服务,其核心职能在于负责将域名解析为对应的 IP 地址的系统,以此达成网络设备之间的通信。DNS 作为一种至关重要的网络服务,不单是国际互联网运作的基石,并且在企业内部网络中亦获得了广泛的运用。
DNS的起源与发展
在互联网的早期阶段,主机名与 IP 地址的映射是通过手动维护的 hosts 文件来完成。然而,伴随互联网规模的不断拓展,此种方式已然难以满足需求。1983 年,DNS 系统得以引入,其采用了分布式架构,以分级管理和动态解析取代了集中式的主机文件映射。DNS的作用
1.域名解析:
将域名转换为IP地址,用户输入域名后, DNS服务器将其解析为对应的IP地址。从而实现网络设备之间的通信。2.反向解析:
将IP地址解析为域名,反向解析在某些网络管理和安全场景中非常有用,例如日志分析或追踪访问源。3.分布式查询:
利用分层结构提高解析效率,避免单点故障。4.负载均衡:
DNS可以通过返回不同的IP地址,实现流量的分发,将用户请求引导到不同的服务器,提升系统的可用性和性能。5. 提供邮件服务支持:
通过DNS的MX记录(邮件交换记录),指定邮件服务器的IP地址,用于电子邮件的收发。6. 支持服务发现:
通过SRV记录,帮助服务自动发现其他服务的位置,例如用于负载均衡和服务注册。DNS系统的分布式数据结构
DNS系统的分布式数据结构图
分布式数据结构的核心特点
1. 分层结构:
DNS系统按照层级组织,分为根域、顶级域(TLD)、二级域(SLD)和子域等多个层级,每个层级的服务器仅管理自身负责的域数据。2. 分区管理:
各区域(Zone)独立管理对应域名的解析记录,这些区域通过授权(Delegation)实现互联与协作。3. 分布式存储:
域名数据分布在全球范围内的数百万台DNS服务器上,每台服务器只存储其负责区域的数据。4. 递归与迭代查询:
分布式结构允许在域名解析过程中,逐级向不同层级的服务器查询,实现快速和动态的解析。DNS分层架构
DNS采用树状分层结构,类似于文件系统的目录树:
1. 根域(Root Domain):
位于最顶层,由全球13个逻辑根DNS服务器(共多个物理副本)组成,负责管理顶级域(TLD)的信息。根域用“.”表示,但通常被省略。2. 顶级域(TLD, Top-Level Domain):
位于根域下,分为两种类型:通用顶级域(gTLD):如 .com、.org、.net。
国家代码顶级域(ccTLD):如 .cn(中国)、 .uk(英国)。
每个TLD由对应的顶级域名服务器管理。3. 二级域(Second-Level Domain, SLD):
位于TLD之下,由域名注册者拥有并管理,例如 example.com 中的 example。权威DNS服务器通常管理此级别及以下的域名记录。4. 子域(Subdomain):
二级域名下的扩展,如 www.example.com 中的 www 是 example.com 的子域。DNS区域(Zone)
DNS区域是DNS数据的管理单位。分布式数据结构中,每个服务器只管理特定区域的数据。
1. 主区域(Primary Zone):
负责维护和存储该区域的所有DNS记录,并对外提供解析服务。2. 辅助区域(Secondary Zone):
作为主区域的副本,用于负载分担和容错。3. 授权区域(Delegated Zone):
顶层区域将子域的管理权限授权给下一级区域(例如,.com 将 example.com 的管理权限授权给特定的权威DNS服务器)。DNS服务器的工作流程
DNS采用分布式数据库的方式,由全球范围内的服务器共同维护域名和IP地址的映射关系。工作过程包括以下几步:
1. 用户请求: 用户在浏览器中输入域名(如 www.example.com)。
2. 本地缓存查询:操作系统或浏览器首先查找本地是否有对应的解析记录。
3. 向DNS服务器请求:如果本地无记录,会将请求发送到配置的DNS服务器。
4. 递归查询: 客户端先向本地DNS服务器发送解析请求。如果本地DNS服务器没有对应的缓存记录,则会递归查询其他DNS服务器。
5. 逐级解析:
DNS服务器向 根DNS服务器 开始查询。逐步找到负责该域名的权威DNS服务器。根服务器指向 顶级域名服务器(TLD DNS)(如 .com 的管理服务器)。顶级域名服务器指向 权威DNS服务器,提供目标IP地址。6. 返回结果: 权威DNS服务器返回对应的IP地址,用户设备通过此IP地址连接目标服务器。
DNS的查询方式
在分布式数据结构中,DNS查询主要分为两种方式:
递归查询
本地DNS服务器(递归服务器)代替客户端向不同层级的DNS服务器发起查询,直到获得最终结果。迭代查询
查询服务器向请求者提供下一级服务器的地址,直到查询到目标结果为止。
DNS服务器的类型
1. 缓存DNS服务器:
主要负责缓存已经解析过的域名和对应的IP地址,以提高后续相同域名的解析速度,减轻网络负载。2. 递归DNS服务器:
为客户端提供域名解析服务,负责递归查询整个过程。向其他DNS服务器查询解析结果,递归DNS服务器负责从根域名服务器开始,逐级查询域名解析结果,直到找到目标域名的IP地址。 。 例如:用户常用的ISP提供的DNS服务器或公共DNS服务器(如:8.8.8.8 、 114.114.114.114)。3. 权威DNS服务器:
保存域名与IP地址的实际对应记录,直接为递归服务器或客户端提供解析结果。4. 根DNS服务器:
最高层次的DNS服务器,管理顶级域(如 .com、.cn)。DNS的主要记录类型
A记录:将域名解析为IPv4地址。AAAA记录:将域名解析为IPv6地址。CNAME记录:定义一个域名的别名。MX记录:定义邮件服务器地址。NS记录:指定负责该域名的DNS服务器。TXT记录:存储文本信息(如 验证和SPF记录,用于防止邮件伪造)。PTR记录:反向解析,将IP地址映射为域名。DNS的特点
1. 分布式架构:
采用分布式数据库,全球共享,避免集中式架构的瓶颈。2. 分层查询:
逐级解析,提升解析效率并降低单一服务器的压力。3. 高可用性:
通过冗余和多服务器部署,确保服务稳定。DNS的重要性
人性化:用户可以记住易读的域名,而不需要记住复杂的IP地址。高效通信:通过缓存和分布式架构,加速域名解析,提升网络访问速度。安全性:通过DNSSEC( DNS安全扩展)验证解析数据的真实性。支持多样化服务 :DNS提供服务定位、负载均衡和安全验证功能。全球互联 :DNS是互联网全球联网的核心服务。总之,DNS服务器是互联网的关键基础设施,其主要作用是实现域名到IP地址的转换,保证网络服务的顺利运行。为用户友好的互联网访问和高效通 信提供了保障。
搭建DNS服务器
BIND域名服务基础
BIND(Berkeley Internet Name Daemon)伯克利Internet域名服务。
官方站点:https://www.isc.org/ BIND服务器端程序
主要执行程序:/usr/sbin/named
服务脚本:/etc/init.d/named
默认监听端口:53
主配置文件:/etc/named.conf
保存DNS解析记录的数据文件位于:
/var/named/chroot/var/named/配置文件分析
/etc/named.conf
options { #选项 listen-on port 53 { 127.0.0.1; }; #服务监听端口为53 listen-on-v6 port 53 { ::1; }; #服务监听端口为53(ipv6) 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"; #静态缓存(放内存里的,一般不用) allow-query { localhost; }; #允许连接的客户机 recursion yes; #递归查找 dnssec-enable yes; #DNS加密 dnssec-validation yes; #DNS加密高级算法 dnssec-lookaside auto; #DNS加密的相关东西 /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; #加密用的key(私钥公钥的加密,很强) }; logging { #日志 channel default_debug { file "data/named.run"; #运行状态文件 severity dynamic; #静态服务器地址(根域) }; }; zone "." IN { #根域解析 type hint; master slave file "named.ca"; #根域配置文件 }; include "/etc/named.rfc1912.zones"; #扩展配置文件(新开域名)/etc/named.rfc1912.zones
zone "localhost.localdomain" IN { #本地主机全名解析 type master; #类型为主域 file "named.localhost"; #域配置文件(文件存放在/var/named目录中) allow-update { none; }; #不允许客户端更新 }; zone "localhost" IN { #本地主机名解析 type master; file "named.localhost"; allow-update { none; }; }; zone ".0.ip4.arpa" IN { #ipv6本地地址反向解析 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; }; };/var/named/named.localhost
$TTL 1D #更新为最长1天 @(使用域的域名) IN SOA(权威DNS服务器) @(权威DNS服务器的名称) rname.invalid.(rname@invalid的邮件) ( 0 ; serial #(更改号)十位数的序列号 1D ; 更新频率 1H ; 失败重新尝试时间 1W ; 失效时间 3H ) ; 缓存时间 NS(域名服务器) @(域名服务器名称) A(正向解析记录) 127.0.0.1(正向解析的ip) AAAA(ipv6正向解析) ::1(ipv6正向解析的ip)安装DNS服务器
安装bind程序包
下载最新版本的Bind源码,解压并编译安装,或通过包管理工具安装预编译的Bind RPM包。
官网:
https://www.isc.org/download/https://www.cnblogs.com/lanqing/p/14721170.html
https://blog.51cto.com/cuchadanfan/1710387
yum install bind启动服务
systemctl start named.service systemctl enable named.service #设置自启动状态配置文件
配置主配置文件
vim /etc/named.conf 改动为 listen-on-v6 port 53 { any; }; allow-query { any; };配置zones文件
正向解析配置
添加 正向解析
zone "lzy.com." IN { type master; file "lzy.com.zone"; allow-update { none; }; };反向解析配置
添加反向解析
zone "134.168.192.in-addr.arpa" IN { tpye master; file "134.168.192.zone"; allow-update { none; }; };配置区域配置文件
复制文件
cp /var/named/named.empty /var/named/lzy.com.zone cp /var/named/named.empty /var/named/134.192.168.zone修改权限
chown :named zlt.com.zone正向解析配置
为excesoft.com域名设计正向解析,将/var/named/named.empty复制重命名为excesoft.com.zone,修改文件属组为named,并对其内容进行修改
$TTL 3H @ IN SOA lzy.com. root.lzy.com. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H) ; minimum NS dns.lzy.com. dns A 192.168.134.139 www A 192.168.134.139反向解析配置
为excesoft.com域名设计反向解析,将/var/named/named.empty复制重命名为137.168.192.zone,修改文件属组为named,并对其内容进行修改。
配置网卡
vim /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=static IPADDR1=192.168.134.139 NETMASK=255.255.255.0 GATEWAY=192.168.134.2 DNS1=192.168.134.139启动DNS服务器
systemctl start named.service检查配置文件
named-checkconf配置客户端
修改配置文件:#vim /etc/resolv.conf。写入以下内容:
nameserver 192.168.137.22测试DNS服务器
测试DNS服务器
在客户端计算机上使用命令 nslookup或dig 进行测试。