1、不同主機程序(進程)間通訊機制:
socket:ip+port
2、裸套接字:
無需調用傳輸層的tcp和utp協議端口號,而自身可以實現此功能,並能藉助網絡層發送出去。
3、DNS:domain name server;是一個應用層程序
協議端口:tcp:53,udp:53
tcp53:用於區域傳送
udp53:用於負責解析
4、客戶端名稱解析過程:
先查本地的hosts文件,在去查dns緩存,如果都沒有,在去查dns服務器。
5、hosts文件:
它記錄了要通信主機的主機名和ip地址,主機不多時,可以用,多了就會降低解析效率。host文件是通用的,可以作爲庫文件供開發人員調用。
庫:getipbyhostname( )
庫:gethostnamebyip( )
6、dns基礎知識介紹:
dns是一個分層結構的名稱解析程序。
由根(.)、一級域(也叫頂級域:tlp,top level domain)、二級域、三級域(可以繼續往下分層)組成。
DNS緩存(dns cache):
爲了減少每次輸入域名主機時,都要去dns服務器查找提供服務的主機,因此,每次去訪問dns服務器時,都緩存一份名稱庫解析在dns cache中,緩存時間的定義(即緩存有效期)是由DNS服務器來設定的,它通過設置一個遞減的時間(TTL)來實現此功能。
DNS查詢類型:
遞歸查詢:一般是主機到指定的DNS服務器進行查詢,需要DNS服務器幫自己去完成解析
迭代查詢:一般是DNS服務器向根、頂級域及二級域之間的查詢
DNS解析方式:
正向解析:從名稱解析得到ip
反向解析:從ip解析得到名稱
注意:正向解析和反向解析是兩種完全不同的解析功能,他們不是同一個名稱空間,是彼此間獨立的,因此二者的數據庫也是不一樣的。
常見的域名提供商:萬網(國內備案商)、godaddy(國外,無需備案)
域和FQDN的區別:FQDN:full qualified domain name。
域:mageedu.com
FQDN:www.magedu.com
DNS服務器類型:
負責解析至少一個域:主機名稱服務器,輔助名稱服務器
不負責域解析: 緩存名稱服務器。
7、一次完整的DNS查詢請求經過的過程:
client--->查找本地hosts文件--->dns本地緩存--->dns服務器(如果是dns負責的域,直接返回查詢結果;否則進行迭代查詢)。
解析應答結果分類:
分類一:
肯定答案
否定答案(不存在查詢的鍵,因此不存在與其查詢鍵對應的值)
分類二:
權威應答:由直接負責的DNS服務器回答的結果
非權威應答:
8、DNS服務器類別:主dns服務器、從(輔助)dns服務器
主DNS服務器:維護所負責解析域數據庫的那臺服務器,讀寫操作均可進行。
從(輔助)DNS服務器:從主DNS服務器那裏或從其他的從(輔助)服務器那裏“複製”一份解析庫,但只能進行讀操作,即查詢操作。
8.1、主從(輔助)DNS服務器“複製”操作的實施方式:
serial:序列號,也即是數據庫的版本號,主服務器數據庫內容發生變化時,其版本號遞增。
refresh:刷新時間間隔,從(輔助)服務器每次多久到主服務器檢查序列號更新狀況。
retry:重試時間間隔,重試時間間隔短於(小於)刷新時間間隔,輔助服務器從主服務器那裏請求同步解析庫失敗時,再次發起嘗試請求的時間間隔。
expire:過期時長,輔助服務器始終聯繫不到主服務器時,多久之後放棄從主服務器同步數據,輔助服務器停止提供服務。
否定答案的時長:
注意:DNS主服務器“通知”從服務器隨時更新數據。
8.2、主從(輔助)DNS同步方式:即區域數據傳送
axfr:全量傳遞,傳送整個數據庫,一般發生在同步的第一次
ixfr:增量傳遞,僅傳送變量的數據。
8.3、區域和域:
域:mageedu.com
區域:正向區域、反向區域
注意:域和區域沒有絕對大小之分,如上,域有兩個區域,但是域(magedu.com)又是.com區域中的一個記錄。同時,dns權限都是由上級指派的。
9、DNS區域數據文件組成:主要由資源記錄組成
區域文件中每一行一個資源記錄(Resourse Record ,簡稱RR)
資源記錄有類型的概念區分,常見的類型有:A AAAA PTR SOA NS CNAME MX9.1
9.1、資源記錄類型:
SOA:start of authority;起始授權記錄,一個區域解析庫有且只能有一個soa記錄,而且必須放在第一條;它用來標識是哪個區域的
NS:name service;域名服務記錄,一個區域解析庫可以有多個ns記錄,其中一個爲主的;它用來標識區域內哪些服務器是dns服務器。
A:address,地址記錄,FQDN--->IPv4
AAAA:address,地址記錄,FQDN--->IPv6
CNAME:canonical name,別名記錄
PTR:pointer,IP--->FQDN
MX:mail exchange;郵件交換器,可以有多個,有優先級的概念,mx優先級0-99,數值越小優先級越高
9.2、資源記錄的定義格式:注意資源記錄中的“.”是不能少的
語法:name [TTL] IN RR_NAME VLAUE
name:名稱或ip
ttl:ttl存活時間,可省,
IN:關鍵字
RR_NAME:資源記錄類型
VALUE:name對應的值
各類型定義格式說明:
SOA類型資源記錄: name:當前區域的名字,例如:magedu.com或者2.3.4.in-addr-arpa value:由多部分組成 第一部分:當前區域的區域名稱,也可以使用主dns服務器的名稱 第二部分:當前區域管理員的郵箱地址,但地址中不能有“@”符號,一般用“.”(點)來代替 第三部分:(主、從服務協調屬性的定義以及否定答案的TTL) //放在括號中來說明主從複製的參數 示例: $TTL 1D magedu.com.IN SOA magedu.com. admin.magedu.com. ( 0; serial 1D; refresh 1H; retry 1W; expire 3H ); minimum )
|
NS類型資源記錄: name:當前區域的區域名稱 value:當前區域的某dns服務器的名字,例如ns.magedu.com. ;注意一個區域可以有多個ns記錄 示例: magedu.com. 86400 IN NS ns1.magedu.com. magedu.com. 86400 IN NS ns2.magedu.com. |
MX類型資源記錄: name:當前區域的區域名稱 value:當前區域某郵件交換器的主機名 注意:郵件交換器是smtp,不是pop,MX記錄可以有多個,但每個記錄的value之前應該有一個數字表示的優先級,數字越小,優先級越高 示例: magedu.com. 86400 IN MX 10 mx1.magedu.com. magedu.com. 86400 IN MX 20 mx2.magedu.com. |
A類型資源記錄: name:某FQDN,例如:www.magedu.com value:某IPv4地址。 注意:A記錄的name和value是多對多的關係 示例: www.magedu.com. 86400 IN A 1.1.1.1 www.magedu.com. 86400 IN A 1.2.3.4 bbs.magedu.com. 86400 IN A 1.1.1.1 |
AAAA類型資源記錄: name:某FQDN,例如:www.magedu.com value:某IPv6地址。 注意:AAAA記錄的name和value是多對多的關係 |
PTR類型資源記錄: name:ip地址,但是有特定格式,ip要反過來寫而且還要加特定後綴。如:1.2.3.4的記錄應寫成:4.3.2.1.in-addr.arpa. value:FQDN 示例: 4.3.2.1.in-addr.arpa. 86400 IN PTR www.magedu.com.
|
CNAME記錄: name:別名,FQDN格式的別名 value:FQDN格式的正式名字 示例: web.magedu.com. 86400 IN CNAME www.magedu.com. |
注意: ①、TTL可以從全局繼承,但要事先定義,如:$TTL 86400 ②、@表示當前區域的區域名稱,因此,任何用到當前區域的的名稱的地方都可以用“@”來替代 ③、相鄰的兩條資源記錄的“name”相同時,後面的name可省略,如下: www.magedu.com. 86400 IN A 1.1.1.1 www.magedu.com. 86400 IN A 1.2.3.4 可寫成: www.magedu.com. 86400 IN A 1.1.1.1 86400 IN A 1.2.3.4 ④、對於正向區域來說,各MX、NS等類型的記錄value值爲FQDN時,此FQDN應該有一個A記錄。 |
10、DNS and bind
bind:Berkeley internet name domain,現由ISC.org組織維護
dns是協議,bind是dns協議的一種實現工具
named:bind程序運行的進程名稱。
10.1、bind程序包安裝:
查看程序包是否安裝:
[root@localhost ~]# yum info bind //查看程序包信息
[root@localhost ~]# yum list all *bind*
[root@localhost ~]# rpm -q bind //查詢是否安裝bind
bind-9.9.4-37.el7.x86_64
[root@localhost ~]#
bind程序包:
bind-libs:被bind和bind-units包中的程序共同用到的庫文件
bind-utils:bind客戶端程序集,例如dig、host、nslookup等
bind:提供dns server程序,以及幾個常用的測試程序
bind-chroot:選裝項,讓named進程運行於jail(容器或沙箱)模式下。
10.2、bind安裝後程序文件:
主配置文件:
/etc/named.conf
其他輔助性配置文件:
/etc/named.iscdlv.key
/etc/named.rfc1912.zones //區域一般定義在此文件中。
/etc/named.root.key
解析庫文件:
/var/named //一般名字爲zone_name.zone
注意: ①一臺dns服務器可同時爲多個區域提供解析(包括正向和反向)
②、必須要有根區域解析文件,一般爲:/var/named/named.ca
③、還應該有兩個區域解析庫文件:localhost和127的正、反向解析庫文件。
正向:/var/named/named.localhost
反向:/var/named/named.loopback
遠程名稱服務器管理工具:rndc
/usr/sbin/rndc;默認工作與tcp的953端口,但默認監聽於127.0.0.1地址,因此僅允許本地使用。
注意:bind程序安裝完成後,默認即可做緩存名稱服務器使用,如果沒有專門負責解析的區域,直接可啓動服務。
centos6:service named start
centos7:systemctl strart named
10.3、bind主配置文件格式:/etc/named.conf
由三段組成:
全局配置段:
options {.....}
示例:部分配置
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; }; //允許哪些主機查詢
日誌配置段:
logging{.....}
區域配置段: 主要配置那些有本機負責解析的區域或轉發的區域。
zone {.....}
10.4、緩存名稱服務器的配置:不負責解析
①、在options段添加監聽能與外部主機通訊的地址,如添加192.168.0.107
listen-on port 53 { 127.0.0.1; 192.168.0.107 }; //注意地址與花括號前後都有空格隔開
②、註釋掉:options中 allow-query { localhost; };選項,或者添加可以訪問的地址、地址段
註釋方法:
多行註釋:/*........*/
單行註釋://
③、關閉dns安全配置,(學習是建議關閉);將兩處yes改爲“no”
dnssec-enable yes;
dnssec-validation yes;
④、檢查配置文件語法是否有錯誤
[root@localhost named]# named-checkconf /etc/named.conf //可以寫要檢查的配置文件,也可以不寫
[root@localhost named]# named-checkconf -h //查看named-checkconf的使用方法
usage: named-checkconf [-h] [-j] [-p] [-v] [-z] [-t directory] [named.conf]
注意:生產環境中一定要在重啓前檢查配置文件,防止因配置錯誤導致服務不能正常啓動。
⑤、啓動服務:並查看服務
centos6:service named start
centos7:systemctl strart named
[root@localhost named]# systemctl status named
⑥、查看相應端口是否開啓:
[root@localhost named]# ss -utnlp
tcp53:用於區域傳送
udp53:用於負責解析
⑦、測試是否能正常完成;測試工具dig、host、nslookup
dig命令:用於測試DNS系統,因此不會查詢hosts文件
dig命令格式:dig [-t RR_TYPE] name [@server] [query options] //@server指定以哪臺服務器去測試解析;不加@server:表示以本機測試
[query options]
+[no]trace:跟蹤解析過程
+[no]recurse:進行遞歸解析
示例:[root@localhost named]# dig -t A wwww.baidu.com @192.168.0.107 +trace
#dig -x IP //反向解析
#dig -t axfr domain [@server] //模擬完全區域傳送
[root@localhost /]# dig -t a www.baidu.com ; <<>> DiG 9.9.4-RedHat-9.9.4-37.el7 <<>> -t a www.baidu.com ;; global options: +cmd //全局屬性配置項 ;; Got answer: //已經得到應道 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33057 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 5, ADDITIONAL: 6 //flags:標誌位;qr:查詢請求;ra請求答案 ;; OPT PSEUDOSECTION: //僞選項段 ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: //問題段,請求的問題是什麼 ;www.baidu.com.IN A //重複問題是什麼,解析www.baidu.com的A記錄 ;; ANSWER SECTION: //應答段部分 www.baidu.com. 433 IN CNAME www.a.shifen.com. //www.baidu.com是一個www.a.shifen.com.的別名記錄 www.a.shifen.com. 274 IN A 180.97.33.107 //www.a.shifen.com.的A記錄是180.97.33.107 www.a.shifen.com. 274 IN A 180.97.33.108 //www.a.shifen.com.的A記錄是180.97.33.108 ;; AUTHORITY SECTION: //權威段;誰來負責解析的 a.shifen.com. 413 IN NS ns2.a.shifen.com. //a.shifen.com.域是由ns2.a.shifen.com.(dns服務器)負責解析 a.shifen.com. 413 IN NS ns4.a.shifen.com. a.shifen.com. 413 IN NSns5.a.shifen.com. a.shifen.com. 413 IN NSns1.a.shifen.com. a.shifen.com. 413 IN NSns3.a.shifen.com. ;; ADDITIONAL SECTION: // 附加段,將權威段的dns服務器解析爲IP地址 ns1.a.shifen.com. 449 IN A 61.135.165.224 ns2.a.shifen.com. 452 IN A 180.149.133.241 ns3.a.shifen.com. 27 IN A 61.135.162.215 ns4.a.shifen.com. 24 IN A 115.239.210.176 ns5.a.shifen.com. 503 IN A 119.75.222.17 ;; Query time: 103 msec //查詢指令時長 ;; SERVER: 192.168.1.1#53(192.168.1.1) //由哪個服務器負責解析的,基於迭代的方式查詢並返回解析結果 ;; WHEN: Sun Feb 04 09:04:19 CST 2018 ;; MSG SIZE rcvd: 271 [root@localhost /]# |
host命令格式:host [-t] [RR_type] name server_ip //server_ip指定使用指定的ip去測試解析,而不用本機測試
nslookup命令格式:nslookup [-options] [name] [server]
交互模式:nslookup>
server IP //以指定的IP作爲server進行解析
set q=RR_TYPE //要查詢的資源記錄類型
name //要查詢的名稱。
rndc命令:named服務控制命令
#rndc status
#rndc flush //清空緩存
10.5、配置一個正向區域的步驟:
①、定義區域:在主配置文件中或主配置文件的輔助配置文件中實現 //主配置文件:/etc/named.conf,主配置文件的輔助配置文件:/etc/named.rfc1912.zone
基本格式:
zone "zone-name" IN {
type {master | slave | hint | forward };
file "zone_name.zone";
};
注意:每行的分號(;)是不能少的,否則爲語法錯誤,hint表示定義爲根服務器;file “zone_name.zone”此處的路徑是相對路徑(/var/named/目錄下),也可以使用絕對路徑。
②、建立區域數據文件:在/var/named目錄下建立區域數據文件,主要記錄爲A、AAAA
③、讓服務器重載配置文件和區域數據文件;注意:重載前要記得檢查配置語法是否有錯誤。
正向區域配置示例:以magedu.com域爲例:
①、定義區域:
[root@localhost named]# vim /etc/named.rfc1912.zones //添加如下語句
zone "magedu.com" IN {
type master;
file "magedu.com.zone";
};
②、建立區域數據文件:
[root@localhost named]# vim /var/named/magedu.com.zone
$TTL 1D //定義區域全局TTL時間,下面的資源記錄不寫ttl,從此處繼承。
$ORIGIN magedu.com. //如果下面的資源記錄不寫全的話,則自動爲其補上此magedu.com.後綴。如果不寫此項,則從/etc/named.rfc1912.zones中定義的“zone_name”字符串補全
@ IN SOA @ admin.magedu.com. (
2018020401
1H
20M
1D
1W
)
@ IN NS ns1.magedu.com. //@代表區域的名稱
@ IN NS ns2 //會自動補上magedu.com. ;補上/etc/named.rfc1912.zones中定義的“zone_name”字符串,此時不要加點(.),和$ORIGIN不衝突
@ IN MX 10 mx1.magedu.com.
@ IN MX 20 mx2.magedu.com.
ns1 IN A 192.168.100.100
ns2 IN A 192.168.100.101
mx1 IN A 192.168.100.103
IN A 192.168.100.104
www.magedu.com. IN A 192.168.100.105
IN A 192.168.100.106 //如果此處的name和上次一樣,可以不寫name
web1.magedu.com. IN CNAME www.magedu.com.
web2 IN CNAME www
web3 IN A 192.168.100.107
[root@localhost named]#
注意:區域數據文件的權限要設置成其他用戶沒有權限;區域數據文件的屬主、屬組爲root named;然後在檢查主配置文件,區域數據文件的語法是否有錯誤。
[root@localhost named]# chgrp named magedu.com.zone
[root@localhost named]# chmod o= magedu.com.zone
[root@localhost named]# ll magedu.com.zone
-rw-r-----. 1 root named 561 Feb 4 07:11 magedu.com.zone
[root@localhost named]#
[root@localhost named]# named-checkconf
[root@localhost named]# named-checkzone magedu.com. /var/named/magedu.com.zone
③、讓服務器重載配置文件和區域數據文件:
[root@localhost named]# rndc status
[root@localhost named]# rndc reload
④、檢驗:
dig -t a www.magedu.com
dig -t a www.magedu.com @192.168.0.107
dig -t a web1.magedu.com @192.168.0.107
dig -t a www.magedu.com @192.168.0.107
dig -t a web1.magedu.com @192.168.0.107
dig -t a web2.magedu.com @192.168.0.107
dig -t a web3.magedu.com @192.168.0.107
10.6、配置解析一個反向區域:
①、定義區域:在主配置文件中或主配置文件的輔助配置文件中實現 //主配置文件:/etc/named.conf,主配置文件的輔助配置文件:/etc/named.rfc1912.zone
基本格式:
zone "zone-name" IN {
type {master | slave | hint | forward };
file "zone_name.zone";
};
注意:每行的分號(;)是不能少的,否則爲語法錯誤,hint表示定義爲根服務器;
zone-name:一般寫法爲ip地址的反寫,遵循特定格式:反寫的網段.in-addr.arpa.;如:1.2.3.4的記錄應寫成:3.2.1.in-addr.arpa.
file “zone_name.zone”此處的路徑是相對路徑(/var/named/目錄下),也可以使用絕對路徑。
②、建立區域數據文件:在/var/named目錄下建立區域數據文件,主要記錄爲PTR
③、讓服務器重載配置文件和區域數據文件;注意:重載前要記得檢查配置語法是否有錯誤。
正向區域配置示例:以magedu.cn域爲例:
①、定義區域:
[root@localhost named]# cat /etc/named.rfc1912.zones
zone "3.2.1.in-addr.arpa" IN {
type master;
file "1.2.3.zone";
};
②、定義反向區域數據文件
[root@localhost named]# vim /var/named/1.2.3.zone
$TTL 8H
$ORIGIN 3.2.1.in-addr.arpa. //自動補上區域名字,但是此時不再是magedu.cn;而是3.2.1.in-addr.arpa. ;因此名字要寫全了。簡寫的只能是IP不能是主機名
@ IN SOA magedu.cn admin.magedu.cn (
2018020214
1D
2H
30M
1W
)
IN NS ns1.magedu.cn.
IN NS ns2.magedu.cn.
67 IN PTR ns1.magedu.cn.
68 IN PTR ns1.magedu.cn.
69 IN PTR ns2.magedu.cn.
70 IN PTR www.magedu.cn.
[root@localhost named]#
[root@localhost named]# chgrp named 1.2.3.zone
[root@localhost named]# chmod o= 1.2.3.zone
③、驗證:
[root@localhost named]# rndc reload
[root@localhost named]# dig -x 192.168.0.70 @192.168.0.107