管理记录

区域用于将 DNS 命名空间分解为层次结构,而“资源记录”,或简称“记录”,用于在命名空间内存储数据。每个记录都有一个

  • 名称:指示其在 DNS 命名空间中位置的字符串。

  • 类型:一组字母代码,用于标识记录的用途。例如 A 用于地址记录,或 CNAME 用于规范名称记录。

  • 类:一组字母代码,用于指定记录的命名空间。通常,这为 IN,表示互联网,尽管也存在其他命名空间。

  • TTL:记录保持有效的秒数。

  • Rdata:记录的数据,例如 A 类型记录的 IP 地址,或 CNAME 类型记录的另一个记录名称。

Designate 中的记录集

Designate 中的 DNS 记录使用 记录集 进行管理,这些记录集表示具有相同 名称类型 的一个或多个 DNS 记录,但数据可能不同。例如,名为 www.example.com、类型为 A 的记录集,包含数据 192.0.2.1192.0.2.2,可能反映托管 www.example.com 的两个 Web 服务器,这些服务器位于这两个 IP 地址。

必须在区域内创建记录集。如果删除包含记录集的区域,则该区域内的记录集也会被删除。

创建记录集

默认情况下,任何用户都可以在其项目拥有的区域中创建记录集。在此示例中,用户创建了一个名为 example.org. 的区域。

记录集使用 openstack recordset create 命令创建,需要一个区域、一个名称、一个类型和记录的数据。要使用 Designate 插件和 OpenStack 客户端重新创建前面的示例,用户将运行

$ openstack recordset create --type A --record 192.0.2.1 example.org. www
+-------------+--------------------------------------+
| Field       | Value                                |
+-------------+--------------------------------------+
| action      | CREATE                               |
| created_at  | 2021-05-03T03:13:46.000000           |
| description | None                                 |
| id          | 549c3e83-443f-474b-b467-6bcd7cb9f37d |
| name        | www.example.org.                     |
| project_id  | c85fdba96041438fa0cad2dc7909d3f5     |
| records     | 192.0.2.1                            |
| status      | PENDING                              |
| ttl         | None                                 |
| type        | A                                    |
| updated_at  | None                                 |
| version     | 1                                    |
| zone_id     | 077460ef-34db-486a-8d59-c9564dc3a3a9 |
| zone_name   | example.org.                         |
+-------------+--------------------------------------+

由于最终参数 www 不是完全限定域名 (FQDN),因此它会被附加到区域名称之前。您也可以使用 FQDN www.example.org. 获得相同的结果。请注意,在使用 FQDN 时需要尾部的 .。省略它会导致名称 "www.example.org.example.org."

您可以多次提供 --record 参数,以在记录集中创建多个记录。这的一个典型用途是 轮询 DNS

$ openstack recordset create --type A --record 192.0.2.1 --record 192.0.2.2 example.org. web
+-------------+--------------------------------------+
| Field       | Value                                |
+-------------+--------------------------------------+
| action      | CREATE                               |
| created_at  | 2021-05-03T03:26:43.000000           |
| description | None                                 |
| id          | 9e0fba43-ca67-44ed-b9d9-fc1242920319 |
| name        | web.example.org.                     |
| project_id  | c85fdba96041438fa0cad2dc7909d3f5     |
| records     | 192.0.2.1                            |
|             | 192.0.2.2                            |
| status      | PENDING                              |
| ttl         | None                                 |
| type        | A                                    |
| updated_at  | None                                 |
| version     | 1                                    |
| zone_id     | 077460ef-34db-486a-8d59-c9564dc3a3a9 |
| zone_name   | example.org.                         |
+-------------+--------------------------------------+

您可以使用 openstack recordset list 命令查看区域的记录集

$ openstack recordset list example.org.
+--------------------------------------+------------------+------+---------------------------------------------------------------------+--------+--------+
| id                                   | name             | type | records                                                             | status | action |
+--------------------------------------+------------------+------+---------------------------------------------------------------------+--------+--------+
| 3bebbd03-07d7-4274-a784-39c32a2be8c6 | example.org.     | SOA  | ns1.example.net. admin.example.org. 1620012616 3599 600 86400 3600  | ACTIVE | NONE   |
| 7d34e4d3-a2f1-4af0-831c-ba52a8312c6a | example.org.     | NS   | ns1.example.net.                                                    | ACTIVE | NONE   |
| 9e0fba43-ca67-44ed-b9d9-fc1242920319 | web.example.org. | A    | 192.0.2.1                                                           | ACTIVE | NONE   |
|                                      |                  |      | 192.0.2.2                                                           |        |        |
| 549c3e83-443f-474b-b467-6bcd7cb9f37d | www.example.org. | A    | 192.0.2.1                                                           | ACTIVE | NONE   |
+--------------------------------------+------------------+------+---------------------------------------------------------------------+--------+--------+

该区域的 SOANS 记录也在此处可见,但无法修改。

该区域的权威名称服务器列为 NS 类型记录的记录数据,在本例中为 ns1.example.net.。要验证此信息,您可以使用 dig 查询名称服务器以获取 NS 类型

$ dig @ns1.example.net example.org. -t NS +short
ns1.devstack.org.

您还可以验证 A 记录集。您不需要 -t 选项,因为它为默认选项

$ dig @ns1.example.net web.example.org. +short
192.0.2.2
192.0.2.1
$ dig @ns1.example.net www.example.org. +short
192.0.2.1

如果希望构造一个超过字符字符串 255 字节最大长度的 TXT 记录,则必须根据 RFC7208 第 3.3 节将其拆分为多个字符串。例如,"v=DKIM1; .... firstsecond string..." 可以变为 "v=DKIM1; .... first" "second string..."。如果您提供的数据少于 255 个字符,则它将被视为单个字符字符串,并根据 RFC1035 第 5.1 节验证引号外的空格和未转义的双引号。

例如,要创建一个由 410 个字符组成的一个字符串的 TXT 记录,您可以将其拆分为 2 个字符串,如下所示

$ openstack recordset create --type TXT --record '"210 characters string" "200 characters string"' example.org. _domainkey

更新记录集

您可以使用 openstack recordset set 命令修改记录集。在按名称更新记录集时,必须使用 FQDN。与大多数 OpenStack 命令一样,您也可以使用记录集 ID。

$ openstack recordset set example.org. www.example.org. --record 192.0.2.1 --record 192.0.2.2
+-------------+--------------------------------------+
| Field       | Value                                |
+-------------+--------------------------------------+
| action      | UPDATE                               |
| created_at  | 2021-05-03T03:30:16.000000           |
| description | None                                 |
| id          | 549c3e83-443f-474b-b467-6bcd7cb9f37d |
| name        | www.example.org.                     |
| project_id  | c85fdba96041438fa0cad2dc7909d3f5     |
| records     | 192.0.2.2                            |
|             | 192.0.2.1                            |
| status      | PENDING                              |
| ttl         | None                                 |
| type        | A                                    |
| updated_at  | 2021-05-03T03:44:16.000000           |
| version     | 5                                    |
| zone_id     | 077460ef-34db-486a-8d59-c9564dc3a3a9 |
| zone_name   | example.org.                         |
+-------------+--------------------------------------+

删除记录集

您可以使用 openstack recordset delete 命令使用区域和 FQDN 或记录集 ID 删除记录集。

$ openstack recordset delete example.org. web.example.org.
+-------------+--------------------------------------+
| Field       | Value                                |
+-------------+--------------------------------------+
| action      | DELETE                               |
| created_at  | 2021-05-03T03:47:00.000000           |
| description | None                                 |
| id          | 5ab3418f-5377-47eb-b967-9e9ff7f3c26b |
| name        | web.example.org.                     |
| project_id  | c85fdba96041438fa0cad2dc7909d3f5     |
| records     | 192.0.2.1                            |
|             | 192.0.2.2                            |
| status      | PENDING                              |
| ttl         | None                                 |
| type        | A                                    |
| updated_at  | 2021-05-03T03:47:13.000000           |
| version     | 2                                    |
| zone_id     | 077460ef-34db-486a-8d59-c9564dc3a3a9 |
| zone_name   | example.org.                         |
+-------------+--------------------------------------+