dns相關內容
阿新 • • 發佈:2018-02-19
跟蹤 notify 記錄 upd 組成 gin aid slaves etc dns基本工作原理
dns: domain name service
dns udp/53 tcp/53
udp 用於解析 tcp 用於區域傳送
dns: domain name service
dns udp/53 tcp/53
udp 用於解析 tcp 用於區域傳送
由域名服務器與域名解析器組成 用於域名和ip的相互轉換 dns:分布式 倒置的樹狀結構 最上方為根域 根域服務器世界一共有13臺 根域服務器下有多個組織服務器 如 .com .org .edu .net 等 也有如表示國家的域服務器 .cn .us等等 這些域名稱為頂級域 或者為 一級域 一級域下又有諸多二級域 二級域下又可以有諸多三級域 ... dns服務器的類型 1.主dns服務器 2.從dns服務器 3.唯緩存dns服務器 4.轉發器 原理:互聯網主機通信都是通過ip,域名只不過是提供一個更易記的渠道 客戶端發起dns請求流程: client --> /etc/hosts --> local cache --> DNS server(recursive 遞歸查詢) --> dns server local cache --> lterative(叠代查詢) --> 客戶端請求域名解析 首先查看/etc/hosts 文件中是否有解析的內容 若無在查詢緩存中時否還有上次解析的記錄 若無則去查找 指定的dns服務器 (一般來說指定的dns服務器為唯緩存dns服務器) 指定的dns服務器的緩存中若無相關緩存 則去找其他dns服務器(查找方式為自頂向下) 如 剛開始從根開始查找指定的域名 如查找 www.gaoleng.com 1. 我們指派的dns服務器 去找根 根會告訴我們指派的dns 他不知道我們所說的域名是哪個ip 但是.com他知道 你應該去找.com查找 並告訴我們 .com的地址 2. 我們指派的dns服務器又回去 找.com .com說 “我也不知道 你說的域名的 ip地址到底是多少 但是baidu.com應該知道 我跟你說他的ip是多少把 ” 3. 接著dns服務器又會去找 baidu.com的dns服務器 我們所要查找的域名 確實是在baidu.com域中 baidu.com的dns服務器會說 “你要找的域名 我確實知道他的 ip是.. ” 4. 指派的dns服務器 會緩存這一信息 並且 將該域名對應的ip 返回給客戶端 客戶端 也會緩存這一信息 這樣在緩存未到期之前 再次訪問www.baidu.com 就不會再去找dns服務器 而是直接在緩存中取得 客戶端 只收取最終結果 其余工作都有指派的dns服務器完成 遞歸查詢:客戶端請求一次 就可以得到最終的結果 客戶端不支持叠代查詢 所以依靠唯緩存服務器來幫助查詢 叠代查詢:服務器多次發送查找請求 多次返回
dig 命令查看dns搜尋過程
dig www.yahoo.com +trace ~]# dig www.yahoo.com +trace ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.5 <<>> www.yahoo.com +trace ;; global options: +cmd . 5 IN NS e.root-servers.net. . 5 IN NS m.root-servers.net. . 5 IN NS l.root-servers.net. . 5 IN NS g.root-servers.net. . 5 IN NS c.root-servers.net. . 5 IN NS k.root-servers.net. . 5 IN NS j.root-servers.net. . 5 IN NS h.root-servers.net. . 5 IN NS d.root-servers.net. . 5 IN NS i.root-servers.net. . 5 IN NS b.root-servers.net. . 5 IN NS f.root-servers.net. . 5 IN NS a.root-servers.net. ;; Received 494 bytes from 192.168.117.2#53(192.168.117.2) in 228 ms com. 172800 IN NS e.gtld-servers.net. com. 172800 IN NS b.gtld-servers.net. com. 172800 IN NS j.gtld-servers.net. com. 172800 IN NS m.gtld-servers.net. com. 172800 IN NS i.gtld-servers.net. com. 172800 IN NS f.gtld-servers.net. com. 172800 IN NS a.gtld-servers.net. com. 172800 IN NS g.gtld-servers.net. com. 172800 IN NS h.gtld-servers.net. com. 172800 IN NS l.gtld-servers.net. com. 172800 IN NS k.gtld-servers.net. com. 172800 IN NS c.gtld-servers.net. com. 172800 IN NS d.gtld-servers.net. ;; Received 507 bytes from 198.41.0.4#53(198.41.0.4) in 481 ms yahoo.com. 172800 IN NS ns1.yahoo.com. yahoo.com. 172800 IN NS ns5.yahoo.com. yahoo.com. 172800 IN NS ns2.yahoo.com. yahoo.com. 172800 IN NS ns3.yahoo.com. yahoo.com. 172800 IN NS ns4.yahoo.com. ;; Received 285 bytes from 192.31.80.30#53(192.31.80.30) in 304 ms www.yahoo.com. 1800 IN CNAME atsv2-fp.wg1.b.yahoo.com. wg1.b.yahoo.com. 172800 IN NS yf2.yahoo.com. wg1.b.yahoo.com. 172800 IN NS yf4.a1.b.yahoo.net. wg1.b.yahoo.com. 172800 IN NS yf3.a1.b.yahoo.net. wg1.b.yahoo.com. 172800 IN NS yf1.yahoo.com. ;; Received 178 bytes from 68.142.255.16#53(68.142.255.16) in 311 ms dns 解析答案 1.肯定答案 : 肯定 有的域名解析答案 2.否定答案 : 請求不存在等原因導致的 無法返回結果 註意 :(肯定答案和否定答案在dns服務器中都會有緩存 本地沒有的答案即為否定答案 這樣每次請求不存在的主機就不用讓主機所在區域的dns服務器每次都響應 占用資源) 3.權威答案 :由主機所在dns服務器解析出的直接得到的答案 4.非權威答案 : 不是由主機所在dns服務器解析返回的答案 而是從其他dns服務器緩存中獲取的答案
區域解析庫
資源記錄:resource record (RR)
記錄類型 SOA NS PTR A AAAA CNAME MX
SOA: 起始授權記錄 一個解析庫只能有一個 soa記錄 並且 soa記錄要在第一條 NS:專門表明當前區域的dns服務器 CNAME: 別名記錄 MX: 郵件交換器 PTR: 反向解析 IP --> FQDN A:FQDN --> IP AAAA: FQDN -->IPv6 註意 :1. TTL可以全局繼承 2. @可用於表示當前區域的名字 3. 同一個名字可以通過多個記錄 定義不同的值 此時dns服務器會以輪詢的方式響應 4. 同一個值也可以定義不同的名字 通過不同的名字指向同一個值 僅表示通過不同的名字可以找到一個主機而已 SOA: name :當前區域名稱如 gaoleng.com value : 多個部分組成 1.當前區域的dns服務器的FQDN或者當前區域名稱 可用@簡寫 2.當前管理員的郵箱地址,但地址中不可有@符號 一般用. 號代替 如 admin.gaoleng.com 3.主服務器協調屬性的定義 以及否定答案的TTL 例: daniu.com. IN SOA dns.daniu.com. root.daniu.com. (2017120902 1H 15M 1W 1D) NS: name : 當前區域名 value : 當前區域名的 dns服務器名稱 如 “ns1.gaoleng.com” 例如: @ IN NS ns1.gaoleng.com CNAME : name : 別名FQDN value : 正式的FQDN 例如: web.gaoleng.com IN CNAME www.gaoleng.com PTR : name:ip 的特定格式 如 1.2.3.4 要寫成 4.3.2.1 並且加上後綴.in-addr.arpa. 例:4.3.2.1 IN PTR ns1.gaoleng.com. A : name: 某主機的FQDN value:主機對應的ip 例如: www.gaoleng.com IN A 192.168.117.131 --------------------- IN A 192.168.117.130 --------------------- (註意第三條 輪詢 ) *.gaoleng.com IN A 192.168.117.131 ----------------------------------------------------(泛域名解析 避免用戶寫錯主機名而給錯誤答案 ) AAAA : name: 某主機的FQDN value:主機對應的ipv6 MX : name:當前區域名 value:當前區域名的服務器(smtp服務器)的主機名 一個區域內MX記錄可有多個,但每個記錄前都應該有一個數字(0-99表示其優先級) 數越小表示其優先級越高 例如: @ IN MX 10 mx1.gaoleng.com
bind
主配置文件 /etc/named.conf /etc.named.rfc1912.zones /etc/rndc.key
解析庫文件 /var/named/ZONE_NAME.zone
註意 :
(1). 一臺物理服務器 可以同時給多個區域提供解析
(2). 必須要有根區域文件
(3). 應該至少有兩個(如果包括ipv6 應該更多) 實現localhost 和本地回環地址 127.0.0.1 的解析庫
rndc : 默認與bind 安裝在同一主機 只能通過127.0.0.1 連接named進程 監聽在 953/tcp端口
主配置文件
全局配置 option{}
日誌子系統配置 logging{}
區域定義:本機能為哪些zone進行解析 就要定義哪些zone
zone "ZONE_NAME.ZONE" IN {}
註意 : 任何服務程序 想要能過通過網絡與其他主機訪問 至少要監聽在一個能與外部主機通信的ip上
option中默認指定的監聽地址為回環地址
緩存名稱服務器
只需要監聽在一個外部地址上即可
主dns服務器
1.定義zone區域
zone"ZONE_NAME.zone" IN {
type {master|slave|hind|forword} ;
file "..." ;
};
2.定義解析庫
定義內容 如 $TTL $ORIGIN (可加可不加 用於省略當前區域名字 ) 在SOA中一般不省略當前區域名字 或FQDN 在後面省略時要註意 省略後不可有點
如 ns1.gaoleng.com 不可為寫 ns1. 應寫成 ns1 ;加 oridin時 用法 如 $ORIGIN gaoleng.com
資源記錄
註意 : 定義完之後一般 將寫的文件的 權限定為 640 其他人不可讀 並且設置 named為文件的屬組 因為named程序 是由named用戶引導 在讀取配置文件 時若為其他人 無法讀取文件
chmod 640 zone_name chown :named zone_name
測試命令:
dig命令
dig [-t type ] name [@server] [query option]
指定資源類型 域名 指定臨時dns服務器 不加則為/etc/resolv.conf定義的dns 後接可加選項
查詢選項
+[no] trace :跟蹤解析過程
+[no] recurse :進行遞歸解析
測試反向dns解析
dig -x ip @server
模擬區域傳送
區域傳送:
1. 全量傳送 : 傳送整個解析庫
2. 增量傳送 : 傳送解析庫變化的部分
dig -t axfr zone_name @server
如
dig -t axfr gaoleng.com @192.168.117.129
host 命令
host [-t type] name server
nslookup 命令
nslookup [-option] [name|-] [sercer]
nslookup
>server 指定dns服務器
>set q=rr_type 設定類型
>NAME 要查詢的域名
檢查區域文件和解析庫文件格式是否正確
檢查區域
1. named-checkconf
檢查解析庫文件
2.named-checkzone "解析庫名ZONE_NAME" 解析庫文件名
如 named-checkzone "gaoleng.com" gaoleng.com.zone
測試時建議將dnssec設置成no 不然對一些測試實施會有影響
反向區域:
區域名為網絡地址的反寫 後接.in-addr.arpa.
192.168.117 ---> 117.168.192.in-addr.arpa.
1.定義區域
zone "ZONE_NAME" IN {
type {master|slave|forword};
file"ip.zone";
};
例如
zone "117.168.192.in-addr.arpa" IN {
type master;
file "192.168.117.zone";
};
2.區域解析庫文件
註意:反向解析庫不需要 MX A AAAA
示例
$TTL 1D
$ORIGIN 117.168.192.in-addr.arpa.
@ IN SOA ns1.gaoleng.com. root.gaoleng.com ( 2018020501 1D 1H 1W 1D )
IN NS ns1.gaoleng.com.
IN NS ns2.gaoleng.com.
131 IN PTR ns1.gaoleng.com.
129 IN PTR ns2.gaoleng.com.
129 IN PTR mx1.gaoleng.com.
131 IN PTR www.gaoleng.com.
IN PTR gaoleng.com.
主從復制:
1.從服務器應該為一臺獨立的服務器
2.主服務器的區域解析庫必須有一條NS記錄是指向從服務器 --- IN ns2.gaoleng.com ns2 IN A 192.168.117.131
3.從服務器只需要定義區域 而無需提供 解析庫文件 庫文件應該放置於/var/named/slaves目錄中
4.主服務器允許進行做區域傳送
5.主從服務器 時間應該同步 可通過ntp進行
6.bind 程序的版本應該一致 若不一致 應該主服務器版本低 從服務器版本高
從服務器
只需要 定義區域
zone "ZONE_NAME" IN {
type slave;
masters{master_ip ;};
file "slaves/ZONE_NAME.ZONE";
};
rndc:
rndc COMMAND
COMMAND:
reload:重載主配置文件和區域解析庫文件
reload zone:重載區域解析庫文件
status:查看bind狀態信息
retransfer zone:手動啟動傳送過程,而不管序列號是否增加
notify zone :重新對區域傳送發起通知
querylog : 開啟或關閉查詢日誌
trace:傳遞debug級別
trace LEVEL :設定debug級別
子域授權
1. 在父區域中定義子區域
shuai.gaoleng.com IN NS ns1.shuai.gaoleng.com
IN NS ns2.shuai.gaoleng.com
ns1.shuai.gaoleng.com IN A 192.168.117.131
ns2.shuai.gaoleng.com IN A 192.168.117.132
2. 在相應主機上定義子區域解析庫文件
$TTL 1d
$ORIGIN shuai.gaoleng.com.
@ IN SOA ns1.shuai.gaoleng.com. admin.shuai.gaoleng.com. ( 2018020601 1H 5M 1W 1D )
IN NS ns1
IN NS ns2
ns1 IN A 192.168.117.131
ns2 IN A 192.168.117.132
www IN A 192.168.117.129
定義轉發服務器
註意:1.被指定的轉發服務器需要為請求做遞歸,否則轉發請求不進行
2.forward中 first和only first 表示若轉發的服務器 不允許查詢時 那自己還會去做查詢操作 only表示 若轉發的服務器不允許查詢時 那自己也就放棄查詢
3.在進行子域或轉發測試時關閉dnssec 否則有的操作進行不了
1.全局定義
options{
forward first|only;
forwarders {FORWARD_DNS_IP;};
};
2.區域轉發
zone "ZONE_NAME" IN {
type forward;
forword first|only;
forwarders {FORWARD_DNS_IP;};
};
bind 的安全相關配置
acl:將一個或多個地址歸並為一個集合;並通過統一的一個名字調用
acl ACL_NAME {
ip;
net/per;
};
示例:
acl slaves{
192.168.117.129;
192.168.117.131;
127.0.0.1;
};
以後調用salves相當於調用裏面的ip
bind的4個內置acl
none:沒有一個主機
any:任意主機
local:本機
localnet:本機的ip和掩碼運算後的網絡地址
註意:acl只能先定義後調用 其一般定義在options前面部分
訪問控制指令
allow-query{}:允許查詢的主機,白名單
allow-transfer{}:允許區域傳送的主機
allow-resursion{}:允許遞歸的主機 如 allow-resursion{ slaves;}; 在zone中不能定義
allow-update:允許更新區域數據庫中的內容,關閉才安全
示例
zone "gaoleng.com" IN {
type master;
file "gaoleng.com";
allow-transfer{slaves;};
allow-update{none;};
};
view視圖
用於將不同地方客戶端的請求 解析到其客戶端所在區域的服務器上 如 將上海用戶訪問此域名 將其解析到傷害的服務器上 這樣響應的速度快
一個bind服務器可定義多個view 每個view可以定義多個zone
每個view用來匹配一組客戶端
多個view內可能需要對同一個區域進行解析,但使用不同的區域解析庫文件
格式:
view VIEW_NAME {
match-clients{};
};
註意:
1.一旦啟用了view,所有的zone都只能定義在view中
2.僅有必要在匹配到允許遞歸請求的客戶端所在的view定義根區域
3.客戶端請求到達時,是自上而下檢查每個view所服務的客戶端列表
示例:
view localht{
match-clients{mynet;};
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 "0.in-addr.arpa" IN {
type master;
file "named.empty";
allow-update { none; };
};
zone "gaoleng.com" IN {
type master;
file "gaoleng.com";
};
zone "." IN {
type hint;
file "named.ca";
};
zone "daniu.com" IN {
type master;
file "daniu.com.zone";
};
};
view ext {
match-clients{any;};
zone"gaoleng.com" IN {
type master;
file"gaoleng.com.ex.zone";
};
};
dns相關內容