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.8

NS

  • 将子域名指定其它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.6

AAAA

  • 将域名指向一个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记录有以下常见的应用场景:

  1. 别名域名:您可以使用CNAME记录将别名域名映射到主域名,从而让您的用户可以使用不同的域名访问您的网站。
  2. 负载均衡:您可以使用CNAME记录将域名映射到负载均衡器的DNS名称,从而实现负载均衡。
  3. 第三方服务:如果您使用第三方服务(例如云存储服务),则可以使用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 地址。

以下是一个演示示例:

  1. 假设你有一个域名 example.com,它的 DNS 服务器为 ns1.example.comns2.example.com
  2. 假设你想要为另一个域名 blog.example.com 创建一个 CNAME 记录,将它指向另一个域名 myblog.com。因此,当用户访问 blog.example.com 时,DNS 服务器会返回 myblog.com 的 IP 地址。
  3. 在这种情况下,myblog.com 域名需要有对应的 A 记录,以便 DNS 服务器可以解析它的 IP 地址。
  4. 假设 myblog.com 的 IP 地址为 192.0.2.1。为了让 DNS 服务器返回正确的 IP 地址,你需要在 myblog.com 的 DNS 配置中添加一个 A 记录,指向这个 IP 地址。因此,在 myblog.com 的 DNS 配置中添加一个名为 blog 的 A 记录,它的值为 192.0.2.1
  5. 然后,在 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.commyblog.com 对应的 IP 地址为 192.0.2.1。在这个示例中,我们使用 AWS Route53 作为 DNS 服务提供商。

  1. 登录 AWS 控制台,并选择 Route53 服务。

  2. 在左侧导航栏中选择你要管理的域名,然后选择 Create Record 按钮。

  3. Create Record 页面中,选择 CNAME 记录类型,并填写以下信息:

    • Name: blog.example.com
    • Value: myblog.com
    • TTL: 根据需要设置,例如 300

    然后,选择 Create records 按钮创建 CNAME 记录。

  4. 返回域名列表页面,选择 myblog.com 域名,然后选择 Create Record 按钮。

  5. Create Record 页面中,选择 A 记录类型,并填写以下信息:

    • Name: blog
    • Value: 192.0.2.1
    • TTL: 根据需要设置,例如 300

    然后,选择 Create records 按钮创建 A 记录。

现在,blog.example.com 将指向 myblog.com 的 IP 地址 192.0.2.1

  • 在第五步中,是不是应为 Name: myblog.com,而不是 Name: blog

    • 非常抱歉,是我在上一个回答中写错了。第五步中应该将 Name 设置为 myblog.com,而不是 blog。非常感谢您指出这个错误。

      以下是更正后的第五步:

      1. Create Record 页面中,选择 A 记录类型,并填写以下信息:
      • Name: myblog.com
      • Value: 192.0.2.1
      • TTL: 根据需要设置,例如 300

      然后,选择 Create records 按钮创建 A 记录。

TXT

  • 对域名进行标识和说明的一种方式
  • 一般做验证记录时会使用此项
  • 如:SPF(反垃圾邮件)记录,https验证等

TXT 配置范例

_dnsauth TXT 2012011200000051qgs69bwoh4h6nht4n1h0lr038x

SRV

  • SRV记录是DNS服务器的数据库中支持的一种资源记录的类型,它记录了哪台计算机提供了哪个服务这么一个简单的信息。

SRV记录 - DNS学习笔记 (skyao.io)