基礎介紹
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.