1幔烛、簡述DNS服務(wù)器原理,并搭建主-輔服務(wù)器厨埋。
一、DNS是什么
DNS(Domain Name Service的縮寫)的作用就是根據(jù)域名查出IP地址捐顷。IP地址是由32位二進制數(shù)字組成荡陷,人們很難記住這些IP,相反迅涮,大家愿意使用比較容易記憶的主機名字废赞。而電腦在處理IP數(shù)據(jù)報文時,是使用IP地址的叮姑,因為它是固定長度唉地。
DNS查詢的類型對于客戶端來說是遞歸查詢,對于DNS服務(wù)器來說传透,絕大多數(shù)是迭代查詢的渣蜗。DNS名稱解析中,從名稱到IP的查詢叫做正向解析旷祸,而從IP到名稱的查詢叫做反向解析。如果DNS服務(wù)器至少解析了一個或一個以上的域叫做DNS主服務(wù)器或者DNS輔助服務(wù)器讼昆,如果不負(fù)責(zé)任何解析叫做DNS緩存服務(wù)器托享。
現(xiàn)在互聯(lián)網(wǎng)規(guī)模很大,DNS被設(shè)計成一個分布式的數(shù)據(jù)庫系統(tǒng)浸赫,他分布的功能就是把一個大的數(shù)據(jù)庫切割成很多小的數(shù)據(jù)庫闰围,來分別提供一部分?jǐn)?shù)據(jù)的處理。全球一共分布了13臺DNS根服務(wù)器既峡,名字為A至M羡榴。
二、DNS的域名解析過程
用戶使用瀏覽器輸入網(wǎng)址時域名解析過程:
客戶訪問時运敢,先查自己的hosts文件校仑,有則返回
客戶hosts中沒有就去查自己的緩存,有則返回
客戶緩存沒有就去找dns服務(wù)器
dns服務(wù)器先找根服務(wù)器獲得頂級域服務(wù)器地址
dns服務(wù)器在找頂級域服務(wù)器去獲得二級域服務(wù)器地址
dns服務(wù)器從二級域服務(wù)器獲得最終的IP地址
客戶端從dns服務(wù)器中得到IP地址
DNS區(qū)域數(shù)據(jù)庫文件
資源記錄(Resource Record)的類型有以下幾個:
SOA:起始授權(quán)記錄传惠,只能有一個迄沫,必須放在第一條
NS:域名服務(wù)記錄,其中一個為主卦方,可以有多個
A:IPv4地址記錄
AAAA:IPv6地址記錄
CNAME:別名記錄
PTR:反向解析記錄
MX:郵件交換器
相關(guān)測試工具及命令
dig命令
用于測試DNS系統(tǒng)羊瘩,其不會查詢hosts文件,使用格式:
dig [-t RR_TYPE] name [@SERVER] [query options]
常用的查詢選項包括:
+[no]trace:跟蹤解析過程;
+[no]recurse:進行遞歸解析尘吗;
其常用用法包括:
反向解析測試:dig -x IP
測試區(qū)域傳送:dig -t [axfr|ixfr] DOMAIN [@server]
host命令
其用法類似于dig命令逝她,使用格式為:
host [-t RR_TYPE] name SERVER_IP
nslookup命令
nslookup命令有兩種使用模式,一種是命令模式睬捶,另一個交互模式黔宛。
其命令模式的使用格式為:nslookup [-options] [name] [server]
而交互模式的使用格式為:
nslookup>
server IP:以指定的IP為DNS服務(wù)器進行查詢;
set q=RR_TYPE:要查詢的資源記錄類型侧戴;
name:要查詢的名稱宁昭;
rndc命令
rndc命令為named服務(wù)的控制命令,其常用的用法有以下:
rndc status:顯示服務(wù)器狀態(tài)
rndc reload:在不停止DNS服務(wù)器工作的情況下酗宋,重新加載配置文件和區(qū)域文件
rndc flush:清理DNS緩存
bind中的安全相關(guān)的配置
bind有四個內(nèi)置的acl
none:沒有一個主機积仗;
any:任意主機;
local:本機蜕猫;
localnet:本機所在的IP所屬的網(wǎng)絡(luò)寂曹;
訪問控制指令:
allow-query {}; 允許查詢的主機;白名單回右;
allow-transfer {}; 允許向哪些主機做區(qū)域傳送隆圆;默認(rèn)為向所有主機;
allow-recursion {}; 允許哪些主機向當(dāng)前DNS服務(wù)器發(fā)起遞歸查詢請求翔烁;
allow-update {}; DDNS渺氧,允許動態(tài)更新區(qū)域數(shù)據(jù)庫文件中內(nèi)容;
三蹬屹、搭建主輔DNS服務(wù)器
環(huán)境說明
DNS主服務(wù)器:192.168.10.10
DNS輔服務(wù)器:192.168.10.11
DNS子域主服務(wù)器:192.168.10.12
1.設(shè)置主DNS服務(wù)器
安裝軟件
[root@localhost~]# yum -y install bind #安裝bind
[root@localhost~]# yum -y install bind-utils #安裝bind工具包
[root@localhost~]# systemctl start named #啟動服務(wù)
[root@localhost~]# netstat -tunlp #查看狀態(tài)
ActiveInternetconnections(only servers)
Proto? ?Recv-QSend-Q? ?Local? Address????Foreign? Address? State? ? ?PID/Program? name
tcp? ? ? ? ? ? ? ? ?0? ? ? ? ? 0? ?127.0.0.1:53? ? ? ? 0.0.0.0:*? ? ? ? ? ? ? ? LISTEN 1323/named
tcp? ? ? ? ? ? ? ? ?0? ? ? ? ? 0? ?0.0.0.0:22? ? ? ? ? ? 0.0.0.0:*? ? ? ? ? ? ? ? LISTEN891/sshd?
?tcp? ? ? ? ? ? ? ? ?0? ? ? ? ? 0? ?127.0.0.1:953? ? ?0.0.0.0:*? ? ? ? ? ? ? ? LISTEN1323/named?
?tcp? ? ? ? ? ? ? ? ?0? ? ? ? ? 0? ?127.0.0.1:25? ? ? ? 0.0.0.0:*? ? ? ? ? ? ? ?LISTEN994/master?
?tcp6? ? ? ? ? ? ? ?0? ? ? ? ? 0? ? ::1:53? ? ? ? ? ? ? ? ? :::*? ? ? ? ? ? ? ? ? ? ? ? LISTEN1323/named?
?tcp6? ? ? ? ? ? ? ?0? ? ? ? ? ?0? ?:::22????????????????????:::*????????????????????????LISTEN891/sshd?
?tcp6? ? ? ? ? ? ? ? 0? ? ? ? ? ?0? ::1:953? ? ? ? ? ? ? ? :::*? ? ? ? ? ? ? ? ? ? ? ? LISTEN1323/named?
?tcp6????????????????0? ? ? ? ? ?0? ::1:25? ? ? ? ? ? ? ? ? :::*????????????????????????LISTEN994/master?
?udp? ? ? ? ? ? ? ? ?0? ? ? ? ? ?0? 127.0.0.1:53? ? ?0.0.0.0:*????????????????1323/named?
?udp? ? ? ? ? ? ? ? ?0? ? ? ? ? ?0? 127.0.0.1:323? ?0.0.0.0:*????????????????639/chronyd?
?udp6? ? ? ? ? ? ? ?0????????????0? ::1:53? ? ? ? ? ? ? ?:::*????????????????????????1323/named?
?udp6????????????????0? ? ? ? ? ?0? ::1:323? ? ? ? ? ? ?:::*????????????????????????639/chronyd
#其中53端口被監(jiān)聽侣背,953端口被rndc監(jiān)聽
配置環(huán)境
[root@localhost ~]# vim /etc/resolv.conf #修改DNS配置文件
nameserver 192.168.10.10
[root@localhost ~]# vim /etc/named.conf
listen-on port 53 { 192.168.10.10; }; #修改監(jiān)聽通信地址IP
allow-query? ? { any; };? #允許任何人連接,設(shè)置成any
dnssec-enable no;
dnssec-validation no;
#關(guān)閉dnssec,設(shè)置為no
配置解析一個正向區(qū)域
[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "test.com" IN {
? ? ? ? type master;? #定義主類型
? ? ? ? file "test.com.zone";? #這是相對路徑慨默,在/var/named下
};
建立區(qū)域數(shù)據(jù)文件
[root@localhost ~]# vim /var/named/test.com.zone
$TTL 3600
$ORIGIN test.com.? #補一個后綴
@ IN SOA ns1.test.com. dnsadmin.test.com. (
? ? ? ? 2018053101
? ? ? ? 1H
? ? ? ? 10M
? ? ? ? 3D
? ? ? ? 1D )
? ? ? ? IN NS ns1? #前面有補后綴可以簡寫贩耐,否則寫全稱最后要有點號
? ? ? ? IN MX 10 mx1
? ? ? ? IN MX 20 mx2
ns1 IN A 192.168.10.10
MX1 IN A 192.168.10.21
MX2 IN A 192.168.10.22
www IN A 192.168.10.10
web IN CNAME www
bbs IN A 192.168.10.23
bbs IN A 192.168.10.24
修改權(quán)限,檢測語法
[root@localhost ~]# chgrp named /var/named/test.com.zone
[root@localhost ~]# chmod o= /var/named/test.com.zone
#修改新鍵的區(qū)域數(shù)據(jù)文件權(quán)限
[root@localhost named]# named-checkconf
[root@localhost named]# named-checkzone test.com /var/named/test.com.zone
zone test.com/IN: loaded serial 2018053101
OK
#檢測語法
服務(wù)器重載配置文件和區(qū)域數(shù)據(jù)文件
[root@localhost named]# rndc status
number of zones: 101
[root@localhost named]# rndc reload
server reload successful
[root@localhost named]# rndc status
number of zones: 102
#查看狀態(tài)可以看到重載后數(shù)字加1
DNS主服務(wù)器正向解析測試
[root@localhost ~]# dig -t -A www.test.com
;; Warning, ignoring invalid type -A
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -t -A www.test.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18274
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.test.com.? ? ? ? ? IN? A
;; ANSWER SECTION:
www.test.com.? ? ? 3600? ? IN? A? 192.168.10.10
;; AUTHORITY SECTION:
test.com.? ? ? 3600? ? IN? NS? ns1.test.com.
;; ADDITIONAL SECTION:
ns1.test.com.? ? ? 3600? ? IN? A? 192.168.10.10
;; Query time: 1 msec
;; SERVER: 192.168.10.10#53(192.168.10.10)
;; WHEN: Thu May 31 21:55:26 EDT 2018
;; MSG SIZE? rcvd: 91
[root@localhost named]# dig -t A web.test.com
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -t A web.test.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65204
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;web.test.com.? ? ? ? ? IN? A
;; ANSWER SECTION:
web.test.com.? ? ? 3600? ? IN? CNAME? www.test.com.
www.test.com.? ? ? 3600? ? IN? A? 192.168.10.10
;; AUTHORITY SECTION:
test.com.? ? ? 3600? ? IN? NS? ns1.test.com.
;; ADDITIONAL SECTION:
ns1.test.com.? ? ? 3600? ? IN? A? 192.168.10.10
;; Query time: 1 msec
;; SERVER: 192.168.10.10#53(192.168.10.10)
;; WHEN: Thu May 31 21:11:25 EDT 2018
;; MSG SIZE? rcvd: 109
[root@localhost ~]# host -t A bbs.test.com
bbs.test.com has address 192.168.10.23
bbs.test.com has address 192.168.10.24
[root@localhost ~]# host -t A bbs.test.com
bbs.test.com has address 192.168.10.23
bbs.test.com has address 192.168.10.24
[root@localhost ~]# host -t A bbs.test.com
bbs.test.com has address 192.168.10.24
bbs.test.com has address 192.168.10.23
配置解析一個反向區(qū)域
[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "10.168.192.in-addr.arpa" IN {
? ? ? ? type master;
? ? ? ? file "192.168.10.zone";
};
建立反向區(qū)域數(shù)據(jù)文件
[root@localhost ~]# vim /var/named/192.168.10.zone
$TTL 3600
$ORIGIN 10.168.192.in-addr.arpa.
@ IN SOA ns1.test.com. nsadmin.test.com. (
? ? ? ? 2018060101
? ? ? ? 1H
? ? ? ? 10M
? ? ? ? 3D
? ? ? ? 12H )
? ? ? ? IN NS ns1.test.com.? #反向解析此處不能簡寫
10 IN PTR ns1.test.com.
21 IN PTR mx1.test.com.
22 IN PTR mx2.test.com.
23 IN PTR bbs.test.com.
24 IN PTR bbs.test.com.
10 IN PTR www.test.com.
修改反向區(qū)域文件權(quán)限厦取,檢測語法
[root@localhost named]# chgrp named /var/named/192.168.10.zone
[root@localhost named]# chmod o= /var/named/192.168.10.zone
[root@localhost named]# named-checkconf
[root@localhost named]# named-checkzone 10.168.192.in-addr.arpa /var/named/192.168.10.zone
zone 10.168.192.in-addr.arpa/IN: loaded serial 2018060101
OK
重載配置文件和區(qū)域數(shù)據(jù)文件
[root@localhost named]# rndc status
number of zones: 102
[root@localhost named]# rndc reload
server reload successful
[root@localhost named]# rndc status
number of zones: 103
主服務(wù)器反向解析測試
[root@localhost named]# dig -x 192.168.10.10
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -x 192.168.10.10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25958
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;10.10.168.192.in-addr.arpa.? ? IN? PTR
;; ANSWER SECTION:
10.10.168.192.in-addr.arpa. 3600 IN PTR ns1.test.com.
10.10.168.192.in-addr.arpa. 3600 IN PTR www.test.com.
;; AUTHORITY SECTION:
10.168.192.in-addr.arpa. 3600? IN? NS? ns1.test.com.
;; ADDITIONAL SECTION:
ns1.test.com.? ? ? 3600? ? IN? A? 192.168.10.10
;; Query time: 1 msec
;; SERVER: 192.168.10.10#53(192.168.10.10)
;; WHEN: Thu May 31 22:26:03 EDT 2018
;; MSG SIZE? rcvd: 129
2.設(shè)置輔DNS服務(wù)器
[root@localhost ~]# yum -y install bind bind-utils
[root@localhost ~]# systemctl start named.service
[root@localhost ~]# vim /etc/resolv.conf
nameserver 192.168.10.11
[root@localhost ~]# vim /etc/named.conf
listen-on port 53 { 192.168.10.11; };
allow-query? ? { any; };
dnssec-enable no;
dnssec-validation no;
配置11輔服務(wù)器的正向區(qū)域
[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "test.com" IN {? ? #正向區(qū)域
? ? ? ? type slave;
? ? ? ? file "slaves/test.com.zone";? #區(qū)域數(shù)據(jù)文件位置
? ? ? ? masters { 192.168.10.10; };? #定義正向區(qū)域主服務(wù)器IP
};
[root@localhost ~]# named-checkconf
來到10主服務(wù)器上去配置文件
[root@localhost ~]# vim /var/named/test.com.zone
$TTL 3600
$ORIGIN test.com.
@ IN SOA ns1.test.com. dnsadmin.test.com. (
? ? ? ? 2018053102? #每次修改文件時手動加1潮太,從服務(wù)器才會更新
? ? ? ? 1H
? ? ? ? 10M
? ? ? ? 3D
? ? ? ? 1D )
? ? ? ? IN NS ns1
? ? ? ? IN NS ns2? #增加A記錄指向11輔服務(wù)器
? ? ? ? IN MX 10 mx1
? ? ? ? IN MX 20 mx2
ns1 IN A 192.168.10.10
ns2 IN A 192.168.10.11? #輔服務(wù)器IP
MX1 IN A 192.168.10.21
MX2 IN A 192.168.10.22
www IN A 192.168.10.10
web IN CNAME www
bbs IN A 192.168.10.23
bbs IN A 192.168.10.24
[root@localhost ~]# named-checkzone test.com /var/named/test.com.zone
zone test.com/IN: loaded serial 2018053102
OK
[root@localhost ~]# rndc reload
server reload successful
[root@localhost ~]# rndc status
server is up and running
#檢測語法,檢測狀態(tài)都正常
來到11輔服務(wù)器
[root@localhost ~]# rndc reload
server reload successful
[root@localhost slaves]# ll /var/named/slaves/
total 4
-rw-r--r-- 1 named named 533 May 31 23:17 test.com.zone
#正向區(qū)域數(shù)據(jù)文件已經(jīng)同步過來
測試用11輔服務(wù)器解析網(wǎng)址
[root@localhost slaves]# dig -t A www.test.com @192.168.10.11
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -t A www.test.com @192.168.10.11
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45851
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.test.com.? ? ? ? ? IN? A
;; ANSWER SECTION:
www.test.com.? ? ? 3600? ? IN? A? 192.168.10.10
;; AUTHORITY SECTION:
test.com.? ? ? 3600? ? IN? NS? ns2.test.com.
test.com.? ? ? 3600? ? IN? NS? ns1.test.com.
;; ADDITIONAL SECTION:
ns1.test.com.? ? ? 3600? ? IN? A? 192.168.10.10
ns2.test.com.? ? ? 3600? ? IN? A? 192.168.10.11
;; Query time: 0 msec
;; SERVER: 192.168.10.11#53(192.168.10.11)
;; WHEN: Thu May 31 23:20:16 EDT 2018
;; MSG SIZE? rcvd: 125
進一步對主輔服務(wù)器進行測試,來到10主服務(wù)器
[root@localhost ~]# vim /var/named/test.com.zone
$TTL 3600
$ORIGIN test.com.
@ IN SOA ns1.test.com. dnsadmin.test.com. (
? ? ? ? 2018053103? #序列號加1
? ? ? ? 1H
? ? ? ? 10M
? ? ? ? 3D
? ? ? ? 1D )
? ? ? ? IN NS ns1
? ? ? ? IN NS ns2
? ? ? ? IN MX 10 mx1
? ? ? ? IN MX 20 mx2
ns1 IN A 192.168.10.10
ns2 IN A 192.168.10.11
MX1 IN A 192.168.10.21
MX2 IN A 192.168.10.22
www IN A 192.168.10.10
web IN CNAME www
bbs IN A 192.168.10.23
bbs IN A 192.168.10.24
pop3 IN A 192.168.10.25? #增加一條A記錄
[root@localhost ~]# rndc reload
server reload successful
#重載配置
來到11輔服務(wù)器
[root@localhost ~]# 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 Thu 2018-05-31 22:38:36 EDT; 54min ago
? Process: 1090 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS)
? Process: 1087 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: 1093 (named)
? CGroup: /system.slice/named.service
? ? ? ? ? └─1093 /usr/sbin/named -u named -c /etc/named.conf
May 31 23:17:11 localhost.localdomain named[1093]: zone test.com/IN: transferred serial 2018053102
May 31 23:17:11 localhost.localdomain named[1093]: transfer of 'test.com/IN' from 192.168.10.10#53: Transfer completed.../sec)
May 31 23:17:11 localhost.localdomain named[1093]: zone test.com/IN: sending notifies (serial 2018053102)
May 31 23:30:31 localhost.localdomain named[1093]: client 192.168.10.10#2372: received notify for zone 'test.com'
May 31 23:30:31 localhost.localdomain named[1093]: zone test.com/IN: refresh: unexpected rcode (REFUSED) from master 1....0#0)
May 31 23:30:31 localhost.localdomain named[1093]: zone test.com/IN: Transfer started.
May 31 23:30:31 localhost.localdomain named[1093]: transfer of 'test.com/IN' from 192.168.10.10#53: connected using 19...46792
May 31 23:30:31 localhost.localdomain named[1093]: zone test.com/IN: transferred serial 2018053103
May 31 23:30:31 localhost.localdomain named[1093]: transfer of 'test.com/IN' from 192.168.10.10#53: Transfer completed.../sec)
May 31 23:30:31 localhost.localdomain named[1093]: zone test.com/IN: sending notifies (serial 2018053103)
Hint: Some lines were ellipsized, use -l to show in full.
#輔服務(wù)器不需要reload虾攻,此時看到自動更新到新序列號铡买,文件也傳輸過來了
[root@localhost ~]# dig -t A pop3.test.com @192.168.10.11
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -t A pop3.test.com @192.168.10.11
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24355
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;pop3.test.com.? ? ? ? IN? A
;; ANSWER SECTION:
pop3.test.com.? ? ? 3600? ? IN? A? 192.168.10.25
;; AUTHORITY SECTION:
test.com.? ? ? 3600? ? IN? NS? ns1.test.com.
test.com.? ? ? 3600? ? IN? NS? ns2.test.com.
;; ADDITIONAL SECTION:
ns1.test.com.? ? ? 3600? ? IN? A? 192.168.10.10
ns2.test.com.? ? ? 3600? ? IN? A? 192.168.10.11
;; Query time: 1 msec
;; SERVER: 192.168.10.11#53(192.168.10.11)
;; WHEN: Thu May 31 23:54:58 EDT 2018
;; MSG SIZE? rcvd: 126
配置11輔服務(wù)器反向區(qū)域
[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "10.168.192.in-addr.arpa" IN {
? ? ? ? type slave;
? ? ? ? file "slaves/192.168.10.zone";
? ? ? ? masters { 192.168.10.10; };
};
[root@localhost ~]# named-checkconf
配置10主服務(wù)器反向區(qū)域的數(shù)據(jù)文件
[root@localhost ~]# vim /var/named/192.168.10.zone
$TTL 3600
$ORIGIN 10.168.192.in-addr.arpa.
@ IN SOA ns1.test.com. nsadmin.test.com. (
? ? ? ? 2018060102
? ? ? ? 1H
? ? ? ? 10M
? ? ? ? 3D
? ? ? ? 12H )
? ? ? ? IN NS ns1.test.com.
? ? ? ? IN NS ns2.test.com.? #增加PTR記錄指向11輔服務(wù)器
10 IN PTR ns1.test.com.
11 IN PTR ns2.test.com.? #11輔服務(wù)器名稱
21 IN PTR mx1.test.com.
22 IN PTR mx2.test.com.
23 IN PTR bbs.test.com.
24 IN PTR bbs.test.com.
10 IN PTR www.test.com.
[root@localhost ~]# named-checkzone 10.168.192.in-addr.arpa /var/named/192.168.10.zone
zone 10.168.192.in-addr.arpa/IN: loaded serial 2018060102
OK
[root@localhost ~]# rndc reload
server reload successful
#檢測語法,重載配置
來到11輔服務(wù)器
[root@localhost ~]# rndc reload
server reload successful
[root@localhost ~]# ll /var/named/slaves/
total 8
-rw-r--r-- 1 named named 600 Jun? 1 02:23 192.168.10.zone
-rw-r--r-- 1 named named 574 Jun? 1 02:10 test.com.zone
#反向區(qū)域的數(shù)據(jù)文件也已經(jīng)同步過來
測試在11輔服務(wù)器反向解析IP
[root@localhost ~]# dig -x 192.168.10.10 @192.168.10.11
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -x 192.168.10.10 @192.168.10.11
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50592
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;10.10.168.192.in-addr.arpa.? ? IN? PTR
;; ANSWER SECTION:
10.10.168.192.in-addr.arpa. 3600 IN PTR ns1.test.com.
10.10.168.192.in-addr.arpa. 3600 IN PTR www.test.com.
;; AUTHORITY SECTION:
10.168.192.in-addr.arpa. 3600? IN? NS? ns2.test.com.
10.168.192.in-addr.arpa. 3600? IN? NS? ns1.test.com.
;; ADDITIONAL SECTION:
ns1.test.com.? ? ? 3600? ? IN? A? 192.168.10.10
ns2.test.com.? ? ? 3600? ? IN? A? 192.168.10.11
;; Query time: 1 msec
;; SERVER: 192.168.10.11#53(192.168.10.11)
;; WHEN: Fri Jun 01 02:25:17 EDT 2018
;; MSG SIZE? rcvd: 163
在11輔服務(wù)器測試
[root@localhost ~]# dig -x 192.168.10.25 @192.168.10.11
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -x 192.168.10.25 @192.168.10.11
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35322
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;25.10.168.192.in-addr.arpa.? ? IN? PTR
;; ANSWER SECTION:
25.10.168.192.in-addr.arpa. 3600 IN PTR pop3.test.com.
;; AUTHORITY SECTION:
10.168.192.in-addr.arpa. 3600? IN? NS? ns1.test.com.
10.168.192.in-addr.arpa. 3600? IN? NS? ns2.test.com.
;; ADDITIONAL SECTION:
ns1.test.com.? ? ? 3600? ? IN? A? 192.168.10.10
ns2.test.com.? ? ? 3600? ? IN? A? 192.168.10.11
;; Query time: 1 msec
;; SERVER: 192.168.10.11#53(192.168.10.11)
;; WHEN: Fri Jun 01 02:36:48 EDT 2018
;; MSG SIZE? rcvd: 150
手動測試區(qū)域傳送功能
[root@localhost ~]# dig -t axfr test.com @192.168.10.11
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -t axfr test.com @192.168.10.11
;; global options: +cmd
test.com.? ? ? 3600? ? IN? SOA ns1.test.com. dnsadmin.test.com. 2018053103 3600 600 259200 86400
test.com.? ? ? 3600? ? IN? MX? 10 mx1.test.com.
test.com.? ? ? 3600? ? IN? MX? 20 mx2.test.com.
test.com.? ? ? 3600? ? IN? NS? ns1.test.com.
test.com.? ? ? 3600? ? IN? NS? ns2.test.com.
bbs.test.com.? ? ? 3600? ? IN? A? 192.168.10.23
bbs.test.com.? ? ? 3600? ? IN? A? 192.168.10.24
MX1.test.com.? ? ? 3600? ? IN? A? 192.168.10.21
MX2.test.com.? ? ? 3600? ? IN? A? 192.168.10.22
ns1.test.com.? ? ? 3600? ? IN? A? 192.168.10.10
ns2.test.com.? ? ? 3600? ? IN? A? 192.168.10.11
pop3.test.com.? ? ? 3600? ? IN? A? 192.168.10.25
web.test.com.? ? ? 3600? ? IN? CNAME? www.test.com.
www.test.com.? ? ? 3600? ? IN? A? 192.168.10.10
test.com.? ? ? 3600? ? IN? SOA ns1.test.com. dnsadmin.test.com. 2018053103 3600 600 259200 86400
;; Query time: 1 msec
;; SERVER: 192.168.10.11#53(192.168.10.11)
;; WHEN: Fri Jun 01 02:40:11 EDT 2018
;; XFR size: 15 records (messages 1, bytes 350)
[root@localhost ~]# dig -t axfr 10.168.192.in-addr.arpa @192.168.10.10
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -t axfr 10.168.192.in-addr.arpa @192.168.10.10
;; global options: +cmd
10.168.192.in-addr.arpa. 3600? IN? SOA ns1.test.com. nsadmin.test.com. 2018060103 3600 600 259200 43200
10.168.192.in-addr.arpa. 3600? IN? NS? ns1.test.com.
10.168.192.in-addr.arpa. 3600? IN? NS? ns2.test.com.
10.10.168.192.in-addr.arpa. 3600 IN PTR ns1.test.com.
10.10.168.192.in-addr.arpa. 3600 IN PTR www.test.com.
11.10.168.192.in-addr.arpa. 3600 IN PTR ns2.test.com.
21.10.168.192.in-addr.arpa. 3600 IN PTR mx1.test.com.
22.10.168.192.in-addr.arpa. 3600 IN PTR mx2.test.com.
23.10.168.192.in-addr.arpa. 3600 IN PTR bbs.test.com.
24.10.168.192.in-addr.arpa. 3600 IN PTR bbs.test.com.
25.10.168.192.in-addr.arpa. 3600 IN PTR pop3.test.com.
10.168.192.in-addr.arpa. 3600? IN? SOA ns1.test.com. nsadmin.test.com. 2018060103 3600 600 259200 43200
;; Query time: 2 msec
;; SERVER: 192.168.10.10#53(192.168.10.10)
;; WHEN: Fri Jun 01 02:42:53 EDT 2018
;; XFR size: 12 records (messages 1, bytes 319)
這種開放式的區(qū)域傳送對服務(wù)器有巨大的風(fēng)險霎箍,我們需要配置訪問控制寻狂,讓主服務(wù)器只開放給輔服務(wù)器做傳送
四、訪問控制朋沮,子域授權(quán)
配置192.168.10.12子域主服務(wù)器流程:
首先到192.168.10.10主服務(wù)器中添加子域服務(wù)器的數(shù)據(jù)
[root@localhost ~]# vim /var/named/test.com.zone
$ORIGIN test.com.
@ IN SOA ns1.test.com. dnsadmin.test.com. (
? ? ? ? 2018053104? #序列號加1
? ? ? ? 1H
? ? ? ? 10M
? ? ? ? 3D
? ? ? ? 1D )
? ? ? ? IN NS ns1
? ? ? ? IN NS ns2
? ? ? ? IN MX 10 mx1
? ? ? ? IN MX 20 mx2
ops? ? IN NS ns1.ops? #增加子域服務(wù)器
ns1 IN A 192.168.10.10
ns2 IN A 192.168.10.11
MX1 IN A 192.168.10.21
MX2 IN A 192.168.10.22
www IN A 192.168.10.10
web IN CNAME www
bbs IN A 192.168.10.23
bbs IN A 192.168.10.24
ns1.ops IN A 192.168.10.12? #增加子域服務(wù)器A標(biāo)記
配置12子域服務(wù)器
[root@localhost ~]# yum -y install bind bind-utils
[root@localhost ~]# systemctl start named.service
[root@localhost ~]# vim /etc/resolv.conf
nameserver 192.168.10.12
[root@localhost ~]# vim /etc/named.conf
listen-on port 53 { 127.0.0.1; 192.168.10.12; };
//allow-query? ? { localhost; };? ? #注釋掉這一行
dnssec-enable no;
dnssec-validation no;
[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "ops.test.com" IN {
? ? ? ? type master;
? ? ? ? file "ops.test.com.zone";
};?
#增加三級域蛇券,增加正向區(qū)域的子域
[root@localhost ~]# vim /etc/named/ops.test.com.zone
$TTL 3600
$ORIGIN ops.test.com.
@ IN SOA ns1.ops.test.com. nsadmin.ops.test.com. (
? ? ? ? 2018060101
? ? ? ? 1H
? ? ? ? 10M
? ? ? ? 1D
? ? ? ? 2H )
? ? ? ? IN NS ns1
ns1 IN A 192.168.10.12
www IN A 192.168.10.12
[root@localhost ~]# chgrp named /var/named/ops.test.com.zone
[root@localhost ~]# chmod o= /var/named/ops.test.com.zone
[root@localhost ~]# named-checkconf
[root@localhost ~]# named-checkzone ops.test.com /var/named/ops.test.com.zone
zone ops.test.com/IN: loaded serial 2018060101
OK
[root@localhost ~]# rndc reload
server reload successful
測試
[root@localhost ~]# dig -t A www.ops.test.com @192.168.10.12
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -t A www.ops.test.com @192.168.10.12
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13329
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.ops.test.com.? ? ? IN? A
;; ANSWER SECTION:
www.ops.test.com.? 3600? ? IN? A? 192.168.10.12
;; AUTHORITY SECTION:
ops.test.com.? ? ? 3600? ? IN? NS? ns1.ops.test.com.
;; ADDITIONAL SECTION:
ns1.ops.test.com.? 3600? ? IN? A? 192.168.10.12
;; Query time: 1 msec
;; SERVER: 192.168.10.12#53(192.168.10.12)
;; WHEN: Fri Jun 01 03:45:00 EDT 2018
;; MSG SIZE? rcvd: 95
子域服務(wù)器解析www.test.com時缀壤,因自己不能解析默認(rèn)會去互聯(lián)網(wǎng)根域上去迭代查詢
[root@localhost ~]# dig -t A www.test.com @192.168.10.12
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -t A www.test.com @192.168.10.12
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32424
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.test.com.? ? ? ? ? IN? A
;; ANSWER SECTION:
www.test.com.? ? ? 3579? ? IN? A? 69.172.200.235
;; AUTHORITY SECTION:
test.com.? ? ? 172779? IN? NS? ns66.worldnic.com.
test.com.? ? ? 172779? IN? NS? ns65.worldnic.com.
;; ADDITIONAL SECTION:
ns65.worldnic.com.? 172779? IN? A? 207.204.40.133
ns66.worldnic.com.? 172779? IN? A? 207.204.21.133
;; Query time: 1 msec
;; SERVER: 192.168.10.12#53(192.168.10.12)
;; WHEN: Fri Jun 01 21:06:53 EDT 2018
;; MSG SIZE? rcvd: 136
子域定義轉(zhuǎn)發(fā)域到主輔服務(wù)器,test.com會轉(zhuǎn)發(fā)到主輔服務(wù)器中解析
[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "test.com" IN {
? ? ? ? type forward;
? ? ? ? forward only;
? ? ? ? forwarders { 192.168.10.10; 192.168.10.11; };
};
#在配置文件末尾添加這段轉(zhuǎn)發(fā)規(guī)則
[root@localhost ~]# rndc reload
server reload successful
[root@localhost ~]# rndc flush
#清空緩存
此時可以解析出正確的IP
[root@localhost ~]# dig -t A www.test.com @192.168.10.12
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -t A www.test.com @192.168.10.12
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63618
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.test.com.? ? ? ? ? IN? A
;; ANSWER SECTION:
www.test.com.? ? ? 3600? ? IN? A? 192.168.10.10
;; AUTHORITY SECTION:
test.com.? ? ? 3600? ? IN? NS? ns2.test.com.
test.com.? ? ? 3600? ? IN? NS? ns1.test.com.
;; ADDITIONAL SECTION:
ns2.test.com.? ? ? 3600? ? IN? A? 192.168.10.11
ns1.test.com.? ? ? 3600? ? IN? A? 192.168.10.10
;; Query time: 6 msec
;; SERVER: 192.168.10.12#53(192.168.10.12)
;; WHEN: Fri Jun 01 21:23:08 EDT 2018
;; MSG SIZE? rcvd: 125
上面是對特定區(qū)域的區(qū)域轉(zhuǎn)發(fā)解析請求纠亚,也可以配置本地不能解析的全部轉(zhuǎn)給其他服務(wù)器來解析的全局轉(zhuǎn)發(fā)
[root@localhost ~]# vim /etc/named.conf
forward only;
forwarders { 192.168.10.10; };? #在options代碼段中添加這兩行指令
#并刪除掉上面的區(qū)域轉(zhuǎn)發(fā)規(guī)則
[root@localhost ~]# rndc reload
[root@localhost ~]# rndc flush
[root@localhost ~]# dig -t A www.test.com @192.168.10.12
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -t A www.test.com @192.168.10.12
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9713
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.test.com.? ? ? ? ? IN? A
;; ANSWER SECTION:
www.test.com.? ? ? 3560? ? IN? A? 192.168.10.10
;; AUTHORITY SECTION:
test.com.? ? ? 3560? ? IN? NS? ns2.test.com.
test.com.? ? ? 3560? ? IN? NS? ns1.test.com.
;; ADDITIONAL SECTION:
ns2.test.com.? ? ? 3560? ? IN? A? 192.168.10.11
ns1.test.com.? ? ? 3560? ? IN? A? 192.168.10.10
;; Query time: 1 msec
;; SERVER: 192.168.10.12#53(192.168.10.12)
;; WHEN: Fri Jun 01 21:47:02 EDT 2018
;; MSG SIZE? rcvd: 125
配置訪問控制命令
[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "test.com" IN {
? ? ? ? type master;
? ? ? ? file "test.com.zone";
? ? ? ? allow-transfer { slaves; };
};
[root@localhost ~]# vim /etc/named.conf
acl slaves {
? ? ? ? 192.168.10.11;
};
#在options前面加上這一段
上面的訪問控制列表中沒有12服務(wù)器塘慕,所以用12傳輸失敗
[root@localhost ~]# dig -t axfr test.com @192.168.10.12
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -t axfr test.com @192.168.10.12
;; global options: +cmd
; Transfer failed.
服務(wù)器只允許列表中網(wǎng)段主機可以執(zhí)行遞歸查詢
[root@localhost ~]# vim /etc/named.conf
acl mynet {
? ? ? ? 192.168.10.0/24;
? ? ? ? 127.0.0.0/8;
};
#在options前面加上這一段
allow-recuresion { mynet; };
#recursion yes;修改這上面這句
2、搭建并實現(xiàn)智能DNS蒂胞。
要實現(xiàn)DNS服務(wù)器的智能解析图呢,需要先理解一個概念:view
假如有臺web主機,www.test.com是域名骗随,它有兩個IP蛤织,一個接內(nèi)網(wǎng)IP為192.168.10.10,一個接外網(wǎng)IP為1.1.1.1鸿染。來自互聯(lián)網(wǎng)的用戶會解析成1.1.1.1指蚜,而來自內(nèi)網(wǎng)的用戶不需要解析成外網(wǎng)IP在連進來,只需要直接解析成內(nèi)網(wǎng)IP192.168.10.10就可以了涨椒。這種根據(jù)客戶端的不同來源將同一個主機解析成不同的結(jié)果摊鸡,就叫做view。
修改主DNS的named.conf配置文件
[root@localhost ~]# vim /etc/named.conf
options {
......
};
logging {
......
};
view internal {
? ? ? ? match-clients { 192.168.10.11; };#設(shè)置此IP解析成外網(wǎng)
? ? ? ? zone "." IN {
? ? ? ? ? ? ? ? type hint;
? ? ? ? ? ? ? ? file "named.ca";
? ? ? ? };
? ? ? ? zone "test.com" IN {
? ? ? ? ? ? ? ? type master;
? ? ? ? ? ? ? ? file "test.com/internal";
? ? ? ? };
? ? ? ? include "/etc/named.rfc1912.zones";
? ? ? ? include "/etc/named.root.key";
};
view external {
? ? ? ? match-clients { any; };#除了上面的IP范圍蚕冬,其他所有IP解析成內(nèi)網(wǎng)
? ? ? ? zone "." IN {
? ? ? ? ? ? ? ? type hint;
? ? ? ? ? ? ? ? file "named.ca";
? ? ? ? };
? ? ? ? zone "test.com" IN {
? ? ? ? ? ? ? ? type master;
? ? ? ? ? ? ? ? file "test.com/external";
? ? ? ? };
? ? ? ? include "/etc/named.rfc1912.zones";
? ? ? ? include "/etc/named.root.key";
};
建立兩個正向區(qū)域數(shù)據(jù)文件
[root@localhost ~]# vim /var/named/test.com/internal
$TTL 3600
$ORIGIN test.com.
@ IN SOA ns1.test.com. dnsadmin.test.com. (
? ? ? ? 2018053101
? ? ? ? 1H
? ? ? ? 10M
? ? ? ? 3D
? ? ? ? 1D )
? ? ? ? IN NS ns1
ns1 IN A 192.168.10.10
www IN A 1.1.1.1
web IN CNAME www
bbs IN A 1.1.1.2
bbs IN A 1.1.1.3
[root@localhost ~]# vim /var/named/test.com/external
$TTL 3600
$ORIGIN test.com.
@ IN SOA ns1.test.com. dnsadmin.test.com. (
? ? ? ? 2018053101
? ? ? ? 1H
? ? ? ? 10M
? ? ? ? 3D
? ? ? ? 1D )
? ? ? ? IN NS ns1
ns1 IN A 192.168.10.10
www IN A 192.168.10.10
web IN CNAME www
bbs IN A 192.168.10.23
bbs IN A 192.168.10.24
檢測語法并設(shè)置權(quán)限
[root@localhost ~]# named-checkconf
[root@localhost ~]# named-checkzone test.com /var/named/test.com/internal
zone test.com/IN: loaded serial 2018053101
OK
[root@localhost ~]# named-checkzone test.com /var/named/test.com/external
zone test.com/IN: loaded serial 2018053101
OK
[root@localhost ~]# chgrp named /var/named/test.com/{internal,external}
[root@localhost ~]# chmod o= /var/named/test.com/{internal,external}
[root@localhost ~]# rndc reload
server reload successful
用192.168.10.12進行解析免猾,解析成內(nèi)網(wǎng)IP
[root@localhost ~]# dig -t A www.test.com @192.168.10.10
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -t A www.test.com @192.168.10.10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47742
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.test.com.? ? ? ? ? IN? A
;; ANSWER SECTION:
www.test.com.? ? ? 3600? ? IN? A? 192.168.10.10
;; AUTHORITY SECTION:
test.com.? ? ? 3600? ? IN? NS? ns1.test.com.
;; ADDITIONAL SECTION:
ns1.test.com.? ? ? 3600? ? IN? A? 192.168.10.10
;; Query time: 2 msec
;; SERVER: 192.168.10.10#53(192.168.10.10)
;; WHEN: Sat Jun 02 02:45:02 EDT 2018
;; MSG SIZE? rcvd: 91
[root@localhost ~]# dig -t A bbs.test.com @192.168.10.10
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -t A bbs.test.com @192.168.10.10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36168
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;bbs.test.com.? ? ? ? ? IN? A
;; ANSWER SECTION:
bbs.test.com.? ? ? 3600? ? IN? A? 192.168.10.24
bbs.test.com.? ? ? 3600? ? IN? A? 192.168.10.23
;; AUTHORITY SECTION:
test.com.? ? ? 3600? ? IN? NS? ns1.test.com.
;; ADDITIONAL SECTION:
ns1.test.com.? ? ? 3600? ? IN? A? 192.168.10.10
;; Query time: 1 msec
;; SERVER: 192.168.10.10#53(192.168.10.10)
;; WHEN: Sat Jun 02 02:45:20 EDT 2018
;; MSG SIZE? rcvd: 107
用192.168.10.11進行解析,解析成外網(wǎng)IP
[root@localhost ~]# dig -t A www.test.com @192.168.10.10
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -t A www.test.com @192.168.10.10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39708
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.test.com.? ? ? ? ? IN? A
;; ANSWER SECTION:
www.test.com.? ? ? 3600? ? IN? A? 1.1.1.1
;; AUTHORITY SECTION:
test.com.? ? ? 3600? ? IN? NS? ns1.test.com.
;; ADDITIONAL SECTION:
ns1.test.com.? ? ? 3600? ? IN? A? 192.168.10.10
;; Query time: 1 msec
;; SERVER: 192.168.10.10#53(192.168.10.10)
;; WHEN: Sat Jun 02 02:47:01 EDT 2018
;; MSG SIZE? rcvd: 91
[root@localhost ~]# dig -t A bbs.test.com @192.168.10.10
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -t A bbs.test.com @192.168.10.10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44362
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;bbs.test.com.? ? ? ? ? IN? A
;; ANSWER SECTION:
bbs.test.com.? ? ? 3600? ? IN? A? 1.1.1.2
bbs.test.com.? ? ? 3600? ? IN? A? 1.1.1.3
;; AUTHORITY SECTION:
test.com.? ? ? 3600? ? IN? NS? ns1.test.com.
;; ADDITIONAL SECTION:
ns1.test.com.? ? ? 3600? ? IN? A? 192.168.10.10
;; Query time: 1 msec
;; SERVER: 192.168.10.10#53(192.168.10.10)
;; WHEN: Sat Jun 02 02:47:24 EDT 2018
;; MSG SIZE? rcvd: 107
此時一個智能DNS服務(wù)器就搭建完成了囤热,比如在我國應(yīng)用比較多的場景是按照客戶端的線路是電信線路還是網(wǎng)通線路猎提,服務(wù)器自動解析成自己服務(wù)器上相對應(yīng)的電信IP或者網(wǎng)通IP,從而使客戶端和服務(wù)端連接在同一個運營商的線路上旁蔼,獲得最好的網(wǎng)速忧侧。
3、使用iptable實現(xiàn): 放行ssh,telnet, ftp, web服務(wù)80端口牌芋,其他端口服務(wù)全部拒絕
1、關(guān)閉firewalld松逊,清除filter表中的規(guī)則
iptables -F
2躺屁、添加規(guī)則
iptables -I INPUT -p tcp -m multiport --dports 21,22,21,80 -j ACCEPT
3、查看規(guī)則
iptables -vnL?
4经宏、NAT原理總結(jié)
1. NAT 簡介
1.1 IP地址
為了區(qū)分IP使用場景,我們可將IP地址可以分為:公網(wǎng)IP地址和私網(wǎng)IP地址.
公有IP地址: 也叫全局地址,是指合法的IP地址,它是由NIC(網(wǎng)絡(luò)信息中心)或者ISP(網(wǎng)絡(luò)服務(wù)提供商)分配的地址屋谭,對外代表一個或多個內(nèi)部局部地址靖诗,是全球統(tǒng)一的可尋 址的地址。
私有IP地址: 也叫內(nèi)部地址沪斟,屬于非注冊地址广辰,專門為組織機構(gòu)內(nèi)部使用。因特網(wǎng)分配編號委員會(IANA)保留了3塊IP地址做為私有IP地址:
10.0.0.0 ——— 10.255.255.255
172.16.0.0——— 172.16.255.255
192.168.0.0———192.168.255.255
地址池:地址池是有一些外部地址(全球唯一的IP地址)組合而成,我們稱這樣的一個地址集合為地址池择吊。在內(nèi)部網(wǎng)絡(luò)的數(shù)據(jù)包通過地址轉(zhuǎn)換到達外部網(wǎng)絡(luò)時李根,將會在地址池中選擇某個IP地址作為數(shù)據(jù)包的源IP地址,這樣可以有效的利用用戶的外部地址几睛,提高訪問外部網(wǎng)絡(luò)的能力房轿。
1.2 NAT
NAT 英文全稱是“Network Address Translation”,中文意思是“網(wǎng)絡(luò)地址轉(zhuǎn)換”所森,它是一個IETF(Internet Engineering Task Force, Internet工程任務(wù)組)標(biāo)準(zhǔn)囱持,允許一個整體機構(gòu)以一個公用IP(Internet Protocol)地址出現(xiàn)在Internet上。顧名思義焕济,它是一種把內(nèi)部私有網(wǎng)絡(luò)地址(IP地址)翻譯成合法網(wǎng)絡(luò)IP地址的技術(shù)纷妆。因此我們可以認(rèn)為,NAT在一定程度上吼蚁,能夠有效的解決公網(wǎng)地址不足的問題凭需。
NAT 功能通常被集成到路由器、防火墻肝匆、ISDN路由器或者單獨的NAT設(shè)備中粒蜈。
1.2 分類
NAT有三種類型:
靜態(tài)NAT(Static NAT)
動態(tài)地址NAT(Pooled NAT)
網(wǎng)絡(luò)地址端口轉(zhuǎn)換NAPT(Port-Level NAT)。
1.2.1靜態(tài)NAT
通過手動設(shè)置旗国,使 Internet 客戶進行的通信能夠映射到某個特定的私有網(wǎng)絡(luò)地址和端口枯怖。如果想讓連接在 Internet 上的計算機能夠使用某個私有網(wǎng)絡(luò)上的服務(wù)器(如網(wǎng)站服務(wù)器)以及應(yīng)用程序(如游戲),那么靜態(tài)映射是必需的能曾。靜態(tài)映射不會從 NAT 轉(zhuǎn)換表中刪除度硝。
如果在 NAT 轉(zhuǎn)換表中存在某個映射,那么 NAT 只是單向地從 Internet 向私有網(wǎng)絡(luò)傳送數(shù)據(jù)寿冕。這樣蕊程,NAT 就為連接到私有網(wǎng)絡(luò)部分的計算機提供了某種程度的保護。但是驼唱,如果考慮到 Internet 的安全性藻茂,NAT 就要配合全功能的防火墻一起使用。
對于以上網(wǎng)絡(luò)拓?fù)鋱D玫恳,當(dāng)內(nèi)網(wǎng)主機 10.1.1.1如果要與外網(wǎng)的主機201.0.0.11通信時辨赐,主機(IP:10.1.1.1)的數(shù)據(jù)包經(jīng)過路由器時,路由器通過查找NAT table 將IP數(shù)據(jù)包的源IP地址(10.1.1.1)改成與之對應(yīng)的全局IP地址(201.0.0.1)京办,而目標(biāo)IP地址201.0.0.11保持不變掀序,這樣,數(shù)據(jù)包就能到達201.0.0.11惭婿。而當(dāng)主機HostB(IP:201.0.0.11) 響應(yīng)的數(shù)據(jù)包到達與內(nèi)網(wǎng)相連接的路由器時不恭,路由器同樣查找NAT table叶雹,將IP數(shù)據(jù)包的目的IP 地址改成10.1.1.1,這樣內(nèi)網(wǎng)主機就能接收到外網(wǎng)主機發(fā)過來的數(shù)據(jù)包县袱。在靜態(tài)NAT方式中浑娜,內(nèi)部的IP地址與公有IP地址是一種一一對應(yīng)的映射關(guān)系,所以式散,采用這種方式的前提是筋遭,機構(gòu)能夠申請到足夠多的全局IP地址。
1.2.2 動態(tài)NAT
動態(tài)地址NAT只是轉(zhuǎn)換IP地址暴拄,它為每一個內(nèi)部的IP地址分配一個臨時的外部IP地址漓滔,主要應(yīng)用于撥號,對于頻繁的遠程聯(lián)接也可以采用動態(tài)NAT乖篷。當(dāng)遠程用戶聯(lián)接上之后响驴,動態(tài)地址NAT就會分配給他一個IP地址,用戶斷開時撕蔼,這個IP地址就會被釋放而留待以后使用豁鲤。
動態(tài)NAT方式適合于 當(dāng)機構(gòu)申請到的全局IP地址較少,而內(nèi)部網(wǎng)絡(luò)主機較多的情況鲸沮。內(nèi)網(wǎng)主機IP與全局IP地址是多對一的關(guān)系琳骡。當(dāng)數(shù)據(jù)包進出內(nèi)網(wǎng)時,具有NAT功能的設(shè)備對IP數(shù)據(jù)包的處理與靜態(tài)NAT的一樣讼溺,只是NAT table表中的記錄是動態(tài)的楣号,若內(nèi)網(wǎng)主機在一定時間內(nèi)沒有和外部網(wǎng)絡(luò)通信,有關(guān)它的IP地址映射關(guān)系將會被刪除怒坯,并且會把該全局IP地址分配給新的IP數(shù)據(jù)包使用炫狱,形成新的NAT table映射記錄。
1.2.3網(wǎng)絡(luò)地址端口轉(zhuǎn)換NAPT
網(wǎng)絡(luò)地址端口轉(zhuǎn)換NAPT(Network Address Port Translation)則是把內(nèi)部地址映射到外部網(wǎng)絡(luò)的一個IP地址的不同端口上剔猿。它可以將中小型的網(wǎng)絡(luò)隱藏在一個合法的IP地址后面视译。NAPT與 動態(tài)地址NAT不同,它將內(nèi)部連接映射到外部網(wǎng)絡(luò)中的一個單獨的IP地址上归敬,同時在該地址上加上一個由NAT設(shè)備選定的端口號酷含。
NAPT是使用最普遍的一種轉(zhuǎn)換方式,它又包含兩種轉(zhuǎn)換方式:SNAT和DNAT弄慰。
(1)源NAT(Source NAT,SNAT):修改數(shù)據(jù)包的源地址蝶锋。源NAT改變第一個數(shù)據(jù)包的來源地址陆爽,它永遠會在數(shù)據(jù)包發(fā)送到網(wǎng)絡(luò)之前完成,數(shù)據(jù)包偽裝就是一具SNAT的例子扳缕。
(2)目的NAT(Destination NAT慌闭,DNAT):修改數(shù)據(jù)包的目的地址别威。Destination NAT剛好與SNAT相反,它是改變第一個數(shù)據(jù)包的目的地地址驴剔,如平衡負(fù)載省古、端口轉(zhuǎn)發(fā)和透明代理就是屬于DNAT。
在這里插入圖片描述
2 NAT原理
2.1 地址轉(zhuǎn)換
NAT的基本工作原理是丧失,當(dāng)私有網(wǎng)主機和公共網(wǎng)主機通信的IP包經(jīng)過NAT網(wǎng)關(guān)時豺妓,將IP包中的源IP或目的IP在私有IP和NAT的公共IP之間進行轉(zhuǎn)換。
在這里插入圖片描述
2.2 連接跟蹤
在上述過程中布讹,NAT Gateway在收到響應(yīng)包后琳拭,就需要判斷將數(shù)據(jù)包轉(zhuǎn)發(fā)給誰。此時如果子網(wǎng)內(nèi)僅有少量客戶機描验,可以用靜態(tài)NAT手工指定白嘁;但如果內(nèi)網(wǎng)有多臺客戶機,并且各自訪問不同網(wǎng)站膘流,這時候就需要連接跟蹤(connection track)絮缅。
在這里插入圖片描述
在NAT Gateway收到客戶機發(fā)來的請求包后,做源地址轉(zhuǎn)換呼股,并且將該連接記錄保存下來耕魄,當(dāng)NAT Gateway收到服務(wù)器來的響應(yīng)包后,查找Track Table卖怜,確定轉(zhuǎn)發(fā)目標(biāo)屎开,做目的地址轉(zhuǎn)換,轉(zhuǎn)發(fā)給客戶機马靠。
2.3 端口轉(zhuǎn)換
以上述客戶機訪問服務(wù)器為例奄抽,當(dāng)僅有一臺客戶機訪問服務(wù)器時,NAT Gateway只須更改數(shù)據(jù)包的源IP或目的IP即可正常通訊甩鳄。但是如果Client A和Client B同時訪問Web Server逞度,那么當(dāng)NAT Gateway收到響應(yīng)包的時候,就無法判斷將數(shù)據(jù)包轉(zhuǎn)發(fā)給哪臺客戶機妙啃,如下圖所示档泽。
在這里插入圖片描述
此時,NAT Gateway會在Connection Track中加入端口信息加以區(qū)分揖赴。如果兩客戶機訪問同一服務(wù)器的源端口不同馆匿,那么在Track Table里加入端口信息即可區(qū)分,如果源端口正好相同燥滑,那么在實行SNAT和DNAT的同時對源端口也要做相應(yīng)的轉(zhuǎn)換渐北,如下圖所示。
在這里插入圖片描述
3 應(yīng)用
NAT主要可以實現(xiàn)以下幾個功能:
數(shù)據(jù)包偽裝
平衡負(fù)載
端口轉(zhuǎn)發(fā)
透明代理
3.1 數(shù)據(jù)偽裝
可以將內(nèi)網(wǎng)數(shù)據(jù)包中的地址信息更改成統(tǒng)一的對外地址信息铭拧,不讓內(nèi)網(wǎng)主機直接暴露在因特網(wǎng)上赃蛛,保證內(nèi)網(wǎng)主機的安全恃锉。同時,該功能也常用來實現(xiàn)共享上網(wǎng)呕臂。例如破托,內(nèi)網(wǎng)主機訪問外網(wǎng)時,為了隱藏內(nèi)網(wǎng)拓?fù)浣Y(jié)構(gòu)歧蒋,使用全局地址替換私有地址土砂。
3.2 端口轉(zhuǎn)發(fā)
當(dāng)內(nèi)網(wǎng)主機對外提供服務(wù)時,由于使用的是內(nèi)部私有IP地址疏尿,外網(wǎng)無法直接訪問瘟芝。因此,需要在網(wǎng)關(guān)上進行端口轉(zhuǎn)發(fā)褥琐,將特定服務(wù)的數(shù)據(jù)包轉(zhuǎn)發(fā)給內(nèi)網(wǎng)主機锌俱。例如公司小王在自己的服務(wù)器上架設(shè)了一個Web網(wǎng)站,他的IP地址為192.168.0.5敌呈,使用默認(rèn)端口80贸宏,現(xiàn)在他想讓局域網(wǎng)外的用戶也能直接訪問他的Web站點。利用NAT即可很輕松的解決這個問題磕洪,服務(wù)器的IP地址為210.59.120.89吭练,那么為小王分配一個端口,例如81析显,即所有訪問210.59.120.89:81的請求都自動轉(zhuǎn)向192.168.0.5:80鲫咽,而且這個過程對用戶來說是透明的。
3.3 負(fù)載平衡
目的地址轉(zhuǎn)換NAT可以重定向一些服務(wù)器的連接到其他隨機選定的服務(wù)器谷异。例如1.2.3所講的目的NAT的例子分尸。
3.4 失效終結(jié)
目的地址轉(zhuǎn)換NAT可以用來提供高可靠性的服務(wù)。如果一個系統(tǒng)有一臺通過路由器訪問的關(guān)鍵服務(wù)器歹嘹,一旦路由器檢測到該服務(wù)器當(dāng)機箩绍,它可以使用目的地址轉(zhuǎn)換NAT透明的把連接轉(zhuǎn)移到一個備份服務(wù)器上,提高系統(tǒng)的可靠性尺上。
3.5 透明代理
例如自己架設(shè)的服務(wù)器空間不足材蛛,需要將某些鏈接指向存在另外一臺服務(wù)器的空間;或者某臺計算機上沒有安裝IIS服務(wù)怎抛,但是卻想讓網(wǎng)友訪問該臺計算機上的內(nèi)容卑吭,這個時候利用IIS的Web站點重定向即可輕松的幫助我們搞定。
4 NAT的缺陷
NAT在最開始的時候是非常完美的马绝,但隨著網(wǎng)絡(luò)的發(fā)展豆赏,各種新的應(yīng)用層出不窮,此時NAT也暴露出了缺點。NAT的缺陷主要表現(xiàn)在以下幾方面:
4.1 不能處理嵌入式IP地址或端口
NAT設(shè)備不能翻譯那些嵌入到應(yīng)用數(shù)據(jù)部分的IP地址或端口信息河绽,它只能翻譯那種正常位于IP首部中的地址信息和位于TCP/UDP首部中的端口信息,如下圖,由于對方會使用接收到的數(shù)據(jù)包中嵌入的地址和端口進行通信唉窃,這樣就可能產(chǎn)生連接故障耙饰,如果通信雙方都是使用的公網(wǎng)IP,這不會造成什么問題纹份,但如果那個嵌入式地址和端口是內(nèi)網(wǎng)的苟跪,顯然連接就不可能成攻,原因就如開篇所說的一樣蔓涧。MSN Messenger的部分功能就使用了這種方式來傳遞IP和端口信息件已,這樣就導(dǎo)致了NAT設(shè)備后的客戶端網(wǎng)絡(luò)應(yīng)用程序出現(xiàn)連接故障。
4.2 不能從公網(wǎng)訪問內(nèi)部網(wǎng)絡(luò)服務(wù)
由于內(nèi)網(wǎng)是私有IP元暴,所以不能直接從公網(wǎng)訪問內(nèi)部網(wǎng)絡(luò)服務(wù)篷扩,比如WEB服務(wù),對于這個問題茉盏,我們可以采用建立靜態(tài)映射的方法來解決鉴未。比如有一條靜態(tài)映射,是把218.70.201.185:80與192.168.0.88:80映射起的鸠姨,當(dāng)公網(wǎng)用戶要訪問內(nèi)部WEB服務(wù)器時铜秆,它就首先連接到218.70.201.185:80,然后NAT設(shè)備把請求傳給192.168.0.88:80讶迁,192.168.0.88把響應(yīng)返回NAT設(shè)備连茧,再由NAT設(shè)備傳給公網(wǎng)訪問用戶。
4.3 數(shù)據(jù)包丟失
有一些應(yīng)用程序雖然是用A端口發(fā)送數(shù)據(jù)的巍糯,但卻要用B端口進行接收啸驯,不過NAT設(shè)備翻譯時卻不知道這一點,它仍然建立一條針對A端口的映射鳞贷,結(jié)果對方響應(yīng)的數(shù)據(jù)要傳給B端口時坯汤,NAT設(shè)備卻找不到相關(guān)映射條目而會丟棄數(shù)據(jù)包。
4.4 一些P2P應(yīng)用在NAT后無法進行
對于那些沒有中間服務(wù)器的純P2P應(yīng)用(如電視會議搀愧,娛樂等)來說惰聂,如果大家都位于NAT設(shè)備之后,雙方是無法建立連接的咱筛。因為沒有中間服務(wù)器的中轉(zhuǎn)搓幌,NAT設(shè)備后的P2P程序在NAT設(shè)備上是不會有映射條目的,也就是說對方是不能向你發(fā)起一個連接的⊙嘎幔現(xiàn)在已經(jīng)有一種叫做P2P NAT穿越的技術(shù)來解決這個問題溉愁。
5 結(jié)語
NAT技術(shù)無可否認(rèn)是在ipv4地址資源的短缺時候起到了緩解作用;在減少用戶申請ISP服務(wù)的花費和提供比較完善的負(fù)載平衡功能等方面帶來了不少好處饲趋。但是在ipv4地址在以后幾年將會枯竭拐揭,NAT技術(shù)不能改變ip地址空間不足的本質(zhì)撤蟆。然而在安全機制上也潛在著威脅,在配置和管理上也是一個挑戰(zhàn)堂污。如果要從根本上解決ip地址資源的問題家肯,ipv6才是最根本之路。在ipv4轉(zhuǎn)換到ipv6的過程中盟猖,NAT技術(shù)確實是一個不錯的選擇讨衣,相對其他的方案優(yōu)勢也非常明顯。
5式镐、iptables實現(xiàn)SNAT和DNAT反镇,并對規(guī)則持久保存。
實現(xiàn)SNAT和DNAT都需要開啟內(nèi)核數(shù)據(jù)轉(zhuǎn)發(fā)功能
[root@localhost ~]# vim /etc/sysctl.conf
# 把下列選項改正1
net.ipv4.ip_forward=0
...
net.ipv4.ip_forward=1
2.1 SNAT
基于nat表的target娘汞,適用于固定的公網(wǎng)IP
SNAT選項:
--to-source [ipaddr[-ipaddr]][:port[-port]]
--random
語法:
iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j SNAT --to-source ExtIP
范例:
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 192.168.122.103
2.2 DNAT
nat表的target歹茶,適用于端口映射,即可重定向到本機你弦,也可以支持重定向至不同主機的不同端口辆亏,但不支持多目標(biāo),即不支持負(fù)載均衡功能
DNAT選項:
--to-destination [ipaddr[-ipaddr]][:port[-port]]
DNAT語法:
iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp --dport PORT -j DNAT --todestination InterSeverIP[:PORT]
范例:
[root@localhost ~]# iptables -t nat -A PREROUTING -d 192.168.122.103 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.6:80
2.3 iptables規(guī)則持久保存:
CentOS 7鳖目、8
iptables-save > /PATH/TO/SOME_RULES_FILE
CentOS 6
# 將規(guī)則覆蓋保存至/etc/sysconfig/iptables文件中
service iptables save
2.4 加載規(guī)則
2.4.1 CentOS 7扮叨、8 重新載入預(yù)存規(guī)則文件中規(guī)則:
iptables-restore < /PATH/FROM/SOME_RULES_FILE
iptables-restore選項
-n, --noflush:不清除原有規(guī)則
-t, --test:僅分析生成規(guī)則集,但不提交
2.4.2 CentOS 6:
service iptables? restart? ? ?
#會自動從/etc/sysconfig/iptables 重新載入規(guī)則
2.5 開機自動重載規(guī)則
2.5.1 用腳本保存各iptables命令领迈;讓此腳本開機后自動運行
/etc/rc.d/rc.local文件中添加腳本路徑 /PATH/TO/SOME_SCRIPT_FILE
用規(guī)則文件保存各規(guī)則彻磁,開機時自動載入此規(guī)則文件中的規(guī)則
在/etc/rc.d/rc.local文件添加
iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE
2.5.2 定義Unit File, CentOS 7,8 可以安裝 iptables-services 實現(xiàn)iptables.service
范例: CentOS 7狸捅,8 使用 iptables-services
[root@centos8 ~]# yum -y install iptables-services
[root@centos8 ~]# cp /etc/sysconfig/iptables{,.bak}
#保存現(xiàn)在的規(guī)則到文件中方法1
[root@centos8 ~]# /usr/libexec/iptables/iptables.init save
#保存現(xiàn)在的規(guī)則到文件中方法2
iptables-save > /etc/sysconfig/iptables
#開機啟動
[root@centos8 ~]# systemctl enable iptables.service