一、簡(jiǎn)述DNS服務(wù)器原理顶瞒,并搭建主-輔服務(wù)器。
域名系統(tǒng):Domain Name System元旬,互聯(lián)網(wǎng)的一項(xiàng)服務(wù)榴徐,采用分布式集群工作方式。主要實(shí)現(xiàn)域名和IP地址的相互映射匀归,使人更方面地訪問互聯(lián)網(wǎng)坑资。使用TCP/UDP 53端口。
DNS常見資源記錄類型:
- 主機(jī)記錄(A記錄):RFC 1035定義穆端,A記錄是用于名稱解析的重要記錄袱贮,它將特定的主機(jī)名映射到對(duì)應(yīng)主機(jī)的IP地址上。
- 別名記錄(CNAME記錄): RFC 1035定義体啰,CNAME記錄用于將某個(gè)別名指向到某個(gè)A記錄上攒巍,常應(yīng)用于CDN。
- IPv6主機(jī)記錄(AAAA記錄): RFC 3596定義荒勇,與A記錄對(duì)應(yīng)柒莉,用于將特定的主機(jī)名映射到一個(gè)主機(jī)的IPv6地址兢孝。
- 域名服務(wù)器記錄(NS記錄) :用來(lái)指定該域名由哪個(gè)DNS服務(wù)器來(lái)進(jìn)行解析窗轩。DNS服務(wù)器NS記錄地址一般出現(xiàn)形式為:ns1.domain.com腹备、ns2.domain.com等镀岛。 簡(jiǎn)要來(lái)講走越,NS記錄是指定由哪個(gè)DNS服務(wù)器解析域名喳整。
- NAPTR記錄:RFC 3403定義魏保,它提供了正則表達(dá)式方式去映射一個(gè)域名妥衣。
DNS服務(wù)器工作原理:
DNS查詢有兩種方式:遞歸和迭代芦倒。
DNS客戶端和設(shè)置使用的本地DNS服務(wù)器一般是遞歸查詢模式津坑,本地DNS服務(wù)器負(fù)責(zé)全權(quán)處理客戶端的DNS查詢請(qǐng)求疆瑰,直到返回最終結(jié)果。DNS服務(wù)器之間一般采用迭代查詢模式昙啄。
以查詢 www.xxx.org 為例:
1. 客戶端發(fā)送查詢報(bào)文"www.xxx.org"至DNS服務(wù)器穆役,DNS服務(wù)器首先檢查自身緩存,如果存在記錄則直接返回結(jié)果梳凛。
2. 如果記錄老化或不存在耿币,則:
2.1 DNS服務(wù)器向根域名服務(wù)器發(fā)送查詢報(bào)文"www.xxx.org",根域名服務(wù)器返回頂級(jí)域 .org 的域名服務(wù)器地址韧拒。
2.2 DNS服務(wù)器向 .org 域的頂級(jí)域名服務(wù)器發(fā)送查詢報(bào)文"www.xxx.org"淹接,得到二級(jí)域 .xxx.org 的權(quán)威域名服務(wù)器地址。
2.3 DNS服務(wù)器向 .xxx.org 域的權(quán)威域名服務(wù)器發(fā)送查詢報(bào)文"query www.xxx.org"叛溢,得到主機(jī) www 的A記錄蹈集,存入自身緩存并返回給客戶端。
搭建主-輔服務(wù)器 -- 基于VMware centos7環(huán)境
- 安裝DNS軟件
bind:服務(wù)器(必選)
bind-libs:相關(guān)庫(kù)(依賴雇初,yum安裝bind會(huì)自動(dòng)帶上)
bind-utils: 客戶端(建議安裝)
bind-chroot: 安全包拢肆,將dns相關(guān)文件放至 /var/named/chroot/(按需,常規(guī)不安裝)
[root@centos2 ~]# yum install -y bind bind-utils
- DNS服務(wù)器配置
2.1 修改 /etc/named.conf -- 只列出關(guān)注修改內(nèi)容
主
options {
//listen-on port 53 { 127.0.0.1; }; --修改監(jiān)聽端口為localhost 或者直接注釋掉
listen-on port 53 { localhost; };
//allow-query { localhost; }; -- 修改為any允許任何主機(jī)使用DNS或者直接注釋掉
allow-query { any; };
allow-transfer { 10.0.0.222; };
//allow-transfer 指定允許的輔DNS抓取從同步DNS配置信息
};
//配置文件包含了 /etc/named.rfc1912.zones 使用該文件來(lái)配置DNS zone信息
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
輔
options {
//listen-on port 53 { 127.0.0.1; }; --修改監(jiān)聽端口為localhost 或者直接注釋掉
listen-on port 53 { localhost; };
//allow-query { localhost; }; -- 修改為any允許任何主機(jī)使用DNS或者直接注釋掉
allow-query { any; };
allow-transfer { none; };
//allow-transfer none拒絕其他主機(jī)同步DNS配置信息
};
//配置文件包含了 /etc/named.rfc1912.zones 使用該文件來(lái)配置DNS zone信息
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
2.2 修改 /etc/named.rfc1912.zones 文件
主
//正向解析zone
zone "test.org" IN {
type master;
file "named.test.org.zone";
};
//逆向解析zone
zone "0.0.10.in-addr.arpa" IN {
type master;
file "0.0.10.in-addr.arpa.zone";
};
輔
zone "test.org" IN {
type slave;
masters { 10.0.0.221; };
file "slaves/test.org.slave.zone";
};
2.3 編輯zone指定文件
named.test.org.zone(主正文件)
配置好zone文件權(quán)限和屬主(tips:復(fù)制模板靖诗,如下)
[root@centos1 named]# cp -a named.localhost named.test.org.zone
[root@centos1 named]# ll named.test.org.zone
-rw-r----- 1 root named 152 Jun 21 2007 named.test.org.zone
[root@centos1 named]#
正向解析文件 named.test.org.zone 內(nèi)容
[root@centos1 named]# vim named.test.org.zone
$TTL 1D
@ IN SOA master admin.test.org. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS master
master IN A 10.0.0.221
www IN A 10.0.0.223
@ IN MX 10 mail1
mail1 IN A 10.0.0.221
* IN A 10.0.0.223
@ IN A 10.0.0.223
[root@centos1 named]#
正向解析驗(yàn)證
[root@centos6 ~]# curl test.org
www.test.org
[root@centos6 ~]# dig www.test.org
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.8 <<>> www.test.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22331
...略
逆向解析文件 0.0.10.in-addr.arpa.zone 內(nèi)容
[root@centos1 named]# cat 0.0.10.in-addr.arpa.zone
$TTL 1D
@ IN SOA ns1 admin.test.org. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns1
ns1 A 10.0.0.221
223 PTR www.test.org.
221 PTR mail.test.org.
[root@centos1 named]#
逆向解析驗(yàn)證
[root@centos6 ~]# dig -x 10.0.0.223
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.8 <<>> -x 10.0.0.223
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37878
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
...略
slaves/test.org.slave.zone(輔)
Note:輔DNS服務(wù)器該文件不用創(chuàng)建郭怪,在上一步配置完畢rndc reload重新加載配置后會(huì)自動(dòng)生成。
輔助DNS服務(wù)器驗(yàn)證:
[root@centos6 ~]# dig www.test.org @10.0.0.222
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.8 <<>> www.test.org @10.0.0.222
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41136
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
2.4 補(bǔ)充配置文件 allow-transfer 參數(shù)作用效果
未應(yīng)用前
[root@centos4 ~]# dig -t axfr test.org @10.0.0.221
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.8 <<>> -t axfr test.org @10.0.0.221
;; global options: +cmd
test.org. 86400 IN SOA master.test.org. admin.test.org. 0 86400 3600 604800 10800
test.org. 86400 IN A 10.0.0.223
test.org. 86400 IN MX 10 mail1.test.org.
test.org. 86400 IN NS master.test.org.
*.test.org. 86400 IN A 10.0.0.223
mail1.test.org. 86400 IN A 10.0.0.221
master.test.org. 86400 IN A 10.0.0.221
www.test.org. 86400 IN A 10.0.0.223
test.org. 86400 IN SOA master.test.org. admin.test.org. 0 86400 3600 604800 10800
;; Query time: 0 msec
;; SERVER: 10.0.0.221#53(10.0.0.221)
;; WHEN: Wed Feb 02 10:11:51 CST 2022
;; XFR size: 9 records (messages 1, bytes 244)
應(yīng)用后
[root@centos4 ~]# dig -t axfr test.org @10.0.0.221
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.8 <<>> -t axfr test.org @10.0.0.221
;; global options: +cmd
; Transfer failed.
[root@centos4 ~]#
二刊橘、搭建并實(shí)現(xiàn)智能DNS鄙才。
備注:為避免其他因素影響,配置前先關(guān)閉防火墻促绵,selinux攒庵。建議配置好時(shí)間同步嘴纺。
1、通過(guò)添加網(wǎng)卡或臨時(shí)命令來(lái)模擬第二個(gè)網(wǎng)絡(luò)段
例如原IP:10.0.0.226
臨時(shí)添加:ip a a 192.0.0.226/24 dev eth0
2浓冒、DNS服務(wù)器安裝bind bind-utils軟件(yum 安裝栽渴,具體參考之前主從DNS搭建過(guò)程,此處不再描述)
3稳懒、在 /etc/named.conf 配置文件添加自定義的ACL(注意:先定義后使用闲擦,acl項(xiàng)一般在option前面定義)
acl bjnet {
10.0.0.0/24;
};
//模擬地區(qū)bj網(wǎng)絡(luò)段
acl sznet {
192.0.0.0/24;
};
//模擬地區(qū)sz網(wǎng)絡(luò)段
4、view視圖定義(作用:將自定義ACL和ZONE數(shù)據(jù)庫(kù)實(shí)現(xiàn)對(duì)應(yīng)關(guān)系场梆,從而實(shí)現(xiàn)智能DNS)
Note1:一個(gè)bind服務(wù)器可以定義多個(gè)view墅冷,每個(gè)view中可定義一個(gè)或多個(gè)zone
Note2:多個(gè)view可能需要對(duì)同一zone區(qū)域進(jìn)行解析,但是需使用不同的zone解析文件或油,且所有zone只能定義在view里面
- 在 /etc/named.conf 定義view視圖寞忿,并去掉根域的zone定義,將其挪到view定義的zone文件里面
view bjnetview {
match-clients { bjnet; };
include "/etc/named.bjnet.zones";
};
view sznetview {
match-clients { sznet; };
include "/etc/named.sznet.zones";
};
/*
zone "." IN {
type hint;
file "named.ca";
};
*/
5顶岸、zone文件配置內(nèi)容(注意文件權(quán)限)
- 文件 /etc/named.bjnet.zones
復(fù)制模板過(guò)來(lái)修改罐脊,添加如下內(nèi)容:
zone "." IN {
type hint;
file "named.ca";
};
zone "test.org" IN {
type master;
file "named.test.org.bjnet";
};
zone "0.0.10.in-addr.arpa" IN {
type master;
file "0.0.10.in-addr.arpa.bjnet";
};
- 文件 /etc/named.sznet.zones
復(fù)制模板過(guò)來(lái)修改,添加如下內(nèi)容:
zone "." IN {
type hint;
file "named.ca";
};
zone "test.org" IN {
type master;
file "named.test.org.sznet";
};
zone "0.0.192.in-addr.arpa" IN {
type master;
file "0.0.192.in-addr.arpa.sznet";
};
6蜕琴、創(chuàng)建zone文件里面定義的數(shù)據(jù)庫(kù)解析文件
- 文件 /var/named/named.test.org.bjnet bj區(qū)域正向解析文件
$TTL 1D
@ IN SOA master admin.test.org. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS master
master IN A 10.0.0.221
www CNAME websrv
websrv IN A 10.0.0.223
@ IN MX 10 mail1
mail1 IN A 10.0.0.221
* IN A 10.0.0.223
@ IN A 10.0.0.223
- 文件 /var/named/0.0.10.in-addr.arpa.bjnet bj區(qū)域逆向解析文件
$TTL 1D
@ IN SOA ns1 admin.test.org. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns1
ns1 A 10.0.0.221
223 PTR www.test.org.
221 PTR mail.test.org.
- 文件 /var/named/named.test.org.sznet sz區(qū)域正向解析文件
$TTL 1D
@ IN SOA master admin.test.org. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS master
master IN A 192.0.0.221
www CNAME websrv
websev IN A 192.0.0.223
@ IN MX 10 mail1
mail1 IN A 192.0.0.221
* IN A 192.0.0.223
@ IN A 192.0.0.223
- 文件 /var/named/0.0.192.in-addr.arpa.sznet sz區(qū)域逆向解析文件
$TTL 1D
@ IN SOA ns1 admin.test.org. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns1
ns1 A 192.0.0.221
223 PTR www.test.org.
221 PTR mail.test.org.
7萍桌、客戶端驗(yàn)證:
bj區(qū)域模擬
[root@centos6 ~]# dig www.test.org @10.0.0.221
或者修改DNS只保留10.0.0.221后ping域名
PING websrv.test.org (10.0.0.223) 56(84) bytes of data.
64 bytes from www.test.org (10.0.0.223): icmp_seq=1 ttl=64 time=0.215 ms
64 bytes from www.test.org (10.0.0.223): icmp_seq=2 ttl=64 time=1.48 ms
64 bytes from www.test.org (10.0.0.223): icmp_seq=3 ttl=64 time=1.98 ms
64 bytes from www.test.org (10.0.0.223): icmp_seq=4 ttl=64 time=3.93 ms
--- websrv.test.org ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3010ms
rtt min/avg/max/mdev = 0.215/1.903/3.931/1.336 ms
[root@centos6 ~]#
sz區(qū)域模擬
[root@centos6 ~]# dig www.test.org @192.0.0.221
或者修改DNS只保留192.0.0.221后ping域名
[root@centos6 ~]# ping www.test.org -c4
PING websrv.test.org (192.0.0.223) 56(84) bytes of data.
64 bytes from www.test.org (192.0.0.223): icmp_seq=1 ttl=64 time=0.667 ms
64 bytes from www.test.org (192.0.0.223): icmp_seq=2 ttl=64 time=1.50 ms
64 bytes from www.test.org (192.0.0.223): icmp_seq=3 ttl=64 time=1.63 ms
64 bytes from www.test.org (192.0.0.223): icmp_seq=4 ttl=64 time=1.65 ms
--- websrv.test.org ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3023ms
rtt min/avg/max/mdev = 0.667/1.365/1.655/0.408 ms
[root@centos6 ~]#
三、使用iptable實(shí)現(xiàn): 放行ssh,telnet, ftp, web服務(wù)80端口凌简,其他端口服務(wù)全部拒絕
添加iptables配置:
[root@cent70 ~]# iptables -R INPUT 1 -p tcp -m multiport --dports 21,22,23,80 -j ACCEPT
[root@cent70 ~]# iptables -A INPUT -j REJECT
驗(yàn)證:
[root@cent71 ~]# nc -zvn 10.0.0.160 22
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 10.0.0.160:22.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
[root@cent71 ~]# nc -zvn 10.0.0.160 21
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 10.0.0.160:21.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
[root@cent71 ~]# nc -zvn 10.0.0.160 23
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 10.0.0.160:23.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
[root@cent71 ~]# nc -zvn 10.0.0.160 53
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connection refused.
[root@cent71 ~]# nc -zvn 10.0.0.160 80
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 10.0.0.160:80.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
[root@bupt71 ~]#
四上炎、NAT原理總結(jié)
NAT:網(wǎng)絡(luò)地址轉(zhuǎn)換,通過(guò)結(jié)合PAT來(lái)實(shí)現(xiàn)內(nèi)網(wǎng)跟外網(wǎng)的訪問雏搂。主要分為SNAT和DNAT藕施。
SNAT:源NAT,通常指由內(nèi)網(wǎng)發(fā)起的網(wǎng)絡(luò)訪問請(qǐng)求凸郑,在訪問外部網(wǎng)絡(luò)時(shí)需要將內(nèi)網(wǎng)的私網(wǎng)地址轉(zhuǎn)換為公網(wǎng)地址的過(guò)程裳食。
DNAT:目NAT,通常指外網(wǎng)發(fā)起的訪問請(qǐng)求或者資源請(qǐng)求回應(yīng)芙沥,數(shù)據(jù)在通過(guò)防火墻訪問內(nèi)網(wǎng)時(shí)诲祸,需要將數(shù)據(jù)包里面的目標(biāo)地址由公網(wǎng)地址轉(zhuǎn)換為私網(wǎng)地址的過(guò)程。
五而昨、iptables實(shí)現(xiàn)SNAT和DNAT救氯,并對(duì)規(guī)則持久保存
SNAT
基本格式:
iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j SNAT --to-source ExtIP
范例:
1、將內(nèi)網(wǎng)172.16.0.0 SNAT 為 10.0.0.18地址
iptables -t nat -A POSTROUTING -s 172.16.0.0/24 ! -d 172.16.0.0/24 -j SNAT --to-source 10.0.0.18
2歌憨、將內(nèi)網(wǎng)172.16.0.0 SNAT 為 10.0.0.18-20地址范圍
iptables -t nat -A POSTROUTING -s 172.16.0.0/24 ! -d 172.16.0.0/24 -j SNAT --to-source 10.0.0.18-c10.0.0.20
3着憨、MASQUERADE :基于nat表的target,適用于動(dòng)態(tài)的公網(wǎng)IP务嫡,如:撥號(hào)網(wǎng)絡(luò)
iptables -t nat -A POSTROUTING -s 172.16.0.0/24 ! -d 172.16.0.0/24 -j MASQUERADE
DNAT
基本格式:
iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp --dport PORT -j DNAT -- to-destination InterSeverIP[:PORT]
范例:
1甲抖、將訪問10.0.0.18 80端口服務(wù)轉(zhuǎn)到 1721.6.0.7 80端口
iptables -t nat -A PREROUTING -d 10.0.0.18 ! -s 172.16.0.0/24 -p tcp --dport 80 -j DNAT --to-destination 172.16.0.7:80
2漆改、REDIRECT本地轉(zhuǎn)發(fā),將訪問172.16.0.7本地的8080端口轉(zhuǎn)為 80端口
iptables -t nat -A PREROUTING -d 172.16.0.7 -p tcp --dport 8080 -j REDIRECT --
to-ports 80
保存iptables策略
方法1:centos7,8 上可通過(guò)yum安裝 iptables-service准谚,安裝后如下保存和服務(wù)啟動(dòng)命令即可:
iptables-save > /etc/sysconfig/iptables
systemctl enable --now iptables.service
方法2:/etc/rc.d/rc.local文件中添加腳本路徑
1挫剑、通過(guò)iptables-save > /path/filename 保存iptables策略
2、在/etc/rc.d/rc.local文件中添加 iptables-restore < /path/filename
通過(guò)以上配置即可實(shí)現(xiàn)開機(jī)自動(dòng)加載iptables的規(guī)則
注意:rc.local 文件要具備 +x 權(quán)限