一、DNS
1. DNS概述
DNS(域名系统、Domain Name System)是将域名和IP地址相互映射的一个分布式数据库,方便用户访问互联网。IP地址是互联网上所有设备的唯一标识,设备之间的通信依赖于IP地址。DNS使得用户在访问网站时不需要记住复杂的数字IP地址,而是可以使用容易记忆的域名。DNS使用的端口是53号端口,它同时支持TCP和UDP协议;UDP适用于快速解析域名,TCP适用于区域传输,也就是与主域名服务器通信查询解析是否正确。
2. 域名结构
域名是以点分隔,被分为若干个部分,从右到左依次阅读。以百度完整域名为例:
www.baidu.com.cn.
- .:根域名,最高一级的域名,类似Linux系统里的根目录。在实际使用中会省略。
- .cn:顶级域名,也叫做一级域名。一般代表一种类型的组织机构或者国家地区。
- .com.cn:二级域名。代表顶级域内的一种类型的组织机构。
- baidu.com.cn:注册该域名的实体。
- www:主机名,也可以称为子域名或三级域名。
3. DNS解析过程
- 用户在客户端中通过域名发起访问请求。
- 客户端首先检查本地缓存和文件/etc/hosts,看是否已经存储了该域名的IP地址。
- 如果在本地没有找到域名对应的IP地址,客户端会向配置的本地域名服务器发起递归查询请求。
- 本地DNS服务器如果没有缓存该域名的IP地址,它会向根域服务器查询。
- 根域服务器返回顶级域名服务器的IP地址给本地DNS服务器,本地域名服务器再向顶级域名服务器发送查询请求。
- 顶级域名服务器返回二级域名服务器的IP地址给本地DNS服务器,本地域名服务器再向二级域名服务器发送查询请求。
- 二级域名服务器返回子域名服务器的IP地址给本地DNS服务器,本地域名服务器再向子域名服务器发送查询请求。
- 子域名服务器返回域名对应的IP地址给本地域名服务器,本地域名服务器将IP地址存入换成当中,再将IP告诉客户端。
- 客户端获得IP后,根据IP访问对应服务。
递归查询:客户端向DNS服务器发起查询请求,如果该服务器没有缓存域名对应的IP,它会代替客户端去其他DNS服务器查询,直到找到答案或者查询失败。
迭代查询:客户端向DNS服务器发起查询请求,如果该服务器没有缓存域名对应的IP,它会提供另一个DNS服务器的地址,让客户端去那里查询。这个过程会一直持续,直到找到答案或者查询失败。
迭代查询过程中,客户端需要自己管理查询过程,直到找到对应IP;递归查询过程中,DNS服务器代替客户端管理查询过程。
4. DNS解析类型
正向解析、反向解析和主备解析是DNS系统中三个重要的解析类型。
- 正向解析:将域名解析为IP地址。
- 反向解析:将IP地址解析为域名。
- 主从解析:DNS服务器之间的数据同步和负载分担机制,提高DNS服务的可用性和可靠性。
5. curl命令 – 文件传输工具
curl命令来自英文词组CommandLine URL的缩写,功能是在Shell终端界面中基于URL规则进行文件传输工作。
curl [选项] 文件
常见的选项:
选项 | 功能 |
---|---|
-I | 显示网站的响应头信息 |
-K | 读取指定文件 |
-o | 设置文件下载到本地的路径 |
二、DNS安装部署
1. BIND概述
1.1 安装BIND
-
执行下面的命令,安装BIND。BIND是一款广泛使用的DNS服务软件。
apt -y instll bind9
-
安装完成后,会生成一个/etc/bind目录。
ls /etc/bindbind.keys db.127 db.empty named.conf named.conf.local rndc.key db.0 db.255 db.local named.conf.default-zones named.conf.options zones.rfc1918
主要配置文件:
- db.empty:DNS区域文件的模板文件。
- named.conf:BIND服务的主配置文件,引入其他配置文件。
- named.conf.local:包含本地配置区域,如区域文件的位置、视图的定义等。
- named.conf.default-zones:包含BIND服务默认配置的区域,通常是一些根区域和常用的顶级域。
- named.conf.options:BIND服务的其他配置。
1.2 主要配置文件说明
-
name.conf文件。
// This is the primary configuration file for the BIND DNS server named. // // Please read /usr/share/doc/bind9/README.Debian.gz for information on the // structure of BIND configuration files in Debian, *BEFORE* you customize // this configuration file. // // If you are just adding zones, please do that in /etc/bind/named.conf.localinclude "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; include "/etc/bind/named.conf.default-zones";
- include:引入配置文件。
-
named.conf.local文件。
// // Do any local configuration here //// Consider adding the 1918 zones here, if they are not used in your // organization //include "/etc/bind/zones.rfc1918";
- 建议在本文件中进行本地的区域配置。
-
named.conf.default-zones文件。
// prime the server with knowledge of the root servers zone "." {type hint;file "/usr/share/dns/root.hints"; };// be authoritative for the localhost forward and reverse zones, and for // broadcast zones as per RFC 1912zone "localhost" {type master;file "/etc/bind/db.local"; };zone "127.in-addr.arpa" {type master;file "/etc/bind/db.127"; };zone "0.in-addr.arpa" {type master;file "/etc/bind/db.0"; };zone "255.in-addr.arpa" {type master;file "/etc/bind/db.255"; };
-
本文件是BIND服务默认的特定区域配置,包括根域服务器区域、本地主机的正向区域和反向区域、网段和广播的反向区域。
-
区域配置的常见格式。
zone "example.com" {type master;file "/etc/bind/db.example.com";allow-transfer {IP;};master {IP;}; };
- zone “example.com”:定义了一个适用于example.com的区域配置。
- type:区域的类型,常见类型包括:master、slave等。
- file:区域数据文件的存放位置。
- allow-transfer {IP;};:设置能够请求区域传输的服务端IP,主要用于主服务器。
- master {IP;};:设置主服务器的IP,告诉从服务器可以该IP地址请求区域数据。
-
-
named.conf.options文件。
options {directory "/var/cache/bind";// If there is a firewall between you and nameservers you want// to talk to, you may need to fix the firewall to allow multiple// ports to talk. See http://www.kb.cert.org/vuls/id/800113// If your ISP provided one or more IP addresses for stable// nameservers, you probably want to use them as forwarders.// Uncomment the following block, and insert the addresses replacing// the all-0's placeholder.// forwarders {// 0.0.0.0;// };//========================================================================// If BIND logs error messages about the root key being expired,// you will need to update your keys. See https://www.isc.org/bind-keys//========================================================================dnssec-validation auto;listen-on-v6 { any; }; };
- 用于设置服务器的基本运行参数,包括监听端口、允许查询的客户端等设置。
-
db.empty文件。
; BIND reverse data file for empty rfc1918 zone ; ; DO NOT EDIT THIS FILE - it is used for multiple zones. ; Instead, copy it, edit named.conf, and use that copy. ; $TTL 86400 @ IN SOA localhost. root.localhost. (1 ; Serial604800 ; Refresh86400 ; Retry2419200 ; Expire86400 ) ; Negative Cache TTL ; @ IN NS localhost.
- 本文件是区域数据文件的模板文件。包括记录的存活时间(TTL)、起始授权机构(SOA)记录、服务器和IP记录。
2. 配置正向解析
-
编辑named.conf.options文件,在文件中加入以下内容,用于配置网络接口和允许进行DNS查询的客户端地址范围。
listen-on port 53 {192.168.1.128;}; allow-query {192.168.1.0/24;};
-
编辑named.conf.local文件,在文件中定义区域的相关配置,设置一个匹配域名xy104.com的区域。
zone "xy104.com" {type master;file "/etc/bind/xy104.local"; };
-
复制区域数据文件目标,复制后的文件路径要和区域设置里的路径保持一致。修改文件,设置域名xy104.com对应的IP等信息。
$TTL 86400 @ IN SOA xy104.com. admin.xy104.com. (1 ; Serial604800 ; Refresh86400 ; Retry2419200 ; Expire86400 ) ; Negative Cache TTL ; @ IN NS xy104.com. @ IN A 192.168.1.128 www IN A 192.168.1.128
-
配置完成后,重启BIND服务。
systemctl restart bind9
-
编辑网络配置文件,重新设置DNS的IP。
network:ethernets:ens33:dhcp4: noaddresses: [192.168.1.128/24]gateway4: 192.168.1.254nameservers:addresses: [192.168.1.128]
-
查看正向解析是否设置成功。
nslookup www.xy104.comServer: 127.0.0.53 Address: 127.0.0.53#53Non-authoritative answer: Name: www.xy104.com Address: 192.168.1.128
3. 配置反向解析
-
编辑named.conf.local文件,在文件中定义区域的相关配置,设置一个匹配域名xy104.com的反向区域。
zone "1.168.192.in-addr.arpa" {type master;file "/etc/bind/xy104.local"; };
-
复制区域数据文件目标,复制后的文件路径要和区域设置里的路径保持一致。修改文件,设置域名xy104.com对应的IP等信息。
$TTL 86400 @ IN SOA xy104.com. admin.xy104.com. (1 ; Serial604800 ; Refresh86400 ; Retry2419200 ; Expire86400 ) ; Negative Cache TTL ; @ IN NS xy104.com. @ IN A 192.168.1.128 www IN A 192.168.1.128 128 IN PTR www.xy104.com.
-
配置完成后,重启BIND服务。
systemctl restart bind9
-
查看反向解析是否设置成功。
nslookup 192.168.1.128128.1.168.192.in-addr.arpa name = www.xy104.com.
4. 配置主从解析
-
基于前面配置实现主从解析。原有的主机作主服务器,编辑原有的named.conf.local文件,修改区域配置。保存文件后,重启BIND服务。
zone "xy104.com" {type master;file "/etc/bind/xy104.local";allow-transfer {192.168.1.129;}; };zone "1.168.192.in-addr.arpa" {type master;file "/etc/bind/xy104.local";allow-transfer {192.168.1.129;}; };
-
配置主服务器的网络配置,设置两个DNS,并重启网络服务。
network:ethernets:ens33:dhcp4: noaddresses: [192.168.1.128/24]gateway4: 192.168.1.254nameservers:addresses: [192.168.1.128, 192.168.1.129]
-
在另一台主机上安装BIND服务。
apt -y install bind9
-
编辑named.conf.options文件,在文件中加入以下内容.
listen-on port 53 {any;}; allow-query {any;};
-
编辑named.conf.local文件,修改从服务器的区域配置。
zone "xy104.com" {type slave;file "xy104.local";masters {192.168.1.128;}; };zone "1.168.192.in-addr.arpa" {type slave;file "xy104.local";masters {192.168.1.128;}; };
-
重启从服务器的BIND服务。
systemctl restart bind9
-
配置从服务器网络,然后重启网络服务。
network:ethernets:ens33:dhcp4: noaddresses: [192.168.1.129/24]gateway4: 192.168.1.254nameservers:addresses: [192.168.1.128, 192.168.1.129]
-
验证主从解析是否存在问题。