管理记录¶
区域用于将 DNS 命名空间分解为层次结构,而“资源记录”,或简称“记录”,用于在命名空间内存储数据。每个记录都有一个
名称:指示其在 DNS 命名空间中位置的字符串。
类型:一组字母代码,用于标识记录的用途。例如
A用于地址记录,或CNAME用于规范名称记录。类:一组字母代码,用于指定记录的命名空间。通常,这为
IN,表示互联网,尽管也存在其他命名空间。TTL:记录保持有效的秒数。
Rdata:记录的数据,例如
A类型记录的 IP 地址,或CNAME类型记录的另一个记录名称。
Designate 中的记录集¶
Designate 中的 DNS 记录使用 记录集 进行管理,这些记录集表示具有相同 名称 和 类型 的一个或多个 DNS 记录,但数据可能不同。例如,名为 www.example.com、类型为 A 的记录集,包含数据 192.0.2.1 和 192.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 |
+--------------------------------------+------------------+------+---------------------------------------------------------------------+--------+--------+
该区域的 SOA 和 NS 记录也在此处可见,但无法修改。
该区域的权威名称服务器列为 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. |
+-------------+--------------------------------------+