M-63.第九周作業(yè)

1、簡(jiǎn)述DNS服務(wù)器原理,并搭建主-輔服務(wù)器。

一、DNS是什么

DNS(Domain Name Service的縮寫)的作用就是根據(jù)域名查出IP地址。IP地址是由32位二進(jìn)制數(shù)字組成,人們很難記住這些IP,相反,大家愿意使用比較容易記憶的主機(jī)名字。而電腦在處理IP數(shù)據(jù)報(bào)文時(shí),是使用IP地址的,因?yàn)樗枪潭ㄩL(zhǎng)度。

DNS查詢的類型對(duì)于客戶端來說是遞歸查詢,對(duì)于DNS服務(wù)器來說,絕大多數(shù)是迭代查詢的。DNS名稱解析中,從名稱到IP的查詢叫做正向解析,而從IP到名稱的查詢叫做反向解析。如果DNS服務(wù)器至少解析了一個(gè)或一個(gè)以上的域叫做DNS主服務(wù)器或者DNS輔助服務(wù)器,如果不負(fù)責(zé)任何解析叫做DNS緩存服務(wù)器。

現(xiàn)在互聯(lián)網(wǎng)規(guī)模很大,DNS被設(shè)計(jì)成一個(gè)分布式的數(shù)據(jù)庫系統(tǒng),他分布的功能就是把一個(gè)大的數(shù)據(jù)庫切割成很多小的數(shù)據(jù)庫,來分別提供一部分?jǐn)?shù)據(jù)的處理。全球一共分布了13臺(tái)DNS根服務(wù)器,名字為A至M。


二、DNS的域名解析過程


用戶使用瀏覽器輸入網(wǎng)址時(shí)域名解析過程:

客戶訪問時(shí),先查自己的hosts文件,有則返回

客戶hosts中沒有就去查自己的緩存,有則返回

客戶緩存沒有就去找dns服務(wù)器

dns服務(wù)器先找根服務(wù)器獲得頂級(jí)域服務(wù)器地址

dns服務(wù)器在找頂級(jí)域服務(wù)器去獲得二級(jí)域服務(wù)器地址

dns服務(wù)器從二級(jí)域服務(wù)器獲得最終的IP地址

客戶端從dns服務(wù)器中得到IP地址

DNS區(qū)域數(shù)據(jù)庫文件

資源記錄(Resource Record)的類型有以下幾個(gè):

SOA:起始授權(quán)記錄,只能有一個(gè),必須放在第一條

NS:域名服務(wù)記錄,其中一個(gè)為主,可以有多個(gè)

A:IPv4地址記錄

AAAA:IPv6地址記錄

CNAME:別名記錄

PTR:反向解析記錄

MX:郵件交換器

相關(guān)測(cè)試工具及命令

dig命令

用于測(cè)試DNS系統(tǒng),其不會(huì)查詢hosts文件,使用格式:

dig [-t RR_TYPE] name [@SERVER] [query options]

常用的查詢選項(xiàng)包括:

+[no]trace:跟蹤解析過程;

+[no]recurse:進(jìn)行遞歸解析;

其常用用法包括:

反向解析測(cè)試:dig -x IP

測(cè)試區(qū)域傳送:dig -t [axfr|ixfr] DOMAIN [@server]

host命令

其用法類似于dig命令,使用格式為:

host [-t RR_TYPE] name SERVER_IP

nslookup命令

nslookup命令有兩種使用模式,一種是命令模式,另一個(gè)交互模式。

其命令模式的使用格式為:nslookup [-options] [name] [server]

而交互模式的使用格式為:

nslookup>

server IP:以指定的IP為DNS服務(wù)器進(jìn)行查詢;

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有四個(gè)內(nèi)置的acl

none:沒有一個(gè)主機(jī);

any:任意主機(jī);

local:本機(jī);

localnet:本機(jī)所在的IP所屬的網(wǎng)絡(luò);

訪問控制指令:

allow-query {}; 允許查詢的主機(jī);白名單;

allow-transfer {}; 允許向哪些主機(jī)做區(qū)域傳送;默認(rèn)為向所有主機(jī);

allow-recursion {}; 允許哪些主機(jī)向當(dāng)前DNS服務(wù)器發(fā)起遞歸查詢請(qǐng)求;

allow-update {}; DDNS,允許動(dòng)態(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 #啟動(dòng)服務(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

配置解析一個(gè)正向區(qū)域

[root@localhost ~]# vim /etc/named.rfc1912.zones

zone "test.com" IN {

? ? ? ? type master;? #定義主類型

? ? ? ? file "test.com.zone";? #這是相對(duì)路徑,在/var/named下

};

建立區(qū)域數(shù)據(jù)文件

[root@localhost ~]# vim /var/named/test.com.zone

$TTL 3600

$ORIGIN test.com.? #補(bǔ)一個(gè)后綴

@ IN SOA ns1.test.com. dnsadmin.test.com. (

? ? ? ? 2018053101

? ? ? ? 1H

? ? ? ? 10M

? ? ? ? 3D

? ? ? ? 1D )

? ? ? ? IN NS ns1? #前面有補(bǔ)后綴可以簡(jiǎn)寫,否則寫全稱最后要有點(diǎn)號(hào)

? ? ? ? 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)限,檢測(cè)語法

[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

#檢測(cè)語法

服務(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ù)器正向解析測(cè)試

[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

配置解析一個(gè)反向區(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.? #反向解析此處不能簡(jiǎn)寫

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)限,檢測(cè)語法

[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ù)器反向解析測(cè)試

[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? #每次修改文件時(shí)手動(dòng)加1,從服務(wù)器才會(huì)更新

? ? ? ? 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

#檢測(cè)語法,檢測(cè)狀態(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)同步過來

測(cè)試用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

進(jìn)一步對(duì)主輔服務(wù)器進(jìn)行測(cè)試,來到10主服務(wù)器

[root@localhost ~]# vim /var/named/test.com.zone

$TTL 3600

$ORIGIN test.com.

@ IN SOA ns1.test.com. dnsadmin.test.com. (

? ? ? ? 2018053103? #序列號(hào)加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,此時(shí)看到自動(dòng)更新到新序列號(hào),文件也傳輸過來了

[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

#檢測(cè)語法,重載配置

來到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)同步過來

測(cè)試在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ù)器測(cè)試

[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

手動(dòng)測(cè)試區(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ū)域傳送對(duì)服務(wù)器有巨大的風(fēng)險(xiǎn),我們需要配置訪問控制,讓主服務(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? #序列號(hào)加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";

};?

#增加三級(jí)域,增加正向區(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

測(cè)試

[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時(shí),因自己不能解析默認(rèn)會(huì)去互聯(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會(huì)轉(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

#清空緩存

此時(shí)可以解析出正確的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

上面是對(duì)特定區(qū)域的區(qū)域轉(zhuǎn)發(fā)解析請(qǐng)求,也可以配置本地不能解析的全部轉(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)段主機(jī)可以執(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、搭建并實(shí)現(xiàn)智能DNS。

要實(shí)現(xiàn)DNS服務(wù)器的智能解析,需要先理解一個(gè)概念:view

假如有臺(tái)web主機(jī),www.test.com是域名,它有兩個(gè)IP,一個(gè)接內(nèi)網(wǎng)IP為192.168.10.10,一個(gè)接外網(wǎng)IP為1.1.1.1。來自互聯(lián)網(wǎng)的用戶會(huì)解析成1.1.1.1,而來自內(nèi)網(wǎng)的用戶不需要解析成外網(wǎng)IP在連進(jìn)來,只需要直接解析成內(nèi)網(wǎng)IP192.168.10.10就可以了。這種根據(jù)客戶端的不同來源將同一個(gè)主機(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";

};

建立兩個(gè)正向區(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

檢測(cè)語法并設(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進(jìn)行解析,解析成內(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進(jìn)行解析,解析成外網(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

此時(shí)一個(gè)智能DNS服務(wù)器就搭建完成了,比如在我國(guó)應(yīng)用比較多的場(chǎng)景是按照客戶端的線路是電信線路還是網(wǎng)通線路,服務(wù)器自動(dòng)解析成自己服務(wù)器上相對(duì)應(yīng)的電信IP或者網(wǎng)通IP,從而使客戶端和服務(wù)端連接在同一個(gè)運(yùn)營(yíng)商的線路上,獲得最好的網(wǎng)速。


3、使用iptable實(shí)現(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 簡(jiǎn)介

1.1 IP地址

為了區(qū)分IP使用場(chǎng)景,我們可將IP地址可以分為:公網(wǎng)IP地址和私網(wǎng)IP地址.

公有IP地址: 也叫全局地址,是指合法的IP地址,它是由NIC(網(wǎng)絡(luò)信息中心)或者ISP(網(wǎng)絡(luò)服務(wù)提供商)分配的地址,對(duì)外代表一個(gè)或多個(gè)內(nèi)部局部地址,是全球統(tǒng)一的可尋 址的地址。

私有IP地址: 也叫內(nèi)部地址,屬于非注冊(cè)地址,專門為組織機(jī)構(gòu)內(nèi)部使用。因特網(wǎng)分配編號(hào)委員會(huì)(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地址)組合而成,我們稱這樣的一個(gè)地址集合為地址池。在內(nèi)部網(wǎng)絡(luò)的數(shù)據(jù)包通過地址轉(zhuǎn)換到達(dá)外部網(wǎng)絡(luò)時(shí),將會(huì)在地址池中選擇某個(gè)IP地址作為數(shù)據(jù)包的源IP地址,這樣可以有效的利用用戶的外部地址,提高訪問外部網(wǎng)絡(luò)的能力。

1.2 NAT

NAT 英文全稱是“Network Address Translation”,中文意思是“網(wǎng)絡(luò)地址轉(zhuǎn)換”,它是一個(gè)IETF(Internet Engineering Task Force, Internet工程任務(wù)組)標(biāo)準(zhǔn),允許一個(gè)整體機(jī)構(gòu)以一個(gè)公用IP(Internet Protocol)地址出現(xiàn)在Internet上。顧名思義,它是一種把內(nèi)部私有網(wǎng)絡(luò)地址(IP地址)翻譯成合法網(wǎng)絡(luò)IP地址的技術(shù)。因此我們可以認(rèn)為,NAT在一定程度上,能夠有效的解決公網(wǎng)地址不足的問題。

NAT 功能通常被集成到路由器、防火墻、ISDN路由器或者單獨(dú)的NAT設(shè)備中。

1.2 分類

NAT有三種類型:

靜態(tài)NAT(Static NAT)

動(dòng)態(tài)地址NAT(Pooled NAT)

網(wǎng)絡(luò)地址端口轉(zhuǎn)換NAPT(Port-Level NAT)。

1.2.1靜態(tài)NAT

通過手動(dòng)設(shè)置,使 Internet 客戶進(jìn)行的通信能夠映射到某個(gè)特定的私有網(wǎng)絡(luò)地址和端口。如果想讓連接在 Internet 上的計(jì)算機(jī)能夠使用某個(gè)私有網(wǎng)絡(luò)上的服務(wù)器(如網(wǎng)站服務(wù)器)以及應(yīng)用程序(如游戲),那么靜態(tài)映射是必需的。靜態(tài)映射不會(huì)從 NAT 轉(zhuǎn)換表中刪除。

如果在 NAT 轉(zhuǎn)換表中存在某個(gè)映射,那么 NAT 只是單向地從 Internet 向私有網(wǎng)絡(luò)傳送數(shù)據(jù)。這樣,NAT 就為連接到私有網(wǎng)絡(luò)部分的計(jì)算機(jī)提供了某種程度的保護(hù)。但是,如果考慮到 Internet 的安全性,NAT 就要配合全功能的防火墻一起使用。

對(duì)于以上網(wǎng)絡(luò)拓?fù)鋱D,當(dāng)內(nèi)網(wǎng)主機(jī) 10.1.1.1如果要與外網(wǎng)的主機(jī)201.0.0.11通信時(shí),主機(jī)(IP:10.1.1.1)的數(shù)據(jù)包經(jīng)過路由器時(shí),路由器通過查找NAT table 將IP數(shù)據(jù)包的源IP地址(10.1.1.1)改成與之對(duì)應(yīng)的全局IP地址(201.0.0.1),而目標(biāo)IP地址201.0.0.11保持不變,這樣,數(shù)據(jù)包就能到達(dá)201.0.0.11。而當(dāng)主機(jī)HostB(IP:201.0.0.11) 響應(yīng)的數(shù)據(jù)包到達(dá)與內(nèi)網(wǎng)相連接的路由器時(shí),路由器同樣查找NAT table,將IP數(shù)據(jù)包的目的IP 地址改成10.1.1.1,這樣內(nèi)網(wǎng)主機(jī)就能接收到外網(wǎng)主機(jī)發(fā)過來的數(shù)據(jù)包。在靜態(tài)NAT方式中,內(nèi)部的IP地址與公有IP地址是一種一一對(duì)應(yīng)的映射關(guān)系,所以,采用這種方式的前提是,機(jī)構(gòu)能夠申請(qǐng)到足夠多的全局IP地址。

1.2.2 動(dòng)態(tài)NAT

動(dòng)態(tài)地址NAT只是轉(zhuǎn)換IP地址,它為每一個(gè)內(nèi)部的IP地址分配一個(gè)臨時(shí)的外部IP地址,主要應(yīng)用于撥號(hào),對(duì)于頻繁的遠(yuǎn)程聯(lián)接也可以采用動(dòng)態(tài)NAT。當(dāng)遠(yuǎn)程用戶聯(lián)接上之后,動(dòng)態(tài)地址NAT就會(huì)分配給他一個(gè)IP地址,用戶斷開時(shí),這個(gè)IP地址就會(huì)被釋放而留待以后使用。

動(dòng)態(tài)NAT方式適合于 當(dāng)機(jī)構(gòu)申請(qǐng)到的全局IP地址較少,而內(nèi)部網(wǎng)絡(luò)主機(jī)較多的情況。內(nèi)網(wǎng)主機(jī)IP與全局IP地址是多對(duì)一的關(guān)系。當(dāng)數(shù)據(jù)包進(jìn)出內(nèi)網(wǎng)時(shí),具有NAT功能的設(shè)備對(duì)IP數(shù)據(jù)包的處理與靜態(tài)NAT的一樣,只是NAT table表中的記錄是動(dòng)態(tài)的,若內(nèi)網(wǎng)主機(jī)在一定時(shí)間內(nèi)沒有和外部網(wǎng)絡(luò)通信,有關(guān)它的IP地址映射關(guān)系將會(huì)被刪除,并且會(huì)把該全局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ò)的一個(gè)IP地址的不同端口上。它可以將中小型的網(wǎng)絡(luò)隱藏在一個(gè)合法的IP地址后面。NAPT與 動(dòng)態(tài)地址NAT不同,它將內(nèi)部連接映射到外部網(wǎng)絡(luò)中的一個(gè)單獨(dú)的IP地址上,同時(shí)在該地址上加上一個(gè)由NAT設(shè)備選定的端口號(hào)。

NAPT是使用最普遍的一種轉(zhuǎn)換方式,它又包含兩種轉(zhuǎn)換方式:SNAT和DNAT。

(1)源NAT(Source NAT,SNAT):修改數(shù)據(jù)包的源地址。源NAT改變第一個(gè)數(shù)據(jù)包的來源地址,它永遠(yuǎn)會(huì)在數(shù)據(jù)包發(fā)送到網(wǎng)絡(luò)之前完成,數(shù)據(jù)包偽裝就是一具SNAT的例子。

(2)目的NAT(Destination NAT,DNAT):修改數(shù)據(jù)包的目的地址。Destination NAT剛好與SNAT相反,它是改變第一個(gè)數(shù)據(jù)包的目的地地址,如平衡負(fù)載、端口轉(zhuǎn)發(fā)和透明代理就是屬于DNAT。

在這里插入圖片描述

2 NAT原理

2.1 地址轉(zhuǎn)換

NAT的基本工作原理是,當(dāng)私有網(wǎng)主機(jī)和公共網(wǎng)主機(jī)通信的IP包經(jīng)過NAT網(wǎng)關(guān)時(shí),將IP包中的源IP或目的IP在私有IP和NAT的公共IP之間進(jìn)行轉(zhuǎn)換。

在這里插入圖片描述

2.2 連接跟蹤

在上述過程中,NAT Gateway在收到響應(yīng)包后,就需要判斷將數(shù)據(jù)包轉(zhuǎn)發(fā)給誰。此時(shí)如果子網(wǎng)內(nèi)僅有少量客戶機(jī),可以用靜態(tài)NAT手工指定;但如果內(nèi)網(wǎng)有多臺(tái)客戶機(jī),并且各自訪問不同網(wǎng)站,這時(shí)候就需要連接跟蹤(connection track)。

在這里插入圖片描述

在NAT Gateway收到客戶機(jī)發(fā)來的請(qǐng)求包后,做源地址轉(zhuǎn)換,并且將該連接記錄保存下來,當(dāng)NAT Gateway收到服務(wù)器來的響應(yīng)包后,查找Track Table,確定轉(zhuǎn)發(fā)目標(biāo),做目的地址轉(zhuǎn)換,轉(zhuǎn)發(fā)給客戶機(jī)。

2.3 端口轉(zhuǎn)換

以上述客戶機(jī)訪問服務(wù)器為例,當(dāng)僅有一臺(tái)客戶機(jī)訪問服務(wù)器時(shí),NAT Gateway只須更改數(shù)據(jù)包的源IP或目的IP即可正常通訊。但是如果Client A和Client B同時(shí)訪問Web Server,那么當(dāng)NAT Gateway收到響應(yīng)包的時(shí)候,就無法判斷將數(shù)據(jù)包轉(zhuǎn)發(fā)給哪臺(tái)客戶機(jī),如下圖所示。

在這里插入圖片描述

此時(shí),NAT Gateway會(huì)在Connection Track中加入端口信息加以區(qū)分。如果兩客戶機(jī)訪問同一服務(wù)器的源端口不同,那么在Track Table里加入端口信息即可區(qū)分,如果源端口正好相同,那么在實(shí)行SNAT和DNAT的同時(shí)對(duì)源端口也要做相應(yīng)的轉(zhuǎn)換,如下圖所示。

在這里插入圖片描述

3 應(yīng)用

NAT主要可以實(shí)現(xiàn)以下幾個(gè)功能:

數(shù)據(jù)包偽裝

平衡負(fù)載

端口轉(zhuǎn)發(fā)

透明代理

3.1 數(shù)據(jù)偽裝

可以將內(nèi)網(wǎng)數(shù)據(jù)包中的地址信息更改成統(tǒng)一的對(duì)外地址信息,不讓內(nèi)網(wǎng)主機(jī)直接暴露在因特網(wǎng)上,保證內(nèi)網(wǎng)主機(jī)的安全。同時(shí),該功能也常用來實(shí)現(xiàn)共享上網(wǎng)。例如,內(nèi)網(wǎng)主機(jī)訪問外網(wǎng)時(shí),為了隱藏內(nèi)網(wǎng)拓?fù)浣Y(jié)構(gòu),使用全局地址替換私有地址。

3.2 端口轉(zhuǎn)發(fā)

當(dāng)內(nèi)網(wǎng)主機(jī)對(duì)外提供服務(wù)時(shí),由于使用的是內(nèi)部私有IP地址,外網(wǎng)無法直接訪問。因此,需要在網(wǎng)關(guān)上進(jìn)行端口轉(zhuǎn)發(fā),將特定服務(wù)的數(shù)據(jù)包轉(zhuǎn)發(fā)給內(nèi)網(wǎng)主機(jī)。例如公司小王在自己的服務(wù)器上架設(shè)了一個(gè)Web網(wǎng)站,他的IP地址為192.168.0.5,使用默認(rèn)端口80,現(xiàn)在他想讓局域網(wǎng)外的用戶也能直接訪問他的Web站點(diǎn)。利用NAT即可很輕松的解決這個(gè)問題,服務(wù)器的IP地址為210.59.120.89,那么為小王分配一個(gè)端口,例如81,即所有訪問210.59.120.89:81的請(qǐng)求都自動(dòng)轉(zhuǎn)向192.168.0.5:80,而且這個(gè)過程對(duì)用戶來說是透明的。

3.3 負(fù)載平衡

目的地址轉(zhuǎn)換NAT可以重定向一些服務(wù)器的連接到其他隨機(jī)選定的服務(wù)器。例如1.2.3所講的目的NAT的例子。

3.4 失效終結(jié)

目的地址轉(zhuǎn)換NAT可以用來提供高可靠性的服務(wù)。如果一個(gè)系統(tǒng)有一臺(tái)通過路由器訪問的關(guān)鍵服務(wù)器,一旦路由器檢測(cè)到該服務(wù)器當(dāng)機(jī),它可以使用目的地址轉(zhuǎn)換NAT透明的把連接轉(zhuǎn)移到一個(gè)備份服務(wù)器上,提高系統(tǒng)的可靠性。

3.5 透明代理

例如自己架設(shè)的服務(wù)器空間不足,需要將某些鏈接指向存在另外一臺(tái)服務(wù)器的空間;或者某臺(tái)計(jì)算機(jī)上沒有安裝IIS服務(wù),但是卻想讓網(wǎng)友訪問該臺(tái)計(jì)算機(jī)上的內(nèi)容,這個(gè)時(shí)候利用IIS的Web站點(diǎn)重定向即可輕松的幫助我們搞定。

4 NAT的缺陷

NAT在最開始的時(shí)候是非常完美的,但隨著網(wǎng)絡(luò)的發(fā)展,各種新的應(yīng)用層出不窮,此時(shí)NAT也暴露出了缺點(diǎn)。NAT的缺陷主要表現(xiàn)在以下幾方面:

4.1 不能處理嵌入式IP地址或端口

NAT設(shè)備不能翻譯那些嵌入到應(yīng)用數(shù)據(jù)部分的IP地址或端口信息,它只能翻譯那種正常位于IP首部中的地址信息和位于TCP/UDP首部中的端口信息,如下圖,由于對(duì)方會(huì)使用接收到的數(shù)據(jù)包中嵌入的地址和端口進(jìn)行通信,這樣就可能產(chǎn)生連接故障,如果通信雙方都是使用的公網(wǎng)IP,這不會(huì)造成什么問題,但如果那個(gè)嵌入式地址和端口是內(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ù),對(duì)于這個(gè)問題,我們可以采用建立靜態(tài)映射的方法來解決。比如有一條靜態(tài)映射,是把218.70.201.185:80與192.168.0.88:80映射起的,當(dāng)公網(wǎng)用戶要訪問內(nèi)部WEB服務(wù)器時(shí),它就首先連接到218.70.201.185:80,然后NAT設(shè)備把請(qǐng)求傳給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端口進(jìn)行接收,不過NAT設(shè)備翻譯時(shí)卻不知道這一點(diǎn),它仍然建立一條針對(duì)A端口的映射,結(jié)果對(duì)方響應(yīng)的數(shù)據(jù)要傳給B端口時(shí),NAT設(shè)備卻找不到相關(guān)映射條目而會(huì)丟棄數(shù)據(jù)包。

4.4 一些P2P應(yīng)用在NAT后無法進(jìn)行

對(duì)于那些沒有中間服務(wù)器的純P2P應(yīng)用(如電視會(huì)議,娛樂等)來說,如果大家都位于NAT設(shè)備之后,雙方是無法建立連接的。因?yàn)闆]有中間服務(wù)器的中轉(zhuǎn),NAT設(shè)備后的P2P程序在NAT設(shè)備上是不會(huì)有映射條目的,也就是說對(duì)方是不能向你發(fā)起一個(gè)連接的?,F(xiàn)在已經(jīng)有一種叫做P2P NAT穿越的技術(shù)來解決這個(gè)問題。

5 結(jié)語

NAT技術(shù)無可否認(rèn)是在ipv4地址資源的短缺時(shí)候起到了緩解作用;在減少用戶申請(qǐng)ISP服務(wù)的花費(fèi)和提供比較完善的負(fù)載平衡功能等方面帶來了不少好處。但是在ipv4地址在以后幾年將會(huì)枯竭,NAT技術(shù)不能改變ip地址空間不足的本質(zhì)。然而在安全機(jī)制上也潛在著威脅,在配置和管理上也是一個(gè)挑戰(zhàn)。如果要從根本上解決ip地址資源的問題,ipv6才是最根本之路。在ipv4轉(zhuǎn)換到ipv6的過程中,NAT技術(shù)確實(shí)是一個(gè)不錯(cuò)的選擇,相對(duì)其他的方案優(yōu)勢(shì)也非常明顯。



5、iptables實(shí)現(xiàn)SNAT和DNAT,并對(duì)規(guī)則持久保存。

實(shí)現(xiàn)SNAT和DNAT都需要開啟內(nèi)核數(shù)據(jù)轉(zhuǎn)發(fā)功能

[root@localhost ~]# vim /etc/sysctl.conf

# 把下列選項(xiàng)改正1

net.ipv4.ip_forward=0

...

net.ipv4.ip_forward=1

2.1 SNAT

基于nat表的target,適用于固定的公網(wǎng)IP

SNAT選項(xiàng):

--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,適用于端口映射,即可重定向到本機(jī),也可以支持重定向至不同主機(jī)的不同端口,但不支持多目標(biāo),即不支持負(fù)載均衡功能

DNAT選項(xiàng):

--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選項(xiàng)

-n, --noflush:不清除原有規(guī)則

-t, --test:僅分析生成規(guī)則集,但不提交

2.4.2 CentOS 6:

service iptables? restart? ? ?

#會(huì)自動(dòng)從/etc/sysconfig/iptables 重新載入規(guī)則

2.5 開機(jī)自動(dòng)重載規(guī)則

2.5.1 用腳本保存各iptables命令;讓此腳本開機(jī)后自動(dòng)運(yùn)行

/etc/rc.d/rc.local文件中添加腳本路徑 /PATH/TO/SOME_SCRIPT_FILE

用規(guī)則文件保存各規(guī)則,開機(jī)時(shí)自動(dòng)載入此規(guī)則文件中的規(guī)則

在/etc/rc.d/rc.local文件添加

iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE

2.5.2 定義Unit File, CentOS 7,8 可以安裝 iptables-services 實(shí)現(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

#開機(jī)啟動(dòng)

[root@centos8 ~]# systemctl enable iptables.service

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容