DNS-bind
DNS:Domain Name Service 應用層協議,采用C/S構架
使用端口53/udp用於地址解析, 53/tcp用於主從同步,953/tcp用於rndc(remove netservice domain controler)
DNS名稱解析name resolving FQDN<--->IP
nsswitch名稱解析framework
使用本地stub resolver 讀取配置文件/etc/nsswitch.conf,通過庫調用讀取本地是否有對應記錄,沒有則通過庫調用執行dns解析。
本地hosts文件結構
IPADDR FQDN Ailases
域名結構
根域
一級域名: Top Level Domain: tld
com, edu, mil, gov, net, org, int,arpa
三類:組織域、國家域(.cn, .ca, .hk, .tw)、 反向域
二級域名
三級域名
最多127級域名
一條域名的解析過程:
首先查找本地/etc/hosts是否有記錄,有則使用本地記錄(可以修改優先級),沒有找到則向本地DNS服務器發送請求,服務器,首先查詢自己緩存,緩存中有直接返回值,沒有則向根域名服務器發送請求(對於DNS服務器只是單向的,自頂而下,不知上級域名服務器是哪一個,但是都有根服務器的地址),根返回(這裏是com)服務器中一個,本地NS繼續向com服務器發送域名解析查詢,域名服務器返回目標服務器NSIP(如果存在),本地NS繼續向目標NS服務器發送域名解析查詢,目標NS返回查詢結果,本地NS服務器把記錄加入緩存。
叠代查詢:對於local-NS而言,它所工作方式就是叠代查詢,每次NS向不同服務服務器發送請求並返回結果;
遞歸查詢:對於client而言,它的查詢就是遞歸的,它把請求給local ns,等待ns返回結果;
1.Bind中的socket采用的是epoll模型
2.Bind業務處理主要要關註一個run函數和isc_app_run函數
3.Bind運行主要是兩個線程和一個do while循環
main() { ... setup();//初始化工作 / * Start things running and then wait for a shutdown request or reload. */ do { result = isc_app_run(); //啟動APP if (result == ISC_R_RELOAD) { ns_server_reloadwanted(ns_g_server); //如果重啟加載 } else if (result != ISC_R_SUCCESS) { ... result = ISC_R_SUCCESS; } } while (result != ISC_R_SUCCESS); ...}
在setup函數裏初始化配置相關,比較龐雜,這裏主要關註create_managers裏,有兩個重要的函數isc_taskmgr_create、isc_socketmgr_create2這兩個函數分別起兩個線程,分別是run和watcher。分別處理任務隊列。和監聽socket管理相關。
這個do while循環,主要是result = isc_app_run();這個函數實際上等待各種結束程序信號,處理業務,如果需要重啟服務調用ns_server_reloadwanted。
run主要執行的代碼是dispatch(manager),dispath主要執行的是(event->ev_action)( (isc_task_t *)task,event);處理事件相關
watch主要執行的代碼是result = watch_fd(manager, fd, msg);在watch_fd中,關鍵代碼是epoll_ctl(manager->epoll_fd, EPOLL_CTL_ADD, fd, &event),這裏重新註冊epoll事件,然後epoll_wait再等待,而後再處理,如此反復。
DNS主從
主DNS服務器
從DNS服務器
緩存DNS服務器(轉發器)
主DNS服務器:管理和維護所負責解析的域內解析庫的服務器
從DNS服務器:從主服務器或從服務器“復制”(區域傳輸)解析庫副本
序列號:解析庫版本號,主服務器解析庫變化時,其序列遞增
刷新時間間隔:從服務器從主服務器請求同步解析的時間間隔
重試時間間隔:從服務器請求同步失敗時,再次嘗試時間間隔
過期時長:從服務器聯系不到主服務器時,多久後停止服務
“通知”機制:主服務器解析庫發生變化時,會主動通知從服務器
1在配置文件定時同步間隔時間refresh time同步
2修改文件後,使用rndc -c 從服務器key文件 notify,通知從更新需要同步
區域傳輸:
完全傳輸axfr:傳送整個解析庫
增量傳輸ixfr:傳遞解析庫變化的那部分內容
bind berkely Internet name domain
資源記錄:
域domain和區域zone:
domain 邏輯概念
zone 物理概念
主main
從slave
提示區hint(定義根)
轉發區forward(直接定義到哪裏找)
主配置文件和區域數據文件配置
主配置文件 /etc/named.conf
區域數據文件 /var/named/
option { diretory "/var/named" ; }; zone "." IN { type hint; file "named.ca"; #數據文件位置,相對於前面定義目錄的位置 }; zone "magedu.com." IN { type slave; #slave需要定義主服務器地址 file "xx.db"; master {master1_ip;master2_ip; }; };
最基本的一個named.conf配置文件
options { directory "/var/named" ; }; zone "." IN { type hint; file "named.ca"; }; zone "localhost" IN { type master; file "named.localhost"; }; zone "0.0.127.in-addr.arpa" IN { type master; file "med.loopback"; };
檢查配置文件
[[email protected] ~]# chmod 640 /etc/named.conf [[email protected] ~]# chown root:named /etc/named named/ named.iscdlv.key named.root.key named.conf named.rfc1912.zones [[email protected] ~]# chown root:named /etc/named.conf [[email protected] ~]# ls -l /etc/named.conf -rw-r-----. 1 root named 233 Jul 28 17:46 /etc/named.conf [[email protected] ~]# named-checkconf /etc/named.conf:2: unknown option ‘option‘
少了個s修改配置文件
[[email protected] ~]# named-checkconf [[email protected] ~]# named-checkzone "." /var/named/named.ca zone ./IN: has 0 SOA records zone ./IN: not loaded due to errors. [[email protected] ~]# named-checkzone "0.0.127.in-addr.arpa" /var/named/named.loopback zone 0.0.127.in-addr.arpa/IN: loaded serial 0 OK
錯誤日誌位置/var/log/messages
Jul 28 17:36:56 localhost systemd: Started Generate rndc key for BIND (DNS). Jul 28 17:36:56 localhost systemd: Starting Berkeley Internet Name Domain (DNS)... Jul 28 17:36:57 localhost bash: zone localhost/IN: loaded serial 0 Jul 28 17:36:57 localhost bash: zone 0.0.127.in-addr.arpa/IN: loading from master file med.loopback failed: file not found Jul 28 17:36:57 localhost bash: zone 0.0.127.in-addr.arpa/IN: not loaded due to errors. Jul 28 17:36:57 localhost bash: _default/0.0.127.in-addr.arpa/IN: file not found Jul 28 17:36:57 localhost systemd: named.service: control process exited, code=exited status=1 Jul 28 17:36:57 localhost systemd: Failed to start Berkeley Internet Name Domain (DNS). Jul 28 17:36:57 localhost systemd: Unit named.service entered failed state. Jul 28 17:36:57 localhost systemd: named.service failed. named-checkconfig#只檢查語法錯誤,不檢查邏輯錯誤,重啟服務時候,就會反應出來,這裏file有個文件名寫錯了
在主配置文件中定義zone,在/var/named/下創建對應文件名的zone文件:
$TTL 600 magedu.com.(或者用@) IN SOA ns1.nmagedu.com.(NS) mail.magedu.com. ( 20170727 2H 同步 間隔 5M 重試時間 2D expiretime 6H 緩存時間) (與上面相同可省) IN NS ns1(後面可省與域相同) IN MX 10 mail ns1 IN A 172.16.253.116 mail IN A 172 www IN A 172 WWW IN A 172 ftp IN CNAME www
反向區域 必須寫完整FQDN
$TTL 600 0.0.172.in-addr.arpa(或者@) IN SOA ns1.nmagedu.com.(NS) mail.magedu.com. ( 20170727 2H 同步 間隔 5M 重試時間 2D expiretime 6H 緩存時間) (與上面相同可省) IN NS ns1magedu.com. IN MX 10 mail 1 IN PTR ns1.magedu.com 1 IN PTR www.magedu.com.
本文出自 “庭前夜末空看雪” 博客,請務必保留此出處http://12550795.blog.51cto.com/12540795/1958375
DNS-bind