因為最近處理公司內網(wǎng)DNS系統(tǒng),借此機會記錄一下DNS的相關知識以防后面遺忘笨蚁。
在日常使用中铡溪,我們訪問網(wǎng)站常用的是域名,即www.baidu.com衡蚂,但是這個域名只是為了使用方便而增加的一個方式窿克,我們可以看做別名,其訪問域名毛甲,計算機會將其解析為IP地址來將請求轉發(fā)到相對應的機器上進行對請求的處理年叮。而將域名轉為或者說將域名和IP地址對應起來的方式叫做DNS(域名解析服務)。
DNS簡介
DNS提供的服務分為兩種:
正向解析:也就是常用將域名解析為IP地址玻募,就可以通過域名來查找對應的IP地址只损,例如:www.baidu.com -> xxx.xxx.xxx.xxx
反向解析:也稱逆向解析,是將IP地址解析為域名七咧,可以通過IP地址來尋找對應的域名跃惫,例如:xxx.xxx.xxx.xxx -> www.baidu.com
DNS服務使用的是兩個端口,一個是UDP的53端口艾栋,用于解析DNS爆存,另一個是TCP的53端口,用于連接DNS裹粤。
DNS域
DNS域名的可以看做倒樹狀結構:根域名 -> 頂級域名 -> 二級域名 -> 三級域名 -> 四級域名
以下是從網(wǎng)上找到的一個圖片可以用作參考:
根域名:‘.’终蒂,一般在寫域名時會省略
頂級域名:由國家或者組織使用,例如:com\cn\edu...
二級域名:在頂級域名下個人或者組織使用的遥诉,例如:baidu.com
三級域名:在已經(jīng)注冊的二級域名下衍生的拇泣,例如:test.baidu.com、dd.baidu.com
查詢過程
查詢過程老生常談了矮锈,這里只做簡單的查詢過程描述霉翔。一般來說,瀏覽器輸入域名之后苞笨,DNS解析會經(jīng)過一下幾個過程:
?-- 首先搜索瀏覽器的DNS緩存债朵,緩存中維護一張域名與IP地址的對應表子眶;
?-- 若瀏覽器中沒有命中,則會從操作系統(tǒng)的DNS中搜索序芦;
?-- 若操作系統(tǒng)中的DNS緩存依然沒有的話臭杰,則會向本地DNS服務器發(fā)送域名,本地DNS服務會遞歸查詢自己的DNS緩存谚中,查找成功則返回結果渴杆;
?-- 若本地DNS服務器依然沒有命中,則會向上級DNS服務進行迭代查詢宪塔;
??1磁奖、本地DNS服務器向根DNS服務發(fā)起請求,獲取頂級DNS服務器地址某筐;
??2比搭、本地DNS服務器向頂級DNS服務器發(fā)起請求,獲取權限DNS服務器地址南誊;
??3身诺、本地DNS服務器向權限DNS服務器地址發(fā)起請求,獲取該域名對應的IP地址弟疆;
?-- 本地DNS服務器將得到的IP地址返回給操作系統(tǒng)戚长,同時增加一條緩存盗冷;
?-- 操作系統(tǒng)將IP地址返回給瀏覽器怠苔,同時增加一條緩存;
?-- 瀏覽器獲取正確的解析地址仪糖,也會增加一條緩存柑司;
內網(wǎng)DNS服務器搭建
DNS服務器:192.168.33.131
測試服務器:192.168.33.128
軟件版本:bind-9.11.4-26.P2.el7_9.9.x86_64
安裝bind
# 安裝bind服務
[root@localhost ~]# yum -y install bind
# 查看bind軟件的相關文件
[root@localhost ~]# rpm -qc bind
/etc/logrotate.d/named
/etc/named.conf # 主配置文件
/etc/named.iscdlv.key
/etc/named.rfc1912.zones # 區(qū)域配置文件
/etc/named.root.key
/etc/rndc.conf
/etc/rndc.key
/etc/sysconfig/named
/var/named/named.ca
/var/named/named.empty
/var/named/named.localhost # 區(qū)域數(shù)據(jù)配置文件(正向)
/var/named/named.loopback # 區(qū)域數(shù)據(jù)配置文件(反向)
配置文件介紹
主配置文件:/etc/named.conf
# 全局選項
options {
# 定義監(jiān)聽的IP地址和端口,若注釋則監(jiān)聽全部IP的53端口
listen-on port 53 { 192.168.33.131; };
# 定義IPV6地址
listen-on-v6 port 53 { ::1; };
# 定義區(qū)域數(shù)據(jù)文件位置
directory "/var/named";
# 定義 dump cache位置
dump-file "/var/named/data/cache_dump.db";
# 指定服務器統(tǒng)計信息路徑
statistics-file "/var/named/data/named_stats.txt";
# 記錄內存使用情況
memstatistics-file "/var/named/data/named_mem_stats.txt";
# 在收到rndc secroots指令后锅劝,服務器轉儲安全根的目的文件的路徑名攒驰。默認named.secroots
recursing-file "/var/named/data/named.recursing";
# 指定服務器在通過rndc recursing命令指定轉儲當前遞歸請求到的文件路徑。默認named.recursing
secroots-file "/var/named/data/named.secroots";
# 指定允許哪些主機可以進行普通的DNS查詢,可以是關鍵字:any/localhost/none,也可以是IPV4,IPV6地址
allow-query { any; };
# 設置DNS轉發(fā)方式
# - first:優(yōu)先使用forwarders DNS解析故爵,查詢不到使用本地DNS服務解析玻粪;
# - only: 只使用forwarders DNS解析,查詢不到返回查詢失斘艽埂劲室;
forward first;
# 轉發(fā)地址
forwarders {
114.114.114.114;
202.106.0.20;
};
# 設置遞歸查詢
recursion yes;
# 是否支持dnssec開關
dnssec-enable yes;
# 是否支持dnssec確認開關
dnssec-validation yes;
# ISC DLV KEY 路徑
bindkeys-file "/etc/named.root.key";
# 指定管理密鑰路徑
managed-keys-directory "/var/named/dynamic";
# 指定服務器進程pid文件路徑
pid-file "/run/named/named.pid";
# named生成的TSIG session key寫入文件的路徑
session-keyfile "/run/named/session.key";
};
# 定義日志
logging {
channel default_debug {
file "data/named.run";
# 設置當前日志調試級別
severity dynamic;
};
};
# 定義區(qū)域
zone "." IN {
# 域(master)、從域(slave)结窘、緩存域(hint)很洋、轉發(fā)域(forward)、stub 只負責主域的NS記錄
type hint;
# 指定根域的文件
file "named.ca";
};
# 正反向區(qū)域文件
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
區(qū)域配置文件:/etc/named.rfc1912.zones
# 設置維護域
zone "localhost.localdomain" IN {
# 指定為主域服務器
type master;
# 指定區(qū)域數(shù)據(jù)的zone文件名
file "named.localhost";
# 是否允許輔助dns更新: allow-updata
allow-update { none; };
};
# IPV6的PTR配置文件設定
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
# 配置PRT維護域
zone "1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
區(qū)域數(shù)據(jù)配置文件
/var/named/named.localhost(正向)
# DNS記錄過期時間
$TTL 1D
# 第一個@表示當前區(qū)域的名字隧枫;第二個@表示主dns服務器區(qū)域記錄 SOA 表示dns的SOA記錄類型: rname.invalid. 表示管理該域名管理員郵箱地址(其中'.'代表電子郵件中的'@')
@ IN SOA @ rname.invalid. (
# 序列號
0 ; serial
# 更新時間
1D ; refresh
# 重試時間
1H ; retry
# 過期時間
1W ; expire
# 緩存時間
3H ) ; minimum
# NS:NameServer 即指定dns區(qū)域服務器記錄
NS @
A 127.0.0.1
AAAA ::1
/var/named/named.loopback(反向)
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
AAAA ::1
# 反向與正向代理不同點喉磁,一定要記得域名后面的'.'
PTR localhost.
添加新解析記錄 - 正文開始
以test.com為例
添加的過程基本是 - 添加區(qū)域文件 -> 將區(qū)域文件位置添加到主配置文件中 -> 添加區(qū)域數(shù)據(jù)文件谓苟。
順序可以亂,但是不能落下协怒,區(qū)域文件有兩種:
1涝焙、新建區(qū)域文件,需要添加之后將新增區(qū)域文件位置增加到主配置文件中孕暇;
2纱皆、或者直接將解析記錄添加到默認的區(qū)域文件(/etc/named.rfc1912.zones),不需要再次修改主配置文件芭商。
新增區(qū)域文件
[root@localhost ~]# vim /etc/named.test.zones
# 正向
zone "test.com" IN {
type master;
file "test.com.zone";
};
# 反向(若沒有反向解析的需求派草,可以省略,下面區(qū)域數(shù)據(jù)配置文件也不需要反向解析的配置文件铛楣,即/var/named/192.168.33.zone)
zone "33.168.192.in-addr.arpa" IN {
type master;
file "192.168.33.zone";
};
修改主配置文件
[root@localhost ~]# vim /etc/named.conf
......
include "/etc/named.rfc1912.zones";
# 新增區(qū)域文件位置
include "/etc/named.test.zones";
include "/etc/named.root.key";
新增區(qū)域數(shù)據(jù)配置文件
[root@localhost ~]# cd /var/named/
[root@localhost named]# cp -a named.localhost test.com.zone
[root@localhost named]# vim test.com.zone
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
AAAA ::1
# 新增解析記錄近迁,將dddd.test.com解析為192.168.33.129
dddd IN A 192.168.33.129
[root@localhost named]# cp -a named.loopback 192.168.33.zone
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
AAAA ::1
129 PTR dddd.test.com.
重啟DNS服務
[root@localhost ~]# systemctl restart named
測試解析
在192.168.33.128上配置DNS指向192.168.33.131,來測試是否可正常解析dddd.test.com
[root@localhost ~]# vim /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.33.131
[root@localhost ~]# systemctl restart network
[root@localhost ~]# nslookup dddd.test.com
Server: 192.168.33.131
Address: 192.168.33.131#53
Name: dddd.test.com
Address: 192.168.33.129
[root@localhost ~]# nslookup 192.168.33.129
129.33.168.192.in-addr.arpa name = dddd.test.com.