DNS域名服务器理论详解

目录

前言:

一、BIND域名服务基础

1、DNS系统的作用

⑴、正向解析:

⑵、反向解析:

2、DNS系统类型

⑴、缓存域名服务器:

⑵、主域名服务器:

⑶、从域名服务器: 

⑷、转发域名服务器:

3、DNS的端口号和协议

4、DNS系统的分布式数据结构

⑴、域名介绍

 ⑵、DNS分布式数据结构介绍

⑶、区域与服务器

二、域名解析的基本过程

1、正向解析查询基本过程:

2、两种查询

⑴、递归查询:

⑵、迭代查询:

3、缓存清理

三、DNS服务程序安装和配置文件

1、BIND的安装和控制

⑴、安装bind软件

⑵、bind服务控制

2、bind服务配置文件介绍

⑴、主配置文件

⑵、区域数据配置文件

四、正向解析应用

1、前期准备

2、修改主配置文件全局配置部分

3、修改区域配置文件,添加正向区域配置

4、现在来配置正向区域数据文件

5、启动配置服务,添加DNS服务器地址

6、结果验证

 五、反向解析配置

1、修改区域配置文件,添加反向区域配置

2、做模板数据文件备份,配置数据文件

3、结果验证

总结:


前言:

       为了能让人类更好的去上网,我们通常是使用比较简单的域名的形式去访问服务器的,域名形

式更加直观,更容易被人类记住。那么它是怎样运作的呢。那么下面就让我们详细了解一下。

一、BIND域名服务基础

1、DNS系统的作用

       DNS系统在网络中的作用就是维护着一个地址数据库,其中记录了各种主机域名与IP地址的对

应关系,以便为客户程序提供正或反向的地址查询服务,即正向解析与反向解析。

⑴、正向解析:

        根据域名查IP地址,即将指定的域名解析为相对应的IP地址。域名的正向解析是DNS服务器

最基本的功能,也是最常用的功能

⑵、反向解析:

        根据IP地址查域名,即将指定的I地址解析为相对应的域名。域名的反向解析不是很常用,只

在一些特殊场合会用到,如可用于反垃圾邮件的验证。

2、DNS系统类型

       根据所管理的区域地址数据的来源不同,DNS统可以分为不同的类型。在同台DNS服务器

中,相对于不同的区域来说,也有不同的身份。常见的几种类型如下:

⑴、缓存域名服务器:

        也称为DNS高速缓存服务器。它只提供域名解析结果的缓功能,目的在于提高查询速度和效

率,但是没有自己控制的区域地址数据,通过向其他域名服务器查询获得域名->IP地址记录,将查

询结果缓存到本地。构缓存域名服务器时,必须设置根域或指定其他DNS服务器作为解析来源。

⑵、主域名服务器:

       维护某一个特定DNS区域的地数据库,对其中的解析记录具有自主控制权,是指定区域中唯一

存在的权威务器、官方服务器。构建主域名服务器时,需要自行建立所负责区域的地址数据文件。

⑶、从域名服务器: 

       与主域名服务器提供完全相的DNS解析服务,通常用于DNS服务器的热备份。对客户机来

说,无论使主域名服务器还是从域名服务器,查询的结果都是一样的。关键区别在于,从域名服务

器提供的解析结并不是由自己决定的,而是来自于主域名服务。构建从域名服务器时,要指定主域

名服务器的位置,以便服务器能自动同步区域的地址数据库。以上所述主、从服务器的角色只是针

对某一个特定的DNS区域来说的。

⑷、转发域名服务器:

        负责所有非本地域名的本地查询。转发域名服务器接到查询请求后,在其缓存中查找,如果

找不到就将请求依次转发到指定的域名服务器,直到查找到结果为止,否则返回无法映射的结果。

3、DNS的端口号和协议

       DNS的默认端口号为53, DNS端口使用的协议为TCP和UDP。

       ⑴、TCP:是用来做区域传送,多用于主从同步。在一个区中主DNS服务器从自己本机的数据文件中读取该区的DNS数据信息,而辅助DNS服务器则从区的主DNS服务器中读取该区的DNS数据信息。

       ⑵、UDP:是用来做DNS解析的

4、DNS系统的分布式数据结构

⑴、域名介绍

       域名结构:http://www.sina.com.cn./

             即:http://主机名.子域.二级域.顶级域根域/

       域名通常由一个完全合格域名(FQDN)标识。FQDN全称Fully Qualified Domain Name 即全

域名,即同时带有主机名和域名的名称。他能准确表示出其相对于DNS根域的位置,也就是节点到

DNS。FQDN = Hostname + DomainName。FQDN有严格的命名限制,每一级的域名长度限制是

63个字符,域名总长度则不能超过256个字符。只允许使用字符a-z字母、减号(-)和点号(.),

点号(.)只允许在域名标志之间(例如"google.com")或者FQDN的结尾使用,域名不区分大

小,由最顶层到下层,可以分成:根域、顶级域、二级域和子域。并且全域名最前面的一定是主

机,最后一个点表示根域,通常是省略不写的,但实际上是www.abc.com=www.abc. com.。

        树根的完整表述方式,从节点到树根采用反向书写,并且并将每个节点用"."分隔。对于

DNS域google来说,其完全正式域名(FODN)为google.com.。

        其中google为com域的子域,其表示方法为google.com;而www为google域中的子域,可以

使用ww.google.com.表示。

 ⑵、DNS分布式数据结构介绍

 

 ①、根域:

位于域名空间最顶层,一般用一个”."表示根域

②、一级域:

        又叫顶级域,一般代表一种类型的组织机构或国家地区,比如com,cn,net,uk等。如.edu

教育机构;.cn中国国家域;.hk香港;.net网络运营商;.com商业等。

③、二级域:

        用来标明顶级域内的一个特定的组织,国家顶级域下面的二级域名由国家网络部门统一管

理,比如baidu,taobao等。如.com.cn 中国商业机构;.net.cn中国的网络供应商;.edu.cn中国教

育机构;.gov.cn政府等。

④、子域:.

        又叫三级域,二级域下所创建的各级域统称为子域,各个组织或用户可以自由申请注册自己

的域名。如sina.com.cn 中国新浪等。

⑤、主机位:

        主机位于域名空间最下层,就是一台具体的计算机,如 www;mall;news 等。

⑶、区域与服务器

①、区域:每一台DNS服务器实际只负责管理一个有限范围(一个或几个域)内的主机域名和IP地

址的对应关系,这些特定的DNS域或IP地址段称为“zone”(区域)。

②、正、反向区域:根据地址解析的方向不同,DNS区域相应地分正向区域(包含域名到IP地址的

解析记录)和反向区域(包含P地址到域名的解析记录)。

二、域名解析的基本过程

 

1、正向解析查询基本过程:

①、先查本机的缓存记录。

②、查询hosts文件。

③、查询dns域名服务器,交给dns域名服务器处理。

        注:以上过程称为递归查询:我要一个答案就直接会给我结果。

④、这个dns服务器可能是本地域名服务器,也有个缓存,如果有直接返回结果,如果没有则进行

下一步。

⑤、求助根域服务器,根域服务器返回可能会知道结果的顶级域服务器让他去找顶级域服务器。

⑥、求助顶级域服务器,顶级域服务器返回可能会知道结果的二级域服务器然他去找二级域服务

器。

⑦、求助二级域服务器,二级域服务器查询发现是我的主机,把查询到的ip地址返回给本地域名服

务。

⑧、本地域名服务器将结果记录到缓存,然后把域名和ip的对应关系返回给客户端。

2、两种查询

⑴、递归查询:

        在该模式下DNS服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机。如果

DNS服务器本地没有存储查询DNS信息,那么该服务器会询问其他服务器,并将返回得查询结果

提交给客户机。

⑵、迭代查询:

        当客户机发送查询请求时,DNS服务器并不直接回复查询结果,而是告诉客户机另一台DNS

服务器地址;客户机再向这台DNS服务器提交请求,依次循环直到返回查询结果为止。客户机得请

求需要自己挨个查询才能得到结果,服务器没有结果时只会给你提供其他服务器得地址,不会帮你

去请求查询,与递归截然相反。

3、缓存清理

windows系统查询dns缓存命令: ipconfig /displaydns

windows系统清理dns缓存命令: ipconfig /flushdns

linux清dns缓存需要安装nscd软件,启动、执行nscd -i hosts

三、DNS服务程序安装和配置文件

1、BIND的安装和控制

⑴、安装bind软件

       BIND不是唯一能够提供域名服务的DNS服务序,但它却是应用最为广泛的,

BND可以运行在大多数 Linux/UNIX主机中。其官方站点为 https://www.isc.org/

[root@kgc ~]# mount /dev/sr0 /mnt/     #CentOS系统光盘自带BIND软件包,挂载。
mount: /dev/sr0 写保护,将以只读方式挂载
[root@kgc ~]# cd /mnt/Packages/
[root@kgc Packages]# ls | grep bind   
bind-9.9.4-50.el7.x86_64.rpm
bind-chroot-9.9.4-50.el7.x86_64.rpm
bind-dyndb-ldap-11.1-3.el7.x86_64.rpm
bind-libs-9.9.4-50.el7.x86_64.rpm
bind-libs-lite-9.9.4-50.el7.x86_64.rpm
bind-license-9.9.4-50.el7.noarch.rpm
bind-pkcs11-9.9.4-50.el7.x86_64.rpm
bind-pkcs11-libs-9.9.4-50.el7.x86_64.rpm
bind-pkcs11-utils-9.9.4-50.el7.x86_64.rpm
bind-utils-9.9.4-50.el7.x86_64.rpm
[root@kgc Packages]#

各软件包作用如下:

        ● Bind:提供了域名服务的主要程序及相关文件。

        ● bind- utils:提供了对DNS服务器的测试工具程序,如 nslookup等。

        ● bind-libs:提供了bind、bind- utils需要使用的库函数。

        ● bind- chroot:为BIND服务提供一个伪装的根目录(将/var/ named/ chroot/文件夹作为BIND

的根目录),以提高安全性。

        系统默认已安装bind- utils和bind-libs,所以只需要装bind和bind- chroot即可。

[root@kgc ~]# yum install bind -y   #用yum工具进行安装
[root@kgc ~]# rpm -q bind
bind-9.9.4-50.el7.x86_64
[root@kgc ~]#

⑵、bind服务控制

       BND软件包安装完毕以后,会自动增加一个名 named的系统服务,通过脚本文件/etc/init.d/

named或 service工具或systemctl工具都可以控制DNS域名服务的运行。

[root@kgc ~]# service named status #查询named服务运行状态

2、bind服务配置文件介绍

       BIND软件构建域名服务,涉及的配置文件是主配置文件和区域数据文件。

主配置文件:用于设置 named服务的全局选项、注册区域及访问控制等各种运行参数。

区域数据配置文件用于存某个DNS区域的地址解析记录(正向或反向记录)。

⑴、主配置文件

       主配置文件 named..conf通常位于/etc/目录下,在 named.conf文件中,主要包括①全局配置

区域配置两个部分,每一条配置录的行尾以分号“;”表示结束,以“#”号或“∥”开始的部分表示注

释文字(大段注释可以使用“/*…*/”的格式)。

①、全局配置部分

       Options{ };的大括号中就是全局配置参数。

……
options {        #全局配置
        listen-on port 53 { 127.0.0.1; }; #监听端口和地址;53号端口,使用本地IP地址
        #listen-on-v6 port 53 { ::1; };   #IP v6相关,不使用可注释或删除
        directory     "/var/named";   #区域数据文件默认存放位置
        dump-file    "/var/named/data/cache_dump.db"; #域名缓存数据库文件位置
        statistics-file  "/var/named/data/named_stats.txt"; #状态统计文件位置
        memstatistics-file  "/var/named/data/named_mem_stats.txt"; #内存统计文件位置
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { localhost; };  #允许使用本DNS服务的所有网段可设为“any“。单独多个网段可以用“;”隔开

②、区域配置部分

       使用“zone ……{ };”的配置格式,一台DNS服务器可以为多个区域提供解析,因此在

named.conf文件中也可以有多个zone配置段。区域类型按照解析方向可分为正向区域、反向区

域。

  ##主配置文件中一般只有如下正向根区域
……   
zone "." IN {      #“IN“是正向解析 “.”根区域
        type hint;   #类型为根区域
        file "named.ca";  #file调用 named.ca中的区域数据文件,记录了全球十三台根域服务器的域名和IP地址等信息
};
……

     ##主配置文件中一般只有如下正向根区域,其他所有区域配置映射向/etc/named.rfc1912.zones

文件。

……

include "/etc/named.rfc1912.zones";   #包含区域配置文件里得所有配置(正反向解析)

……

##在/etc/named.rfc1912.zones其他所有区域配置文件中,才是其他正向区域、反向区域。

[root@kang named]# vim /etc/named.rfc1912.zones  #进入区域配置文件:
……
zone "localhost" IN {   #正向"localhost"区域
        type master;   #区域类型为主区域
        file "named.localhost";  #区域数据文件为named.localhost
        allow-update { none; };  #
};
……
zone "20.168.192.in-addr.arpa" IN {   #反向192.168.20.0/24区域
        type master;
        file "ben.cm.zone.local";   #反向解析区域数据文件,可以跟正向数据文件相同
        allow-update { none; };   
};
……

        ◆ 每个zone区域都是可选的(包括根域、回环域、反向域),具体根据实际需要而定,zone

配置部分的“N”关键字也可以省略。

        ◆ 反向区域的名称由倒序的网络地址和“m- addr.arpa'”组合而成。

        ◆ file配置项用于指定实际的区域数据文件,文件名称由管理员自行设置。

        ◆ 区域配置中的部分参数(如 allow-- transfer))也可以放在全局配置里。

③、注意文件配置语法错误

       可以执行 named-checkconf命令对 named.conf文件进行语法检查。如果文件中没有语法错

误,该命将不给出任何提示;反之,则会给出相应的提示信息,只要根据出错提示修正文件的错误

即可。

       带“z”选项的 named-checkconf命令还可以尝试加载主配置文件中应的区域数据库文件,并检

查该文件是否存在问题。

⑵、区域数据配置文件

       区域数据配置文件通常位于/var/named/目录下,每个区域数据文件对应一个DNS解析区域,

文件名及内容由该域自行设置。根域“,”的区域数据文件比较特殊。 Internet中所有的DNS服务器

都使用同一份根区域数据文件,其中列出了所有根服务器的域名和IP地址。

        在区域数据文件中,主要包括TTL配置项、SOA( Start Of Authority,授权信息开始)记录、

地址解析记录。文件中的注释信息以分号“;”开始。

       我们一般对区域配置文件做备份,使用备份文件作为区域数据配置文件路径。

[root@kang named]# cp -p named.localhost benet.com.zone #复制模板注意文件属性,权限和属主一起复制。

[root@kang named]# vim /var/named/benet.com.zone    #修改路径后的区域数据配置文件。

       ①、区域数据配置文件的TTL配置和SOA记录部分

$TTL 1D    ##有效解析记录的生存周期
@       IN SOA  @ admin.ben.com. (   ##“@”符号表示当前的DNS区域名
                                   0       ; serial  #更新序列号,可以是10位以内的整数
                                   1D      ; refresh #刷新时间,重新下载地址数据的间隔
                                   1H      ; retry #重试延时,下载失败后的重试间隔
                                   1W      ; expire #失效时间,超过该时间仍无法下载则放弃
                                   3H )    ; minimum #无效解析记录的生存周期

        ◆ 第一行的TTL配置用于设置默认生存周期,即缓存解析结果的有效时间。

        ◆ 以下SOA记录部分用于设置区域名称、管理邮箱,以及为从域名服务指定更新参数。时间

单位可用:M(分)、H(时)、W(周)、D(天),默认时间单位为秒。“@”符号示当前的DNS

区域名,相当于“kgc.cn.";" admin.kgc.cn.”,表示域管理员电子邮箱地址(由于“@符号已有他

含义因此将邮件地址中的“@”用“.”代替)。SOA记录中的更新序列号用来同步主、从服务器的区域

数据,当从服务器判断区域更新时,若发现主服务器中的序列号与本地区域数据中的序列号相同,

则不会进行下载。

       ②、区域数据配置文件的地址解析记录部分

       地址解析记录用来设置DNS区域内的域名、IP地址映射关系,包括正向解析记录和反向解析记

录。反向解析记录只能用在反向区域数据文件中。

(正向解析)
        NS      ben.com.       #记录当前区域的DNS服务器名称
        A       192.168.90.25   #记录主机IP地址
IN     MX 10     mail.ben.com   #MX为邮件交换记录,数字越大优先级越低
www     IN  A   192.168.90.25  #记录正向解析wwwbencom对应的IP
mail   IN  A    192.168.90.30   #邮件交换记录,数字越大优先级越低
ftp    IN CNAME www           #CNAME使用别名,在这里ftp是www的别名
*      IN A     192.168.90.35   #泛域名解析,“*”代表任意主机名
……
(反向解析)
           NS    ben.com.    #反向解析反向区域的网络地址最为前缀,域名作后缀
        A       192.168.90.25
25     IN  PTR   www.ben.com.
30   IN  PTR    mail.ben.com.
35    IN PTR     ftp.ben.com.
*      IN PTR     www.ben.com.     #RTP是反向指针,他用作反向解析 
……    

 以下四种常见的地址解析记录。

        ◆ NS域名服务器( Name Server):记录当区域的DNS服务器的主机地址。

        ◆ MX邮件交换( Mail Exchange):记录当区域的邮件服务器的主机地址,数字10表示(当

有多个MX记录时)选择邮件服务器的优先级,数字越大优先级越低。

        ◆ A地址( Address):记录正向解析条目。例如,“ www  IN  A 173.16.16.1”表示域名

www.kgc..cn对应的P地址是173.16.16.1。

        ◆ CNAME别名( Canonical Name)):记录某一个正向解析条目的其他名称。例如“ ftp IN

CNAME www'”表示域名ftp.kgc.cn是www.kgc.cn的别名。

        ◆ PRT记录:反向指针,用于反向解析,使用PTR记录时,第一列中只需要指明对应IP址的

“主机地址”部分即可如“1”“4”等,系统在查找地址记录时会自动将当前反向域的网络地址作为前缀。

        以上,NS、MX记录行首的“@”符号可以省略(默认继承SOA记录行首的@信息)但是必须保

留一个空格或Tab制表位。在反向区域数据文件中,不会用到A地址记录,而使用PTR指针(

Point))记录。在区域数据配置文件中,凡是不以点号“,”结尾的主机地址,系统在查找地址记录

时都会自动将当前的域名作为后缀。

四、正向解析应用

1、前期准备

       安装软件包;

配置好虚拟机网卡(这里的网卡做仅主机静态IP地址);

       Linux系统关闭防护墙、关闭安全增强性;

[root@kang ~]# systemctl stop firewalld  #关闭当前系统防火墙

[root@kang ~]# systemctl disable firewalld  #关闭开机自启动防火墙

Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.

Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

[root@kang ~]# setenforce 0 #关闭安全增强性,也可在/etc/sysconfig/selinux文件修改

setenforce: SELinux is disabled

[root@kang ~]#     ##这两个安全防护可能会影响最终结果

2、修改主配置文件全局配置部分

[root@kang ~]# vim /etc/named.conf   #进入主配置文件

……   ##将其中的如下一段修改,注意特殊字符、空格等都会影响格式,导致失败

options {

        listen-on port 53 { 192.168.90.25; };  #这里使用提供服务的本地IP地址

        #listen-on-v6 port 53 { ::1; };    

        directory       "/var/named";

        dump-file       "/var/named/data/cache_dump.db";

        statistics-file "/var/named/data/named_stats.txt";

        memstatistics-file "/var/named/data/named_mem_stats.txt";

        allow-query     { any; };   #这里改为允许所有,也可以不动

 ……

3、修改区域配置文件,添加正向区域配置

[root@kang ~]# vim /etc/named.rfc1912.zones  #进入区域配置文件

……   ##重新复制一段正向区域模板,修改如下

zone "ben.com" IN {      #正向解析ben.com区域

        type master;     #类型为主区域

        file "ben.com.zone";    #指定区域数据文件为ben.com.zone

        allow-update { none; };   #这里默认就行

};

……

4、现在来配置正向区域数据文件

       首先做备份

[root@kang ~]# cd/var/named/  #安装完程序后数据文件在/var/named/目录下

[root@kang named]# ls      # named.localhost就是区域数据模板文件

  data        named.ca         named.loopback  dynamic 

  named.empty   slaves  chroot  dyndb-ldap  named.localhost

[root@kang named]# cp -p named.localhost ben.com.zone  #这里将模板复制,注意要全属性一起复制,同时将名称修改为区域配置文件中正向区域指定的文件名。

[root@kang named]#

        接着修改数据文件,前面讲过配置格式详解,这里不做详解。

[root@kang named]# vim ben.com.zone  #这里使用我们指定名称的文件进行修改配置

$TTL 1D
@       IN SOA  ben.com. admin.ben.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      ben.com.     #当前区域DNS服务器名称
        A       192.168.90.25   #当前服务器主机IP地址
IN     MX 10     mail.ben.com  #邮件交换记录
www   IN  A   192.168.90.25   #以下都是正向域名对应的IP
mail    IN  A    192.168.90.30
ftp     IN CNAME www
*       IN A     192.168.90.35
~ 
:wq     

5、启动配置服务,添加DNS服务器地址

[root@kang named]# systemctl start named

[root@kang named]# vim /etc/resolv.conf #进入客户端域名解析配置文件

# Generated by NetworkManager

nameserver 192.168.90.25   #添加服务器地址

~

:wq                         

####或者可以配置本机网卡下添加dns,注意这里修改完后需要重启网卡

vim /etc/sysconfig/network-scripts/ifcfg-ens3
DNS1=192.168.126.15   #添加

systemctl restart network  #重启网卡

6、结果验证

        有很多工具都可以进行验证,比如host工具等,这里我们用nslookup工具进行验证。

[root@kang named]# nslookup www.ben.com  #正向解析该网站对应的IP地址
Server:		192.168.90.25    #服务器名
Address:	192.168.90.25#53      #DNS端口号为53 和对应IP

Name:	www.ben.com      #域名名称
Address: 192.168.90.25      #该域名网站对应的IP

[root@kang named]# nslookup mail.ben.com   #正向解析邮件交换网站对应的IP地址
Server:		192.168.90.25
Address:	192.168.90.25#53

Name:	mail.ben.com     #域名名称
Address: 192.168.90.30     #邮件交换记录网站对应的IP

[root@kang named]#

        以上就是正向解析,结果验证成功。

 五、反向解析配置

         反向解析的配置中主配置文件全局配置是不变的,我们只需在区域配置文件中添加反向区

域,以及配置数据文件即可。

1、修改区域配置文件,添加反向区域配置

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

……   #添加反向域

zone "90.168.192.in-addr.arpa" IN {    #反向192.168.90.0/24区域

        type master;     #类型不变

        file "ben.com.zone.local";    #反向区域数据文件名为ben.com.zone.local

        allow-update { none; };

};

……

2、做模板数据文件备份,配置数据文件

[root@kang ~]# cd /var/named/
[root@kang named]# cp -p ben.com.zone ben.com.zone.local  #同样保持文件原属性不变进行复制,同时改名为反向数据指向文件名,这里正向数据文件做模板
[root@kang named]# vim ben.com.zone.local  #进入反向数据配置

$TTL 1D
@       IN SOA  ben.com. admin.ben.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      ben.com.
        A       192.168.90.25   #以上保持不变即可
25     IN  PTR   www.ben.com.  #添加反向解析记录,PRT表示反向指针 
30   IN  PTR    mail.ben.com.
35    IN PTR     ftp.ben.com.
*      IN PTR     www.ben.com.
……

3、结果验证

[root@kang named]# nslookup 192.168.90.25

Server:           192.168.90.25

Address: 192.168.90.25#53

25.90.168.192.in-addr.arpa   name = www.ben.com.

[root@kang named]#

总结:

       详细介绍了DNS服务相关的理论知识,其中DNS系统的作用与常见类型、以及构建DNS服务

的配置文件介绍是最重的,这样我们就能构建正向、反向域名解析。

 


版权声明:本文为qq_59562051原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。