一、概述
概念
Domain Name Service,一套分布式的域名服務系統,即有多個DNS服務器遍布于世界。每個DNS服務器上存放著大量的機器域名和IP地址的映射,并且是動態更新。眾多網絡客戶端程序都使用DNS協議來向DNS服務器查詢目標主機的IP地址。
作用
正向解析:將已知的域名解析為IP地址反向解析:將已知的IP地址解析為域名
監聽端口
? 53/udp | 53/TCP
默認運行用戶
? named
二、 完全限定域名
FQDN(Fully Qualified Domain Name)
組成
主機名.三級域.二級域名.頂級域名.
案例:www.baidu.com.
域類型
類型 | 舉例 |
---|---|
根域 | . |
頂級域 | cn、hk、uk、org、edu、com、mil、gov、net |
二級域 | baidu、163、sina、sohu |
三、DNS解析過程
客戶端如何解析域名
-
本地DNS緩存
-
本地hosts文件,在DNS服務器誕生之前,所有的主機之間都是通過hosts文件進行的。
-
指向的DNS服務器IP:
遞歸查詢:直接給出解析結果,客戶機與本地DNS服務器之間的查詢。(所答即所問)?迭代查詢:沒有給出解析結果,本地DNS服務器與根等其他DNS服務器之間的查詢。(所答非所問)
四、域名服務器的分類
根據作用
? 1.根域名服務器:最高層次的域名服務器,也是最重要的域名服務器。所有的根域名服務器都知道所有的頂級域名服務器的域名和IP地址。? 2.頂級域名服務器:負責管理該頂級域名注冊的二級域名。? 3.權限域名服務器:負責一個“區”的域名服務器。? 4.本地域名服務器:本地域名服務器不屬于域名服務器的層次結構,但是它對域名系統非常重要。當一個主機發出DNS查詢請求時,這個查詢請求報文就發送給本地域名服務器。
根據應用場景
主服務器(Primary Name server) 為客戶端提供域名解析的主要區域,主DNS服務器宕機,會啟用從DNS服務器提供服務。輔助服務器(Second Name Server) 主服務器DNS長期無應答,從服務器也會停止提供服務,主從區域治安的同步采用周期性檢查+通知的機制,從服務器周期性地檢查主服務器上地記錄情況,一旦發現修改就會同步,另外主服務器上如果又數據被修改了,會立即通知從服務器更新記錄。高速緩存服務器(Cache-only server) 緩存服務器是一種不負責域名數據維護,也不負責域名解析地DNS服務類型。它將用戶經常使用到的域名與IP地址解析記錄保存在主機本地中,來提升下次解析的效率。
五、DNS服務器部署
使用的bind軟件包進行安裝實現DNS解析服務!!
安裝bind包
[root@localhost ~]# yum install -y bind
核心文件解析
[root@localhost ~]# rpm -ql bind
/etc/named.conf #服務主配置文件
/etc/named.rfc1912.zones #服務主配置的額外配置文件
/var/named #區域文件數據目錄
/var/named/named.ca #可信的根域名服務器,不要擅自更改
/var/named/named.empty #區域文件的模版文件
/var/named/named.localhost #區域文件的本地接口模版文件
/var/named/named.loopback #區域文件回環接口的模版文件
/var/named/slaves #從服務器的區域數據存儲目錄
/var/log/named.log #服務日志文件
命令解析
/usr/sbin/named #主服務運行命令
/usr/sbin/named-checkconf #服務主配置語法檢查命令
/usr/sbin/named-checkzone #區域文件配置語法檢查命令
/usr/sbin/named-journalprint #打印named程序運行日志
配置文件詳解
服務主配置文件
六、配置主服務器單點架構
服務主文件配置
//
// 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.html
options {
?? ?listen-on port 53 { 192.168.115.128; };
?? ?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 ? ? { 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 will
?? ? ? cause your server to become part of large scale DNS amplification?
?? ? ? attacks. Implementing BCP38 within your network would greatly
?? ? ? reduce 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 "." IN {
?? ?type hint;
?? ?file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
定義區域文件配置
// named.rfc1912.zones: // // Provided by Red Hat caching-nameserver package // // ISC BIND named zone configuration for zones recommended by // RFC 1912 section 4.1 : localhost TLDs and address zones // and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt // (c)2007 R W Franks // // See /usr/share/doc/bind*/sample/ for example named configuration files. // ? zone "jx.com" IN {type master;file "jx.com.zone";allow-update { none; }; }; ? ? ? zone "115.168.192.in-addr.arpa" IN {type master;file "192.168.115.zone";allow-update { none; }; }; ?
正向解析文件配置
[root@localhost named]# cat jx.com.zone
$TTL 3H
@?? ?IN SOA?? ?jx.com. root.jx.com. (
?? ??? ??? ??? ??? ?0?? ?; serial
?? ??? ??? ??? ??? ?1D?? ?; refresh
?? ??? ??? ??? ??? ?1H?? ?; retry
?? ??? ??? ??? ??? ?1W?? ?; expire
?? ??? ??? ??? ??? ?3H )?? ?; minimum
@?? ??? ?NS?? ?dns1.jx.com.
dns1?? ?A?? ?192.168.115.128
www?? ??? ?A?? ?192.168.115.129
mail?? ?A?? ?192.168.115.130
ftp?? ??? ?A?? ?192.168.115.131
ww?? ??? ?CNAME?? ?www.jx.com.
mail?? ?MX 10?? ?mail.jx.com.
反向解析文件配置
[root@localhost named]# cat 192.168.115.zone
$TTL 3H
@?? ?IN SOA?? ?jx.com. root.jx.com. (
?? ??? ??? ??? ??? ?0?? ?; serial
?? ??? ??? ??? ??? ?1D?? ?; refresh
?? ??? ??? ??? ??? ?1H?? ?; retry
?? ??? ??? ??? ??? ?1W?? ?; expire
?? ??? ??? ??? ??? ?3H )?? ?; minimum
@?? ?NS?? ?dns1.jx.com.
128?? ?PTR?? ?dns1.jx.com.
129?? ?PTR?? ?www.jx.com.
130?? ?PTR?? ?mail.jx.com.
131?? ?PTR?? ?ftp.jx.com.
啟動服務
[root@localhost named]# systemctl start named
解析測試
###配置DNS服務器地址
[root@localhost named]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.115.128
###安裝nslookup
[root@localhost named]# yum install -y bind-utils
###解析測試
[root@localhost named]# nslookup 192.168.115.128
#####或者
[root@localhost named]# dig www.jx.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.15 <<>> www.jx.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10364
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.jx.com.?? ??? ??? ?IN?? ?A
;; ANSWER SECTION:
www.jx.com.?? ??? ?10800?? ?IN?? ?A?? ?192.168.115.129
;; AUTHORITY SECTION:
jx.com.?? ??? ??? ?10800?? ?IN?? ?NS?? ?dns1.jx.com.
;; ADDITIONAL SECTION:
dns1.jx.com.?? ??? ?10800?? ?IN?? ?A?? ?192.168.115.128
;; Query time: 0 msec
;; SERVER: 192.168.115.128#53(192.168.115.128)
;; WHEN: 二 1月 16 12:19:29 CST 2024
;; MSG SIZE ?rcvd: 90
七、 配置DNS主從架構
主服務配置
服務主文件配置
//
// 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.html
options {
?? ?listen-on port 53 { 192.168.115.128; };
?? ?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 ? ? { 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 will
?? ? ? cause your server to become part of large scale DNS amplification?
?? ? ? attacks. Implementing BCP38 within your network would greatly
?? ? ? reduce 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 "." IN {
?? ?type hint;
?? ?file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
故障模擬
###關閉master服務器的NDS服務后,使用客戶端進行解析,觀察解析結果###
[root@localhost named]# systemctl stop named
八、配置DNS智能解析(視圖解析或分區域解析)
智能解析(也稱為視圖解析或分區域解析)允許根據客戶端IP地址返回不同的解析結果。以下是配置Bind DNS實現智能解析的詳細步驟:
1. 安裝Bind軟件
# 在CentOS/RHEL上
yum install bind bind-utils -y
# 在Debian/Ubuntu上
apt-get install bind9 bind9utils -y