DNS资源记录说明
资源记录前言
- 区域解析库:由众多RR组成(资源记录:Resource Record, RR)
- 记录类型:SOA、NS、MX、A、AAAA、PTR、CNAME、TXT
资源记录格式说明
注意事项
-
一个DNS区域数据库最少由三部分组成:SOA记录、NS记录、NS对应的A记录
-
TTL可从全局继承
-
配置域名要以.结尾,否则还会继续补域名
-
使用 “@” 符号可用于引用当前区域的名字
-
同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
-
同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机
语法(格式)
name [TTL] IN rr_type value
#说明:
name # 解析的域名,如:www.xiangzheng.com.(最后一定要填. 表示结束符 否则会将当前域名在往后补一遍)
TTL # 用户将记录缓存多久,可选,不写将从全局继承,如:86400(表示一天 秒为单位)
IN # 固定值 照填就可以 表示internet
rr_type # 资源记录类型,如SOA、NS、A...
value # 域名对应的IP地址(如果是CNAME记录,则只能添加域名)SOA
- Start Of Authority,起始授权记录
注意事项
- 一个区域解析库有且仅能有一个 SOA 记录
- SOA 必须位于解析库的第一条记录
包含内容
- 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字
- 当前区域管理员的邮箱地址(但地址中不能使用@符号,一般用.替换,例如:mail.xiangzheng.com)
- 主从服务区域传输相关定义以及否定的答案的统一的TTL
SOA 配置范例
- name: 当前区域的名字,例如“xiangzheng.com.”
- value: 有多部分组成
$TTL 600 # 全局配置,解析数据在dns服务器的缓存时间,缓存有效期10分钟;首行写一个TTL变量的话 那么下面的TTL可省略不写 将都使用这个值,不写单位即表示以秒为单位,也可以写成 1D 表示一天
# xiangzheng.com. 表示当前的域名,可省略成 @(因为已经在配置文件中添加了域名),@就表示本域
# IN为默认值,照填(表示internet)
# SOA 表示 SOA记录
# ns1 表示主DNS服务器,ns1来维护这个DNS服务(其实完整写法是ns1.xiangzheng.com. 因为本身就在这个域当中 会自动补 所以可以省略写成ns1,还需要写配套的A记录来指明ns1的IP地址)
# rootroot25.163.com. 表示当前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换
xiangzheng.com. IN SOA ns1 rootroot25.163.com. (
2015042201 ; #DNS数据库的版本编号,后续数据库内容发生更新 则此序列号也必须要更新(因为从dns服务器是根据此序列号的变化来判断是否此主dns服务器发生了数据更新)
1H ; #向主dns服务器拉取数据的时间间隔,一小时
10M ; #如果一小时后拉取失败后的重试时间,每十分钟尝试一次
1D ; #过期时间,拉取数据和尝试重新拉取数据都失败后 过多久认为从服务器失效
12H ; #否定答案的TTL值,访问失败的记录 放在缓存中的有效时长(防止无效的记录多次去网络上查找而浪费资源)
)
#ns1对应的NS记录,@表示当前域名 即xiangzheng.com,ns1表示ns1.xiangzheng.com
@ NS ns1
# ns1对应的A记录,需要有对应的A记录来指向对应的 dns-server 的地址
ns1 IN A 10.0.0.8NS
- 将子域名指定其它DNS服务器解析
注意事项
- 相邻的两个资源记录的name相同时,后续的可省略
- 对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录
- 一个区域可以有多个NS记录
NS 配置范例
- name: 当前区域的名字
- value: 当前区域的某DNS服务器的名字,例如ns.xiangzheng.com.
$TTL 600
xiangzheng.com. IN SOA ns1 rootroot25.163.com. (
2015042201 ;
1H ;
10M ;
1D ;
12H ;
)
# xiangzheng.com. 对应的NS记录;
# @表示当前域名 即xiangzheng.com.
# ns1 表示 ns1.xiangzheng.com,即 ns 服务器对应的主机名
@ IN NS ns1 #完整写法:xiangzheng.com. IN NS ns1.xiangzheng.com.
@ IN NS ns2 #备用 dns-server(从dns)
# ns主机 对应的A记录;
# 即 ns 服务器对应的 dns-server 的地址
ns1 IN A 10.0.0.8
ns2 IN A 10.0.0.103 #备用 dns-server(从dns)MX
- Mail eXchanger,邮件交换器
- 将域名指向邮件服务器的地址
注意事项
- 一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高
- 对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录
MX 配置范例
- name: 当前区域的名字(可以写为@,@表示本域)
- value: 当前区域的某邮件服务器(smtp服务器)的主机名
xiangzheng.com. IN MX 10 mx1.xiangzheng.com.
IN MX 20 mx2.xiangzheng.com.
mx1 IN A 10.0.0.110
mx2 IN A 10.0.0.120 A
- 将域名指向一个ipv4地址,FQDN –> IP
注意事项
- 避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址
A 配置范例
- name: 某主机的FQDN,例如:www.xiangzheng.com.
- value: 主机名对应主机的IP地址
www.xiangzheng.com. IN A 1.1.1.1
www.xiangzheng.com. IN A 2.2.2.2
mx1.xiangzheng.com. IN A 3.3.3.3
mx2.xiangzheng.com. IN A 4.4.4.4
*.xiangzheng.com. IN A 5.5.5.5
xiangzheng.com. IN A 6.6.6.6
$GENERATE 1-254 HOST$ IN A 1.2.3.$
#以上内容如果都在 xiangzheng.com. 这个域的话可以简写成以下形式
www IN A 1.1.1.1
www IN A 2.2.2.2
mx1 IN A 3.3.3.3
mx2 IN A 4.4.4.4
* IN A 5.5.5.5
@ IN A 6.6.6.6AAAA
- 将域名指向一个ipv6地址,FQDN –> IPv6
AAAA 配置范例
- 假设解析 www.xiangzheng.com 这个域名 对应的IPv6地址为 fe80::216:3eff:fe34:a8cc
www 86400 IN AAAA fe80::216:3eff:fe34:a8cc
PTR
- PoinTeR,将IP解析成域名,IP –> FQDN
注意事项
- 网络地址及后缀可省略;主机地址依然需要反着写
PTR 配置范例
- name: IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1;还有特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addr.arpa.
- value: FQDN
4.3.2.1.in-addr.arpa. IN PTR www.xiangzheng.com.
#如1.2.3为网络地址,可简写成:
4 IN PTR www.xiangzheng.com.CNAME
别名记录,通常大网站涉及到CDN时使用
CNAME(Canonical Name)记录是一种DNS记录,用于将一个域名映射到另一个域名。这意味着,如果您试图访问CNAME记录对应的域名,您实际上将被重定向到另一个域名。
CNAME记录有以下常见的应用场景:
- 别名域名:您可以使用CNAME记录将别名域名映射到主域名,从而让您的用户可以使用不同的域名访问您的网站。
- 负载均衡:您可以使用CNAME记录将域名映射到负载均衡器的DNS名称,从而实现负载均衡。
- 第三方服务:如果您使用第三方服务(例如云存储服务),则可以使用CNAME记录将您的域名映射到第三方服务的域名,从而让您的用户可以通过您的域名访问第三方服务。
请注意,CNAME记录仅适用于二级域名,不能用于根域名(例如example.com)。此外,某些互联网服务不支持使用CNAME记录,因此请在使用CNAME记录前确认您的服务是否支持。
为什么CNAME记录不能用于根域名?
- CNAME记录不能用于根域名(例如example.com)是因为这是一种DNS规则。根域名必须使用A记录或其他类型的DNS记录来指向其IP地址,因为根域名是整个DNS域名系统的基础。
- 如果您将根域名映射到另一个域名,则DNS系统将无法确定您的域名的正确IP地址,因此无法访问您的网站。因此,CNAME记录只适用于二级域名,并且只能将二级域名映射到其他域名,而不是映射到IP地址。
CNAME 配置范例
- name: 别名的FQDN
- value: 真正名字的FQDN
www.xiangzheng.com. IN CNAME websrv.xiangzheng.com.–
CNAME 记录(Canonical Name Record)是一种 DNS 记录类型,它将一个域名解析为另一个域名。CNAME 记录通常用于将一个主机名映射到另一个主机名,或者将一个子域名映射到另一个域名。
例如,假设你拥有一个名为 www.example.com 的网站,该网站的内容存储在名为 s3.amazonaws.com 的 Amazon S3 存储桶中。为了让用户通过 www.example.com 访问你的网站,你可以创建一个 CNAME 记录,将 www.example.com 解析为 s3.amazonaws.com 的主机名。具体来说,你需要在 example.com 的 DNS 配置中添加一个如下所示的 CNAME 记录:
www.example.com. IN CNAME s3.amazonaws.com.
在上述记录中,www.example.com 是你的网站的主机名,s3.amazonaws.com 是存储网站内容的 S3 存储桶的主机名。该记录表示将 www.example.com 解析为 s3.amazonaws.com,即访问 www.example.com 将自动重定向到 s3.amazonaws.com,从而让用户访问到你的网站内容。
需要注意的是,CNAME 记录不能直接解析为 IP 地址,只能解析为另一个主机名。如果你需要将一个主机名解析为 IP 地址,应该使用 A 记录或 AAAA 记录。
那 s3.amazonaws.com. 是不是也应该有对应的 A 记录?
是的,s3.amazonaws.com 主机名对应的 IP 地址需要通过 A 记录或者 AAAA 记录进行解析。AWS 提供了一个名为 s3.amazonaws.com 的 DNS 服务,它返回一个可用于访问 S3 存储桶的 IP 地址列表。当你访问 s3.amazonaws.com 时,AWS 的 DNS 服务会根据负载均衡策略返回其中一个 IP 地址。
因此,为了让 CNAME 记录正常工作,必须保证目标主机名的 DNS 配置正确,包括正确的 A 记录或 AAAA 记录、适当的负载均衡策略等等。在上述例子中,你需要信任 AWS 的 DNS 服务,并相信它会返回可用的 IP 地址列表,以便让 CNAME 记录正常工作。
能不能将 CNAME 记录和 A 记录结合起来进行完整演示
当你创建一个 CNAME 记录时,它指向另一个域名,而不是直接指向一个 IP 地址。在很多情况下,被指向的域名需要有对应的 A 记录才能解析到正确的 IP 地址。
以下是一个演示示例:
- 假设你有一个域名
example.com,它的 DNS 服务器为ns1.example.com和ns2.example.com。 - 假设你想要为另一个域名
blog.example.com创建一个 CNAME 记录,将它指向另一个域名myblog.com。因此,当用户访问blog.example.com时,DNS 服务器会返回myblog.com的 IP 地址。 - 在这种情况下,
myblog.com域名需要有对应的 A 记录,以便 DNS 服务器可以解析它的 IP 地址。 - 假设
myblog.com的 IP 地址为192.0.2.1。为了让 DNS 服务器返回正确的 IP 地址,你需要在myblog.com的 DNS 配置中添加一个 A 记录,指向这个 IP 地址。因此,在myblog.com的 DNS 配置中添加一个名为blog的 A 记录,它的值为192.0.2.1。 - 然后,在
example.com的 DNS 配置中,添加一个 CNAME 记录,将blog.example.com指向myblog.com。这样,当用户访问blog.example.com时,DNS 服务器会返回myblog.com的 IP 地址,然后用户可以访问myblog.com。
请注意,这只是一个示例,并不是一个完整的配置过程,实际的过程可能因为使用的 DNS 服务提供商或其他因素而有所不同。因此,在进行配置时,请仔细阅读 DNS 服务提供商的文档,以确保正确地配置了 CNAME 记录和对应的 A 记录。
代码示例呢
这里是一个示例,假设你要将 blog.example.com 指向 myblog.com,myblog.com 对应的 IP 地址为 192.0.2.1。在这个示例中,我们使用 AWS Route53 作为 DNS 服务提供商。
-
登录 AWS 控制台,并选择 Route53 服务。
-
在左侧导航栏中选择你要管理的域名,然后选择
Create Record按钮。 -
在
Create Record页面中,选择CNAME记录类型,并填写以下信息:- Name:
blog.example.com - Value:
myblog.com - TTL: 根据需要设置,例如
300。
然后,选择
Create records按钮创建 CNAME 记录。 - Name:
-
返回域名列表页面,选择
myblog.com域名,然后选择Create Record按钮。 -
在
Create Record页面中,选择A记录类型,并填写以下信息:- Name:
blog - Value:
192.0.2.1 - TTL: 根据需要设置,例如
300。
然后,选择
Create records按钮创建 A 记录。 - Name:
现在,blog.example.com 将指向 myblog.com 的 IP 地址 192.0.2.1。
-
在第五步中,是不是应为 Name: myblog.com,而不是 Name: blog
-
非常抱歉,是我在上一个回答中写错了。第五步中应该将 Name 设置为
myblog.com,而不是blog。非常感谢您指出这个错误。以下是更正后的第五步:
- 在
Create Record页面中,选择A记录类型,并填写以下信息:
- Name:
myblog.com - Value:
192.0.2.1 - TTL: 根据需要设置,例如
300。
然后,选择
Create records按钮创建 A 记录。 - 在
-
TXT
- 对域名进行标识和说明的一种方式
- 一般做验证记录时会使用此项
- 如:SPF(反垃圾邮件)记录,https验证等
TXT 配置范例
_dnsauth TXT 2012011200000051qgs69bwoh4h6nht4n1h0lr038x