一氛魁、常見的加密算法及其原理
利用加密算法和協(xié)議對通信數(shù)據(jù)進(jìn)行加密是保證安全通訊的常用方法言沐,以保證通訊數(shù)據(jù)的保密性望浩、完整性和可用性次酌。常見的加密算法和協(xié)議有:對稱加密恨课、非對稱加密、單項加密和認(rèn)證協(xié)議岳服。
對稱加密算法
對稱加密算法采用的是單密鑰加密方式剂公,加密和解密使用同一個密鑰,依賴于算法和密鑰吊宋,但其安全性依賴于密鑰而非算法纲辽。在通訊時,發(fā)送方將數(shù)據(jù)按固定大小分割后璃搜,用密鑰和加密算法逐個加密發(fā)送給接收方拖吼,接收方接收到加密數(shù)據(jù)后,通過密鑰和解密算法進(jìn)行解密这吻,并將數(shù)據(jù)組合后還原原始數(shù)據(jù)吊档。此算法具有以下特性和缺陷:
- 特性:
- 加密、解密使用同一密鑰
- 將明文分割成固定大小的塊唾糯,逐個進(jìn)行加密
- 缺陷
- 密鑰過多怠硼,密鑰管理困難
- 密鑰分發(fā)困難,分發(fā)過程安全性難以保證
常見的對稱加密算法有:
- DES:分組式加密算法移怯,以64位為分組對數(shù)據(jù)加密香璃,加解密使用同一個算法。
- 3DES:三重數(shù)據(jù)加密算法舟误,對每個數(shù)據(jù)塊應(yīng)用三次DES加密算法葡秒。
- AES:高級加密標(biāo)準(zhǔn)算法,用于替代原先的DES
- Blowfish:Blowfish算法是一個64位分組及可變密鑰長度的對稱密鑰分組密碼算法脐帝,可用來加密64比特長度的字符串同云。
算法執(zhí)行過程如圖:
非對稱加密算法
非對稱加密采用公鑰加密方法,使用私鑰進(jìn)行解密堵腹,公鑰和私鑰是成對的炸站,公鑰是從私鑰中提取出來的,使用公鑰加密的數(shù)據(jù)們只能使用與之配對的私鑰進(jìn)行解密疚顷,反之亦然旱易。非對稱加密算法主要用于數(shù)字簽名禁偎、密鑰交換和數(shù)據(jù)加密這三個方面。
私鑰:secret key阀坏,僅限個人使用
公鑰:public key如暖,公開給所有用戶獲取
加密流程:
發(fā)送方從接收方獲取由接收方自己的私鑰提取出的公鑰,結(jié)合加密算法對明文進(jìn)行加密后發(fā)送給接收方忌堂,接受方收到密文后盒至,通過自己的密文結(jié)合算法進(jìn)行解密,取得原始數(shù)據(jù)士修。
常見的非對稱加密算法:
- RSA:RSA算法基于一個十分簡單的數(shù)論事實:將兩個大素數(shù)相乘十分容易枷遂,但那時想要對其乘積進(jìn)行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰棋嘲,可用于加密酒唉,也能用于簽名
- DSA:數(shù)字簽名算法,僅能用于簽名沸移,不能用于加解密痪伦。
- DSS:數(shù)字簽名標(biāo)準(zhǔn),可用于簽名雹锣,也可以用于加解密网沾。
- ELGamal:利用離散對數(shù)的原理對數(shù)據(jù)進(jìn)行加解密或數(shù)據(jù)簽名,加解密速度很慢笆制。
單項加密算法
單向加密算法常用于提取數(shù)據(jù)指紋绅这,驗證數(shù)據(jù)的完整性。用這類算法加密的數(shù)據(jù),解密過程是一個二次加密的過程朗和,主要是提取出數(shù)據(jù)的特征碼鸟蟹,也稱數(shù)據(jù)指紋。此類算法只用進(jìn)行加密惨奕,無法進(jìn)行解密。主要用于數(shù)據(jù)完整性校驗和系統(tǒng)賬號密碼校驗。
算法加密過程:
發(fā)送者將明文通過單向加密算法加密生成定長的密文串鸦概,然后傳遞給接收方。接收方在收到加密的報文后進(jìn)行解密甩骏,將解密獲取到的明文使用相同的單向加密算法進(jìn)行加密窗市,得出加密后的密文串。隨后將之與發(fā)送者發(fā)送過來的密文串進(jìn)行對比饮笛,若發(fā)送前和發(fā)送后的密文串相一致咨察,則說明傳輸過程中數(shù)據(jù)正確;若不一致福青,說明數(shù)據(jù)在參數(shù)過程中發(fā)生了變化摄狱。
此類算法的特征:
- 定長輸出:無論原來的數(shù)據(jù)有多大脓诡,其加密結(jié)果長度一樣
- 雪崩效應(yīng):原始數(shù)據(jù)微小變化,將導(dǎo)致加密結(jié)果的巨大變化
- 加密過程不可逆:只能加密媒役,無法解密
密鑰交換
密鑰交換(IKE)是通訊雙方通過交換密鑰來實現(xiàn)數(shù)據(jù)加密解密祝谚。常見交換方式有以下兩種:
1、公鑰加密:將公鑰加密后通過網(wǎng)絡(luò)傳輸?shù)綄Ψ竭M(jìn)行解密酣衷,由于此種方式恨到可能性被截取破解交惯,因此不常用。
2穿仪、DH:Deffie-Hellman商玫,是一種密鑰交換方式。通訊雙方共有一些參數(shù)牡借,共同協(xié)商加密算法拳昌,,都具有各自的私有參數(shù)钠龙,通過共有參數(shù)炬藤、私有參數(shù)和算法信息來進(jìn)行加密,然后雙方交換結(jié)果碴里,交換后再和屬于自己私有的參數(shù)進(jìn)行特殊算法沈矿,經(jīng)過雙方計算后的結(jié)果是相同的,這個結(jié)果就是密鑰咬腋。
A有p和g兩個參數(shù)羹膳,A還有一個屬于自己的私有參數(shù)x;
B 有p和g兩個參數(shù)根竿,A還有一個屬于自己的私有參數(shù)y陵像;
A和B均使用相同的加密算法計算其對應(yīng)的值:value_A=px%g,value_B=py%g
隨后雙方交換計算后的值寇壳,然后再分別使用自己的私有參數(shù)對去求次方醒颖,如:
A拿到value_B值后,對其求x次方得(py%g)x=p^xy%g壳炎;
B拿到value_A值后泞歉,對其求y次方得(px%g)y=p^xy%g;
最終得到的結(jié)果是相同的
整個過程中第三方人員智能獲取到p匿辩、g兩個值腰耙,AB雙方交換的是計算后的結(jié)果,因此這種加密方式是安全的
公鑰基礎(chǔ)設(shè)施(PKI)
公鑰基礎(chǔ)設(shè)施是一個包括硬件铲球、軟件挺庞、人員、策略和規(guī)程的集合睬辐,用于實現(xiàn)基于公鑰密碼機(jī)制的密鑰和證書的生成挠阁、管理宾肺、存儲、分發(fā)和撤銷的功能侵俗。
組成部分:
- 簽證機(jī)構(gòu)CA
- 注冊機(jī)構(gòu)RA
- 證書吊銷列表CRL
- 證書存取庫
數(shù)字證書的格式(x.509 v3)的組成:
- 版本號(version)
- 序列號(serial number):CA用于唯一標(biāo)識此證書
- 簽名算法ID(Signature algorithm identifier)
- 發(fā)行者的名稱:即CA在即的名稱
- 有效期:兩個日期锨用,起始日期和終止日期
- 證書主體名稱:證書擁有者自己的名字
- 證書主體公鑰:證書擁有者自己的公鑰
- 發(fā)行商的唯一標(biāo)識
- 證書主體的唯一標(biāo)識
數(shù)字證書認(rèn)證流程:
SSL/TLS
SSL:(Secure Sockets Layer)安全套接層,是為網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議隘谣。位于TCP/IP協(xié)議與各種應(yīng)用層協(xié)議之間增拥,位數(shù)劇痛需提供安全支持。
SSL協(xié)議分為兩層:
- SSL記錄協(xié)議(SSL Record Protocol):建立在可靠的傳輸協(xié)議上寻歧,為高層協(xié)議提供數(shù)據(jù)封裝掌栅、壓縮、加密等基本功能的支持码泛。
- SSL握手協(xié)議(SSL Handshake Protocol):他建立的SSL記錄協(xié)議之上猾封,用于在實際的數(shù)據(jù)傳輸開始前,通訊雙份進(jìn)行身份認(rèn)證噪珊、協(xié)商加密算法晌缘、交換加密密鑰等。
TLS:(Transport Layer Security)傳輸層安全痢站,與SSL在傳輸層對網(wǎng)絡(luò)連接進(jìn)行加密磷箕。
TLS的分層設(shè)計:
- 最底層:基礎(chǔ)算法原語的實現(xiàn)
- 向上一層:各種算法的實現(xiàn)
- 在向上一層:組合算法實現(xiàn)的半成品
- 用各種組件拼裝而成的各種成品密碼學(xué)協(xié)議軟件
SSL提供的服務(wù):
- 認(rèn)證用戶和服務(wù)器,確保數(shù)據(jù)發(fā)送到正確的客戶機(jī)和服務(wù)器
- 加密數(shù)據(jù)以防止數(shù)據(jù)中途被竊取
- 維護(hù)數(shù)據(jù)的完整性阵难,確保數(shù)據(jù)在傳輸過程中不被改變
SSL會話主要三步:
- 客戶端向服務(wù)器端索要并驗證證書
- 雙方協(xié)商生成“會話密鑰”
- 雙方采用“會話密鑰”進(jìn)行加密通信
SSL握手協(xié)議處理流程:
- 第一階段:ClientHello
- 支持的協(xié)議版本岳枷,
- 客戶端生成一個隨機(jī)數(shù),稍后用戶生成“會話密鑰”
- 支持的壓縮算法
- 第二階段:ServerHello
- 確認(rèn)使用的加密通信協(xié)議版本呜叫,
- 服務(wù)器端生成一個隨機(jī)數(shù)空繁,稍后用于生成“會話密鑰”
- 確認(rèn)使用的加密方法
- 服務(wù)器證書
- 第三階段:
- 驗證服務(wù)器證書,再確認(rèn)無誤后取出器公鑰
- 發(fā)送以下信息給服務(wù)器端:
- 1個隨機(jī)數(shù)
- 編碼變更通知怀偷,表示隨后的信息都將用雙方商定的加密方法和密鑰發(fā)送
- 客戶端握手結(jié)束通知
- 第四階段:
- 收到客戶端發(fā)來的第三個隨機(jī)數(shù)pre-master-key后家厌,計算生成會話所用到的“會話密鑰”
- 向客戶端發(fā)送以下信息:
- 編碼變更通知,表示隨后的信息都將用雙方商定的加密方法和密鑰發(fā)送
- 服務(wù)器端握手結(jié)束通知
二椎工、搭建nginx并使用自簽證書實現(xiàn)https訪問
1、搭建nginx
關(guān)于編譯搭建nginx服務(wù)此前的文章已做說明蜀踏,此處采用yum命令安裝nginx
yum install -y nginx
查看nginx編譯參數(shù):/usr/local/nginx/sbin/nginx -V
[root@localhost /]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.14.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module
若顯示結(jié)果中沒有--with-http_gzip_static_module這個參數(shù)维蒙,需要重新編輯nginx。
2果覆、構(gòu)建私有CA并簽發(fā)https證書
1颅痊、在/etc/pki/CA/private目錄下生成CA私鑰文件cakey.pem
(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
2、生成自簽證書局待,并在/etc/pki/CA/目錄下CA所需的目錄和文件斑响,目錄包括certs菱属、crl和newcerts,若這些目錄已存在則無需創(chuàng)建舰罚。文件包括serial和index.txt纽门。并在證書編號01寫入serial文件中。
[root@localhost private]# cd ..
[root@localhost CA]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:sichuan
Locality Name (eg, city) [Default City]:chengdu
Organization Name (eg, company) [Default Company Ltd]:wxqtest
Organizational Unit Name (eg, section) []:ops
Common Name (eg, your name or your server's hostname) []:ca.wxqtest.com
Email Address []:
[root@localhost CA]# touch /etc/pki/CA/{serial,index.txt}
[root@localhost CA]# ll
總用量 4
-rw-r--r--. 1 root root 2021 10月 22 20:52 cacert.pem
drwxr-xr-x. 2 root root 6 4月 11 2018 certs
drwxr-xr-x. 2 root root 6 4月 11 2018 crl
-rw-r--r--. 1 root root 0 10月 22 21:01 index.txt
drwxr-xr-x. 2 root root 6 4月 11 2018 newcerts
drwx------. 2 root root 23 10月 22 19:51 private
-rw-r--r--. 1 root root 0 10月 22 21:01 serial
[root@localhost CA]# echo 01>/etc/pki/CA/serial
3营罢、創(chuàng)建nginx證書簽署請求赏陵,并將生成的.csr文件通過可靠方式發(fā)送給CA主機(jī)。此處實驗使用的CA主機(jī)和請求nginx證書的主機(jī)為同一臺:
[root@localhost nginx]# mkdir /usr/local/nginx/conf/ssl #存放私鑰的目錄
[root@localhost nginx]# cd /usr/local/nginx/conf/ssl
[root@localhost ssl]# (umask 077;openssl genrsa -out /usr/local/nginx/conf/ssl/nginx.key 2048) #生成私鑰
Generating RSA private key, 2048 bit long modulus
.................+++
...........+++
e is 65537 (0x10001)
[root@localhost ssl]# openssl req -new -key /usr/local/nginx/conf/ssl/nginx.key -out /usr/local/nginx/conf/ssl/nginx.csr -days 365 #生成證書簽署請求
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:sichuan
Locality Name (eg, city) [Default City]:chengdu
Organization Name (eg, company) [Default Company Ltd]:wxqtest
Organizational Unit Name (eg, section) []:ops
Common Name (eg, your name or your server's hostname) []:www.wxqtest.com
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@localhost ssl]# ll
總用量 8
-rw-r--r--. 1 root root 1009 10月 22 22:27 nginx.csr
-rw-------. 1 root root 1675 10月 22 22:20 nginx.key
4饲漾、在CA主機(jī)上簽署證書蝙搔,并發(fā)送給服務(wù)器主機(jī),將證書文件放置到/usr/local/nginx/ssl目錄下即可考传。此實驗中CA主機(jī)與服務(wù)主機(jī)為同一主機(jī)吃型。
[root@localhost ssl]# openssl ca -in /usr/local/nginx/conf/ssl/nginx.csr -out /usr/local/nginx/conf/ssl/nginx.crt -days 365
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 2 (0x2)
Validity
Not Before: Oct 22 14:37:36 2018 GMT
Not After : Oct 22 14:37:36 2019 GMT
Subject:
countryName = CN
stateOrProvinceName = sichuan
organizationName = wxqtest
organizationalUnitName = ops
commonName = www.wxqtest.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
03:87:43:F2:BF:25:E8:3A:23:1E:78:48:C8:72:0D:FA:67:E3:10:FE
X509v3 Authority Key Identifier:
keyid:F3:1D:26:96:F6:ED:56:9B:C7:F6:5E:EE:83:5D:55:F7:6D:C1:DB:A9
Certificate is to be certified until Oct 22 14:37:36 2019 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
[root@localhost ssl]# cat /etc/pki/CA/index.txt
R 191022133936Z 181022143602Z 01 unknown /C=CN/ST=sichuan/O=wxqtest/OU=ops/CN=www.wxqtest.com
V 191022143736Z 02 unknown /C=CN/ST=sichuan/O=wxqtest/OU=ops/CN=www.wxqtest.com
[root@localhost ssl]# ll
總用量 16
-rw-r--r--. 1 root root 5724 10月 22 22:37 nginx.crt
-rw-r--r--. 1 root root 1009 10月 22 22:27 nginx.csr
-rw-------. 1 root root 1675 10月 22 22:20 nginx.key
5、修改nginx配置文件僚楞,加載ssl證書
編輯/usr/local/nginx/conf/nginx.conf文件勤晚。
# HTTPS server
#
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /usr/local/nginx/conf/ssl/nginx.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/nginx.key;
fastcgi_param HTTPS $https if_not_empty;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
然后重啟nginx服務(wù)
[root@localhost conf]# systemctl start nginx.service
[root@localhost conf]# systemctl status nginx.service
● nginx.service - nginx - high performance web server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since 一 2018-10-22 22:58:23 CST; 7s ago
Docs: http://nginx.org/en/docs/
Process: 3897 ExecStop=/bin/kill -s QUIT $MAINPID (code=exited, status=0/SUCCESS)
Process: 4039 ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf (code=exited, status=0/SUCCESS)
Process: 4037 ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf (code=exited, status=0/SUCCESS)
Main PID: 4041 (nginx)
Tasks: 2
CGroup: /system.slice/nginx.service
├─4041 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
└─4042 nginx: worker process
此時查看端口,發(fā)現(xiàn)https的443端口已啟動
[root@localhost conf]# netstat -tan
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
tcp 0 52 192.168.2.110:22 192.168.2.112:58979 ESTABLISHED
tcp6 0 0 :::111 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:631 :::* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN
tcp6 0 0 ::1:6010 :::* LISTEN
然后進(jìn)行測試:
測試成功镜硕。
三运翼、DNS服務(wù)器原理簡述
DNS是Domain Name System的簡稱,即域名系統(tǒng)兴枯,是一個記錄域名和Ip地址相互映射的系統(tǒng)血淌,主要作用是為了解決域名與IP之間的相互轉(zhuǎn)換。DNS是一個網(wǎng)絡(luò)服務(wù)财剖,其端口為53號端口悠夯。通常DNS在查詢時是以UDP協(xié)議來進(jìn)行查詢,一旦無法查詢到完整信息時躺坟,再以TCP協(xié)議進(jìn)行重新查詢沦补。因此,DNS服務(wù)啟動時會同時開啟UDP和TCP協(xié)議的53號端口咪橙。
1夕膀、DNS域名
DNS是一個分布式、分層次的主機(jī)名管理架構(gòu)美侦,采用是層級樹狀結(jié)構(gòu)來劃分域名产舞。一個合法的域名遵循FQDN格式,以域名系統(tǒng)的級別從低到高菠剩,從左而右編寫易猫。
最頂層為根域名,主要負(fù)責(zé)頂級域名的管理;
往下一層是頂級域名具壮,頂級域名主要是定義了一些國家和組織的互聯(lián)網(wǎng)后綴准颓,負(fù)責(zé)管理其所對應(yīng)的二級域名哈蝇;
再下一層為二級域名,負(fù)責(zé)對應(yīng)的的主機(jī)名稱的解析或三級域名的解析攘已;
2炮赦、DNS的查詢方式
DNS的查詢和解析過程分為兩段,第一段是本地客戶端向本地DNS服務(wù)器查詢贯被,第二段是本地服務(wù)器在互聯(lián)網(wǎng)上分布式的DNS服務(wù)器上查詢眼五。由此DNS的查詢方式也分為了兩種,分別是遞歸查詢和迭代查詢彤灶。
遞歸查詢:客戶端發(fā)起DNS解析請求看幼,若本地DNS服務(wù)器無法直接解析域名,則DNS服務(wù)器會向域名系統(tǒng)中個分支的DNS服務(wù)器進(jìn)行遞歸查詢幌陕,知道有服務(wù)器響應(yīng)回答該請求后诵姜,將結(jié)果回饋給客戶端。
迭代查詢:當(dāng)本地DNS服務(wù)器無法對客戶端發(fā)起的DNS解析請求進(jìn)行直接解析時搏熄,會向根DNS服務(wù)器發(fā)送解析請求棚唆,根DNS服務(wù)器并不能直接提供該DNS的解析結(jié)果,則根DNS服務(wù)器會告知本地DNS服務(wù)器另一個可能查詢到該DNS解析結(jié)果的DNS服務(wù)器IP心例,本地DNS服務(wù)器再次向這個DNS服務(wù)器發(fā)起解析請求宵凌,如此類推,直到查詢到對應(yīng)的結(jié)果為止止后。
通常遞歸查詢這種方式用于PC機(jī)與本地DNS服務(wù)器之間的查詢瞎惫,而遞歸查詢則多用于DNS服務(wù)器之間的查詢
DNS服務(wù)器的類型
DNS服務(wù)是一個分布式數(shù)據(jù)庫系統(tǒng),每一個數(shù)據(jù)庫都有一臺服務(wù)器主機(jī)負(fù)責(zé)維護(hù)译株,這個服務(wù)器主機(jī)就是DNS服務(wù)器瓜喇;這樣服務(wù)器就分為兩類:
- 一類是只負(fù)責(zé)地址解析請求,不負(fù)責(zé)任何域的解析歉糜,僅僅作為緩存乘寒,加快解析速度。這種服務(wù)器叫緩存DNS服務(wù)器匪补;
- 一類是負(fù)責(zé)地址解析的DNS服務(wù)器伞辛,又分為主名稱服務(wù)器和輔助名稱服務(wù)器。
- 主名稱服務(wù)器至少負(fù)責(zé)解析一個域內(nèi)的域名夯缺,維護(hù)所負(fù)責(zé)解析的域的數(shù)據(jù)庫始锚,可對該域數(shù)據(jù)庫進(jìn)行讀寫操作;
- 輔助名稱服務(wù)器則負(fù)責(zé)從主名稱服務(wù)器或其他輔助名稱服務(wù)器中復(fù)制相關(guān)解析庫喳逛,為主名稱服務(wù)器緩解解析壓力;
4棵里、DNS的名稱解析方式
在DNS服務(wù)器中邏輯上存在著兩個區(qū)域润文,一個是正向解析區(qū)域姐呐,另一個是反向解析區(qū)域。DNS解析方式也分為正向解析和反向解析典蝌。
- 正向解析即我們通常所說的域名解析曙砂,實現(xiàn)從域名到IP地址的解析。
- 反向解析指的是IP反向解析骏掀,即通過查詢IP地址的PTR記錄來得到該IP地址所指向的域名記錄鸠澈。而PTR記錄為郵件交換記錄的一種,另一種為A記錄截驮。A記錄解析域名到IP地址笑陈,而PTR記錄則負(fù)責(zé)解析IP地址到域名。
DNS服務(wù)的配置文件
bind程序是DNS服務(wù)的實現(xiàn)葵袭,在安裝好bind程序后涵妥,即可對DNS服務(wù)相關(guān)配置文件進(jìn)行配置。
在Centos 系統(tǒng)中與DNS服務(wù)相關(guān)的配置文件包括:/etc/named.conf主配置文件坡锡、/etc/named.rfc1912.zones區(qū)域管理文件和/var/named/目錄下的區(qū)域數(shù)據(jù)庫文件蓬网。主配置文件/etc/named.conf和/etc/named.rfc1912.zones設(shè)置了DNS服務(wù)器能夠管理哪些區(qū)域并且指定了這些區(qū)域?qū)?yīng)的區(qū)域數(shù)據(jù)文件的存放路徑和名稱。
1鹉勒、主配置文件/etc/named.conf
DNS服務(wù)的主配置文件包含了三個段帆锋,分別為全局配置段options{ ... }、日志配置段logging{ ... }和區(qū)域配置段zone{ ... }禽额。再次配置文件中锯厢,每個配置語句必須以分號結(jié)尾,花括號中必須要有空格。
編輯完成主配置文件后可使用命令named-checkconf /etc/named.conf進(jìn)行語法檢測贮乳。
具體配置情況如下:
options {
listen-on port 53 { 127.0.0.1; };
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";
allow-query { localhost; };
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.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";
2勃痴、區(qū)域管理文件/etc/named.rfc1912.zones
/etc/named.rfc1912.zones為區(qū)域管理文件,用以保存主機(jī)負(fù)責(zé)解析或轉(zhuǎn)發(fā)的區(qū)域徙菠,為/etc/named.conf所調(diào)用。其常見內(nèi)容如下:
zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "localhost" IN {
type master;
file "named.localhost";
allow-update { none; };
};
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; };
};
zone "1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
其中zone名稱以in-addr.apra結(jié)尾的為反向解析區(qū)域郁岩,其命名格式為IP網(wǎng)段的反寫.in-addr.apra婿奔,剩下的zone則為正向解析區(qū)域。其中區(qū)域內(nèi)的可設(shè)置選項包括:
- type:設(shè)置此區(qū)域的類型问慎,包括master(主名稱服務(wù)器)萍摊、slave(輔助名稱服務(wù)器)、forward(轉(zhuǎn)發(fā)域)如叼、hint(根域名服務(wù)器)冰木;
- file FILENAME:指定區(qū)域數(shù)據(jù)文件的相對路徑,目錄路徑由主配置文件/etc/named.conf所指定;
- allow-update:是否允許客戶主機(jī)或服務(wù)器自行更新DNS記錄踊沸,上述為不允許更新DNS記錄歇终;
3、區(qū)域數(shù)據(jù)文件
區(qū)域數(shù)據(jù)文件存放在/var/named目錄下逼龟,文件大體分為正向解析區(qū)域文件和反向解析區(qū)域文件评凝,通常該文件內(nèi)容如下:
$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.
第一行為設(shè)定TTL的值,定義區(qū)域數(shù)據(jù)文件里面的各項記錄的宏腺律。
第二行為SOA起始授權(quán)記錄奕短,一個區(qū)域解析庫有且只能有一個SOA記錄,而且必須放在第一條匀钧;上述@表示當(dāng)前區(qū)域的名稱翎碑。
往下第三到第七行定義了服務(wù)器同步信息的相關(guān)設(shè)置,其含義如下:
- serial:表示配置版本的序列號榴捡,通常情況下杈女,序列號sn遵循“年+月+日+編號”的格式,在修改了區(qū)域文件后需要手動修改序列號吊圾;
- refresh:設(shè)置DNS服務(wù)器進(jìn)行同步的間隔時間达椰,只針對本區(qū)域文件總定義的NS記錄的所有主機(jī);
- retry:表示同步更新失敗之后项乒,進(jìn)行重試的間隔時間啰劲;
- expire:表示同步更新失敗之后,多長時間清楚對應(yīng)的記錄檀何,又稱過期時間蝇裤;
- minimum:指高速緩存否定回答的存活時間;
區(qū)域數(shù)據(jù)文件中的資源記錄類型:
1频鉴、SOA:起始授權(quán)記錄栓辜;一個區(qū)域解析庫有且只能有一個SOA記錄,而且必須放在第一條
name [TTL] IN SOA value
- name:當(dāng)前區(qū)域的名稱
- value:有多部分組成
- 當(dāng)前區(qū)域的區(qū)域名稱垛孔,也可以使用主DNS服務(wù)器名稱
- 當(dāng)前區(qū)域管理員的郵箱地址藕甩;但地址中的不能使用@符號,一般使用點(diǎn)好來替代
- 主從服務(wù)協(xié)調(diào)屬性的定義以及否定答案的TTL
baidu.com. 7200 IN SOA dns.baidu.com.
2周荐、NS記錄:表示當(dāng)前區(qū)域中的某個DNS服務(wù)器的名字狭莱,一個區(qū)域可有多個NS記錄
baidu.com. 35234 IN NS ns2.baidu.com.
baidu.com. 35234 IN NS ns4.baidu.com.
baidu.com. 35234 IN NS dns.baidu.com.
baidu.com. 35234 IN NS ns3.baidu.com.
baidu.com. 35234 IN NS ns7.baidu.com.
3、MX記錄:表示當(dāng)前區(qū)域的某個郵件交換器的主機(jī)名概作;MX記錄可以有多個腋妙,但每個MX記錄之間應(yīng)有一個數(shù)字表示其優(yōu)先級
baidu.com. 3532 IN MX 20 mx1.baidu.com.
baidu.com. 3532 IN MX 20 jpmx.baidu.com.
baidu.com. 3532 IN MX 20 mx50.baidu.com.
baidu.com. 3532 IN MX 10 mx.maillb.baidu.com.
baidu.com. 3532 IN MX 15 mx.n.shifen.com.
4、A記錄:表示主機(jī)名對應(yīng)的IP地址讯榕,一個主機(jī)名可對應(yīng)多個IP地址
baidu.com. 34 IN A 123.125.115.110
baidu.com. 34 IN A 220.181.57.216
5骤素、AAAA記錄:ipv6的A記錄匙睹,不常用
6、PTR記錄:反向地址解析記錄谆甜,用于將IP地址反解析成域名垃僚,常見于反向解析區(qū)域文件中,其中IP地址要反過來寫,并且加上.in-addr.arpa.特定后綴
name [TTL] IN PTR FQDN
如:
69.2.139.61.in-addr.arpa. 34172 IN PTR ns.sc.cninfo.net.
7规辱、CNAME記錄:域名的別名記錄,用于記錄某個主機(jī)域名的別名
www.taobao.com. 204 IN CNAME www.taobao.com.danuoyi.tbcache.com.
區(qū)域數(shù)據(jù)文件編輯完成之后栽燕,可以使用named-checkzone DOMAIN ZONE_FILE命令檢查相應(yīng)的區(qū)域數(shù)據(jù)文件罕袋。
四、搭建DNS主-輔服務(wù)器并實現(xiàn)智能DNS
1碍岔、環(huán)境準(zhǔn)備
Master Server:Centos 7浴讯,192.168.2.104
Slave Server1:Centos 7,192.168.2.106
分別在兩臺服務(wù)器上安裝named服務(wù)yum install -y bind
蔼啦,并確保主從服務(wù)器時區(qū)時間一致榆纽,可通過ntpdate命令進(jìn)行網(wǎng)絡(luò)時間同步。
[root@localhost ~]# ntpdate -u ntp.api.bz
5 Nov 15:49:09 ntpdate[2396]: adjust time server 47.98.146.45 offset 0.001019 sec
2捏肢、相關(guān)測試工具級命令
測試工具有:dig奈籽、host、nslookup及rndc命令鸵赫。
- dig命令
用于測試dns系統(tǒng)衣屏,因此不會查詢hosts文件
語法:
dig [-t RR_TYPE] name [@SERVER] [query options]
常用query options:
- +[no]trace:跟中解析過程
- +[no]recurse:進(jìn)行遞歸解析
常用用法:
- 反向解析測試:
dig -x IP
- 測試區(qū)域傳送:
dig -t [axfr|ixfr] DOMAIN [@server]
- host命令
用法類似于dig命令,使用語法格式為:
host [-t RR_TYPE] name [server]
- nslookup命令
nslookup命令有兩種使用模式辩棒,一種是命令模式狼忱,另一個交互模式。
其命令模式的使用格式為:
nslookup [-options] [name] [server]
其交互模式的使用格式為:
nslookup>
server ip:已制定的ip為dns服務(wù)器進(jìn)行查詢
set q-RR_TYPE:要查詢的資源記錄類型
name:要查詢的名稱
- rndc命令
rndc命令為named服務(wù)的控制命令一睁,其常用的用法:
rndc status:顯示服務(wù)器狀態(tài)
rndc reload:在不停止DNS服務(wù)器工作的情況下钻弄,重新加載配置文件和區(qū)域文件
rndc flush:清理DNS緩存
3、搭建DNS主從服務(wù)器
1者吁、搭建DNS主服務(wù)器
- 編輯修改/etc/named.conf文件:
在配置文件中主配置段修改設(shè)定窘俺、
[root@localhost ~]# vim /etc/named.conf
options {
listen-on port 53 { 192.168.2.104; };
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";
allow-query { 192.168.2.0/32; };
recursion yes;
dnssec-enable no;
dnssec-validation noi;
forward only;
forwarders { 61.139.2.69; };
bindkeys-file "/etc/named.iscdlv.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";
- 編輯修改/etc/named.rfc1912.zones配置文件:
[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "wxqtest.com." IN { #創(chuàng)建正向解析域
type master;
file "wxqtest.com.zone";
allow-update { none; };
allow-transfer { 192.168.2.106; }; #允許同步DNS的輔助服務(wù)器IP砚偶;
notify yes; #啟用變更通告批销,當(dāng)主服務(wù)器DNS區(qū)域文件發(fā)生變更后,通知從服務(wù)器進(jìn)行比較同步染坯;
};
zone "2.168.192.in-addr.arpa" IN { #創(chuàng)建反向解析域
type master;
file "192.168.2.zone";
allow-update { none; };
allow-transfer { 192.168.2.106; }均芽;
notify yes;
};
- 建立正向區(qū)域解析數(shù)據(jù)庫文件/var/named/wxqtest.com.zone
一般默認(rèn)是在/var/named目錄下建立.
[root@localhost ~]# vim /var/named/wxqtest.com.zone
$TTL 3600
$ORIGIN wxqtest.com.
@ IN SOA ns1.wxqtest.com. 7xxxxxx2.qq.com. (
2018110501
1D
1H
1W
3H
)
wxqtest.com. IN NS ns1.wxqtest.com.
IN NS ns2
ns1 IN MX 10 mx1
ns2 IN MX 20 mx2
mx1 IN A 192.168.2.5
mx2 IN A 192.168.2.6
ns1 IN A 192.168.2.104
ns2 IN A 192.168.2.106
www IN A 192.168.2.113
web IN CNAME www
master IN A 192.168.2.104
bbs IN A 192.168.2.115
bbs IN A 192.168.2.116
- 建立反向區(qū)域解析數(shù)據(jù)庫文件/var/named/192.168.2.zone
[root@localhost ~]# vim /var/named/192.168.2.zone
$TTL 3600
$ORIGIN 2.168.192.in-addr.arpa.
@ IN SOA ns1.wxqtest.com. 728472362.qq.com. (
2018110501
1D
1H
1W
3H
)
IN NS ns1.wxqtest.com.
IN NS ns2.wxqtest.com.
104 IN PTR ns1.wxqtest.com.
106 IN PTR ns2.wxqtest.com.
5 IN PTR mx1.wxqtest.com.
6 IN PTR mx2.wxqtest.com.
104 IN PTR master.wxqtest.com.
115 IN PTR bbs.wxqtest.com.
116 IN PTR bbs.wxqtest.com.
113 IN PTR www.wxqtest.com.
- 修改正、反向區(qū)域數(shù)據(jù)庫文件的權(quán)限和屬主单鹿,并檢測配置文件是否有語法錯誤
[root@localhost ~]# chgrp named /var/named/wxqtest.com.zone
[root@localhost ~]# chmod o= /var/named/wxqtest.com.zone
[root@localhost ~]# chgrp named /var/named/192.168.2.zone
[root@localhost ~]# chmod o= /var/named/192.168.2.zone
[root@localhost ~]# ll /var/named | grep "zone$"
-rw-r----- 1 root named 634 11月 5 17:15 192.168.2.zone
-rw-r----- 1 root named 447 11月 5 17:00 wxqtest.com.zone
[root@localhost ~]# named-checkconf /etc/named.conf
[root@localhost ~]# named-checkzone wxqtest.com /var/named/wxqtest.com.zone
zone wxqtest.com/IN: loaded serial 2018110501
OK
[root@localhost ~]# named-checkzone 2.168.192.in-addr.arpa /var/named/192.168.2.zone
zone 2.168.192.in-addr.arpa/IN: loaded serial 2018110501
OK
- 啟動named服務(wù)
[root@localhost ~]# systemctl start named.service
2掀宋、搭建從服務(wù)器
- 在從服務(wù)器slave1上編輯named配置文件/etc/named.conf。
[root@slave1 ~]# vim /etc/named.conf
options {
listen-on port 53 { 127.0.0.1;192.168.2.106; };
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";
allow-query { 192.168.2.0/32; };
recursion yes;
dnssec-enable no;
dnssec-validation no;
bindkeys-file "/etc/named.iscdlv.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";
- 編輯修改/etc/named.rfc1912.zones配置文件:
[root@slave1 ~]# vim /etc/named.rfc1912.zones
zone "wxqtest.com." IN {
type slave;
file "slaves/wxqtest.com.zone";
masters { 192.168.2.104; };
masterfile-format text;
};
zone "2.168.192.in-addr.arpa" IN {
type slave;
file "slaves/192.168.2.zone";
masters { 192.168.2.104; };
masterfile-format text;
};
- 檢查相應(yīng)的配置文件語法,若無報錯則啟動named服務(wù)
[root@slave1 ~]# named-checkconf /etc/named.conf
[root@slave1 ~]# systemctl start named.service
[root@slave1 ~]# systemctl status named.service
● named.service - Berkeley Internet Name Domain (DNS)
Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled)
Active: active (running) since 一 2018-11-05 18:00:02 CST; 6s ago
Process: 1819 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS)
Process: 1816 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
Main PID: 1821 (named)
Tasks: 7
CGroup: /system.slice/named.service
└─1821 /usr/sbin/named -u named -c /etc/named.conf
11月 05 18:00:02 slave1 named[1821]: transfer of '2.168.192.in-addr.arpa/IN' from 192.168.2.104#53: connected using 192.168.2.106#56028
11月 05 18:00:02 slave1 named[1821]: zone 2.168.192.in-addr.arpa/IN: transferred serial 2018110501
11月 05 18:00:02 slave1 named[1821]: transfer of '2.168.192.in-addr.arpa/IN' from 192.168.2.104#53: Transfer completed: 1 message...tes/sec)
11月 05 18:00:02 slave1 named[1821]: zone 2.168.192.in-addr.arpa/IN: sending notifies (serial 2018110501)
11月 05 18:00:03 slave1 named[1821]: zone wxqtest.com/IN: refresh: unexpected rcode (REFUSED) from master 192.168.2.104#53 (sourc...0.0.0#0)
11月 05 18:00:03 slave1 named[1821]: zone wxqtest.com/IN: Transfer started.
11月 05 18:00:03 slave1 named[1821]: transfer of 'wxqtest.com/IN' from 192.168.2.104#53: connected using 192.168.2.106#38018
11月 05 18:00:03 slave1 named[1821]: zone wxqtest.com/IN: transferred serial 2018110501
11月 05 18:00:03 slave1 named[1821]: transfer of 'wxqtest.com/IN' from 192.168.2.104#53: Transfer completed: 1 messages, 15 recor...tes/sec)
11月 05 18:00:03 slave1 named[1821]: zone wxqtest.com/IN: sending notifies (serial 2018110501)
Hint: Some lines were ellipsized, use -l to show in full.
服務(wù)啟動后再服務(wù)狀態(tài)中的日志顯示正在同步主服務(wù)器的正反向揭西區(qū)域文件。
3劲妙、測試DNS主從服務(wù)器的解析
主服務(wù)器的正向解析:
[root@slave1 ~]# dig -t A www.wxqtest.com @192.168.2.104
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> -t A www.wxqtest.com @192.168.2.104
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48621
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.wxqtest.com. IN A
;; ANSWER SECTION:
www.wxqtest.com. 3600 IN A 192.168.2.113
;; AUTHORITY SECTION:
wxqtest.com. 3600 IN NS ns2.wxqtest.com.
wxqtest.com. 3600 IN NS ns1.wxqtest.com.
;; ADDITIONAL SECTION:
ns1.wxqtest.com. 3600 IN A 192.168.2.104
ns2.wxqtest.com. 3600 IN A 192.168.2.106
;; Query time: 0 msec
;; SERVER: 192.168.2.104#53(192.168.2.104)
;; WHEN: 一 11月 05 18:07:30 CST 2018
;; MSG SIZE rcvd: 128
從服務(wù)器正向解析:
[root@slave1 ~]# dig -t A www.wxqtest.com @192.168.2.106
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> -t A www.wxqtest.com @192.168.2.106
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10835
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.wxqtest.com. IN A
;; ANSWER SECTION:
www.wxqtest.com. 3600 IN A 192.168.2.113
;; AUTHORITY SECTION:
wxqtest.com. 3600 IN NS ns1.wxqtest.com.
wxqtest.com. 3600 IN NS ns2.wxqtest.com.
;; ADDITIONAL SECTION:
ns1.wxqtest.com. 3600 IN A 192.168.2.104
ns2.wxqtest.com. 3600 IN A 192.168.2.106
;; Query time: 0 msec
;; SERVER: 192.168.2.106#53(192.168.2.106)
;; WHEN: 一 11月 05 18:07:42 CST 2018
;; MSG SIZE rcvd: 128
主服務(wù)器方向解析:
[root@slave1 ~]# dig -x 192.168.2.115 @192.168.2.104
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> -x 192.168.2.115 @192.168.2.104
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57657
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;115.2.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
115.2.168.192.in-addr.arpa. 3600 IN PTR bbs.wxqtest.com.
;; AUTHORITY SECTION:
2.168.192.in-addr.arpa. 3600 IN NS ns2.wxqtest.com.
2.168.192.in-addr.arpa. 3600 IN NS ns1.wxqtest.com.
;; ADDITIONAL SECTION:
ns1.wxqtest.com. 3600 IN A 192.168.2.104
ns2.wxqtest.com. 3600 IN A 192.168.2.106
;; Query time: 0 msec
;; SERVER: 192.168.2.104#53(192.168.2.104)
;; WHEN: 一 11月 05 18:14:41 CST 2018
;; MSG SIZE rcvd: 152
從服務(wù)器反向解析:
[root@slave1 ~]# dig -x 192.168.2.115 @192.168.2.106
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> -x 192.168.2.115 @192.168.2.106
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34359
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;115.2.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
115.2.168.192.in-addr.arpa. 3600 IN PTR bbs.wxqtest.com.
;; AUTHORITY SECTION:
2.168.192.in-addr.arpa. 3600 IN NS ns2.wxqtest.com.
2.168.192.in-addr.arpa. 3600 IN NS ns1.wxqtest.com.
;; ADDITIONAL SECTION:
ns1.wxqtest.com. 3600 IN A 192.168.2.104
ns2.wxqtest.com. 3600 IN A 192.168.2.106
;; Query time: 0 msec
;; SERVER: 192.168.2.106#53(192.168.2.106)
;; WHEN: 一 11月 05 18:15:26 CST 2018
;; MSG SIZE rcvd: 152
4湃鹊、DNS主從服務(wù)器的域維護(hù)
DNS主從服務(wù)器的域維護(hù)是指通過DNS協(xié)議來在主域名服務(wù)器和從域名服務(wù)器之間維護(hù)同一個區(qū)域文件的操作。
DNS支持兩種域維護(hù)的方式:全量傳輸(AXFR)和增量傳輸(IXFR)
- 全量傳輸AXFR
全量傳輸時镣奋,DNS從服務(wù)器會從DNS主服務(wù)器上請求區(qū)域文件币呵,其間隔時間由SOA記錄中的refresh標(biāo)簽所定義。請求區(qū)域文件的過程是DNS從服務(wù)器向DNS主服務(wù)器發(fā)送查詢來實現(xiàn)的侨颈,如果DNS主服務(wù)器中SOA記錄中的序列號(serial)大于DNS從服務(wù)器SOA記錄的序列號余赢,DNS從服務(wù)器就會向DNS主服務(wù)器發(fā)送全量傳輸請求。全量傳輸使用TCP的53端口進(jìn)行傳輸哈垢。
- 增量傳輸IXFR
傳遞非常大的區(qū)域文件是非常耗資源的(時間妻柒、帶寬等),尤其是只有區(qū)域中的一個記錄改變的時候耘分,沒有必要傳遞整個區(qū)域文件举塔,增量傳輸是允許DNS主服務(wù)器和DNS從服務(wù)器之間只傳輸那些改變的記錄。
- 通告notify
DNS從服務(wù)器會每隔SOA記錄中的設(shè)置refresh時間值來向DNS主服務(wù)器主服務(wù)器發(fā)送請求求泰,只有在主服務(wù)器的serial大于從服務(wù)器的serial時才進(jìn)行傳輸央渣,但是倘若refresh值設(shè)置得比較大,那么有可能在這段時間中就會積累大量的更新拜秧,此時DNS的時效性就會很差痹屹。
此時notify通告就提供了這樣的功能:DNS主服務(wù)器的zone文件發(fā)生改變后,它立即向從服務(wù)器發(fā)送一個NOTIFY消息枉氮,告訴從服務(wù)器我的zone文件發(fā)生改變了志衍,接著從服務(wù)器馬上對比兩者的序列號,再采用上面介紹的全量傳輸或者增量傳輸?shù)姆椒ㄕ埱髗one文件聊替。BIND本身支持通告楼肪,通告的配置是在named.conf中的zone中的option中配置,配置指令是notify, also-notify和notify-source惹悄。
上述在配置DNS主服務(wù)器的/etc/named.rfc1912.zones文件中春叫,啟動了notify的選項,因此在DNS主服務(wù)器上對區(qū)域文件作出的修改泣港,在重啟服務(wù)或重載服務(wù)后均應(yīng)該能立即同步到相應(yīng)的從服務(wù)器上暂殖。
修改DNS主服務(wù)器的正反區(qū)域文件:
[root@localhost ~]# vim /var/named/wxqtest.com.zone
$TTL 3600
$ORIGIN wxqtest.com.
@ IN SOA ns1.wxqtest.com. 728472362.qq.com. (
2018110502 #修改序列號
1D
1H
1W
3H
)
IN NS ns1
IN NS ns2
ns1 IN MX 10 mx1
ns2 IN MX 20 mx2
mx1 IN A 192.168.2.5
mx2 IN A 192.168.2.6
ns1 IN A 192.168.2.104
ns2 IN A 192.168.2.106
www IN A 192.168.2.113
web IN CNAME www
master IN A 192.168.2.104
bbs IN A 192.168.2.115
bbs IN A 192.168.2.116
test IN A 192.168.2.117 #新增一條A記錄
[root@localhost ~]# vim /var/named/192.168.2.zone
$TTL 3600
$ORIGIN 2.168.192.in-addr.arpa.
@ IN SOA ns1.wxqtest.com. 728472362.qq.com. (
2018110502 #修改序列號
1D
1H
1W
3H
)
IN NS ns1.wxqtest.com.
IN NS ns2.wxqtest.com.
104 IN PTR ns1.wxqtest.com.
106 IN PTR ns2.wxqtest.com.
5 IN PTR mx1.wxqtest.com.
6 IN PTR mx2.wxqtest.com.
104 IN PTR master.wxqtest.com.
115 IN PTR bbs.wxqtest.com.
116 IN PTR bbs.wxqtest.com.
113 IN PTR www.wxqtest.com.
117 IN PTR test.wxqtest.com. #新增一條A記錄
修改完成侯重載named服務(wù),并查看日志/var/log/messages:
[root@localhost ~]# rndc reload
server reload successful
[root@localhost ~]# tail -10 /var/log/messages
Nov 5 19:18:20 localhost named[3705]: all zones loaded
Nov 5 19:18:20 localhost named[3705]: running
Nov 5 19:18:20 localhost named[3705]: zone 2.168.192.in-addr.arpa/IN: loaded serial 2018110502
Nov 5 19:18:20 localhost named[3705]: zone 2.168.192.in-addr.arpa/IN: sending notifies (serial 2018110502)
Nov 5 19:18:20 localhost named[3705]: zone wxqtest.com/IN: loaded serial 2018110502
Nov 5 19:18:20 localhost named[3705]: zone wxqtest.com/IN: sending notifies (serial 2018110502)
Nov 5 19:18:20 localhost named[3705]: client 192.168.2.106#48273 (2.168.192.in-addr.arpa): transfer of '2.168.192.in-addr.arpa/IN': AXFR-style IXFR started
Nov 5 19:18:20 localhost named[3705]: client 192.168.2.106#48273 (2.168.192.in-addr.arpa): transfer of '2.168.192.in-addr.arpa/IN': AXFR-style IXFR ended
Nov 5 19:18:21 localhost named[3705]: client 192.168.2.106#57919 (wxqtest.com): transfer of 'wxqtest.com/IN': AXFR-style IXFR started
Nov 5 19:18:21 localhost named[3705]: client 192.168.2.106#57919 (wxqtest.com): transfer of 'wxqtest.com/IN': AXFR-style IXFR ended
從日志上可以看出当纱,主服務(wù)器已將正反區(qū)域文件的改動發(fā)送到了從服務(wù)器上呛每。在從服務(wù)器上測試:
[root@slave1 ~]# dig -x 192.168.2.117 @192.168.2.106
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> -x 192.168.2.117 @192.168.2.106
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17970
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;117.2.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
117.2.168.192.in-addr.arpa. 3600 IN PTR test.wxqtest.com.
;; AUTHORITY SECTION:
2.168.192.in-addr.arpa. 3600 IN NS ns2.wxqtest.com.
2.168.192.in-addr.arpa. 3600 IN NS ns1.wxqtest.com.
;; ADDITIONAL SECTION:
ns1.wxqtest.com. 3600 IN A 192.168.2.104
ns2.wxqtest.com. 3600 IN A 192.168.2.106
;; Query time: 0 msec
;; SERVER: 192.168.2.106#53(192.168.2.106)
;; WHEN: 一 11月 05 19:21:31 CST 2018
;; MSG SIZE rcvd: 153
[root@slave1 ~]# dig -t A test.wxqtest.com @192.168.2.104
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> -t A test.wxqtest.com @192.168.2.104
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57451
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;test.wxqtest.com. IN A
;; ANSWER SECTION:
test.wxqtest.com. 3600 IN A 192.168.2.117
;; AUTHORITY SECTION:
wxqtest.com. 3600 IN NS ns1.wxqtest.com.
wxqtest.com. 3600 IN NS ns2.wxqtest.com.
;; ADDITIONAL SECTION:
ns1.wxqtest.com. 3600 IN A 192.168.2.104
ns2.wxqtest.com. 3600 IN A 192.168.2.106
;; Query time: 0 msec
;; SERVER: 192.168.2.104#53(192.168.2.104)
;; WHEN: 一 11月 05 19:22:00 CST 2018
;; MSG SIZE rcvd: 129
從dns服務(wù)器上解析成功,說明同步成功坡氯。
4晨横、實現(xiàn)智能DNS
要實現(xiàn)DNS服務(wù)器的智能DNS解析洋腮,首先需要了解view的概念:view就是將不同IP地址段發(fā)來的查詢響應(yīng)到不同的DNS解析。如需要對兩個不同的IP地址段進(jìn)行配置手形,就需要明確這些IP地址段的范圍啥供,這樣view才能生效。需要注意的是库糠,一旦使用了view伙狐,所有域都必須定義在view中。
此處模擬實驗曼玩,以192.168.2.106為電信網(wǎng)絡(luò)鳞骤,192.168.2.114位連通網(wǎng)絡(luò)。
- 修改DNS主服務(wù)器的主配置文件named.conf:
[root@localhost ~]# vim /etc/named.conf
acl "telecom" {
192.168.2.106;
};
acl "unicom" {
192.168.2.114;
};
options {
listen-on port 53 { 192.168.2.104; };
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";
recursion yes;
dnssec-enable no;
dnssec-validation no;
forward only;
forwarders { 61.139.2.69; };
bindkeys-file "/etc/named.iscdlv.key";
view telecom {
match-clients { telecom; };
zone "." IN {
type hint;
file "named.ca";
};
zone "demo.com" IN {
type master;
file "demo.com.zone.telecom";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
};
view unicom {
match-clients { unicom; };
zone "." IN {
type hint;
file "named.ca";
};
zone "demo.com" IN {
type master;
file "demo.com.zone.unicom";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
};
view others {
match-clients { any; };
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
};
- 新建電信正向解析庫文件/var/named/charlie.com.zone.telecom:
[root@localhost ~]# vim /var/named/demo.com.zone.telecom
$TTL 3600
$ORIGIN demo.com.
@ IN SOA ns1.demo.com. 728472362.qq.com. (
2018110502
1D
1H
1W
3H
)
IN NS ns1
ns1 IN MX 10 mx1
mx1 IN A 192.168.2.5
ns1 IN A 192.168.2.104
www IN A 192.168.2.118
web IN CNAME www
master IN A 192.168.2.133
bbs IN A 192.168.2.119
test IN A 192.168.2.121
- 創(chuàng)建連通正向解析區(qū)域數(shù)據(jù)庫文件/var/named/charlie.com.zone.unicom
[root@localhost ~]# vim /var/named/demo.com.zone.unicom
$TTL 3600
$ORIGIN demo.com.
@ IN SOA ns1.demo.com. 728472362.qq.com. (
2018110501
1D
1H
1W
3H
)
IN NS ns1
ns1 IN MX 10 mx1
mx1 IN A 192.168.2.104
ns1 IN A 192.168.2.104
www IN A 192.168.2.123
web IN CNAME www
bbs IN A 1.1.1.1
test IN A 1.1.1.2
- 對相應(yīng)配置文件進(jìn)行語法檢查黍判,并重載named服務(wù)
[root@localhost ~]# named-checkconf /etc/named.conf
[root@localhost ~]# named-checkzone demo.com /var/named/demo.com.zone.telecom
zone demo.com/IN: loaded serial 2018110501
OK
[root@localhost ~]# named-checkzone demo.com /var/named/demo.com.zone.unicom
zone demo.com/IN: loaded serial 2018110501
OK
[root@localhost ~]# rndc reload
server reload successful
- 在從服務(wù)器192.168.2.106上解析測試:
[root@slave1 ~]# dig -t A bbs.demo.com @192.168.2.104
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> -t A bbs.demo.com @192.168.2.104
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21141
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;bbs.demo.com. IN A
;; ANSWER SECTION:
bbs.demo.com. 3600 IN A 192.168.2.119 #解析出的結(jié)果為telecom中的IP
;; AUTHORITY SECTION:
demo.com. 3600 IN NS ns1.demo.com.
;; ADDITIONAL SECTION:
ns1.demo.com. 3600 IN A 192.168.2.104
;; Query time: 0 msec
;; SERVER: 192.168.2.104#53(192.168.2.104)
;; WHEN: 一 11月 05 20:41:20 CST 2018
;; MSG SIZE rcvd: 91
- 在192.168.2.114從服務(wù)器上解析驗證:
[root@localhost ~]# nslookup
> server 192.168.2.104
Default server: 192.168.2.104
Address: 192.168.2.104#53
> set q=a^H^H
unknown query type: a
> set q=A
> bbs.demo.com
Server: 192.168.2.104
Address: 192.168.2.104#53
Name: bbs.demo.com
Address: 1.1.1.1 #解析出的ip為Unicom中的IP
由此可以看出智能DNS解析搭建成功。