如何配置网络区域¶
网络区域可用于为 Incus 网络提供 DNS 记录。
您可以使用网络区域自动维护所有实例的有效正向和反向记录。如果您在多个网络上运行多个实例的 Incus 集群,这将非常有用。
拥有每个实例的 DNS 记录可以更轻松地访问在实例上运行的网络服务。例如,在托管出站 SMTP 服务时,这一点也很重要。如果没有实例的正确正向和反向 DNS 条目,发送的邮件可能会被标记为潜在垃圾邮件。
每个网络可以关联到不同的区域
正向 DNS 记录 - 多个逗号分隔的区域(每个项目最多一个)
IPv4 反向 DNS 记录 - 单个区域
IPv6 反向 DNS 记录 - 单个区域
然后,Incus 将自动管理所有实例、网络网关和下游网络端口的正向和反向记录,并将这些区域提供给运营商的生产 DNS 服务器进行区域传输。
项目视图¶
项目具有 features.networks.zones
功能,默认情况下禁用。这控制在哪个项目中创建新的网络区域。启用此功能时,将在项目中创建新的区域,否则将在默认项目中创建。
这允许在默认项目中共享网络的项目(即具有 features.networks=false
的项目)拥有自己的项目级 DNS 区域,这些区域提供该共享网络上地址的面向项目的“视图”(仅包含其项目中实例的地址)。
生成的记录¶
正向记录¶
如果您为网络的 incus.example.net
配置了具有正向 DNS 记录的区域,它会生成解析以下 DNS 名称的记录
对于网络中的所有实例:
<instance_name>.incus.example.net
对于网络网关:
<network_name>.gw.incus.example.net
对于下游网络端口(对于在上行链路网络上设置了网络区域并具有下游 OVN 网络的情况):
<project_name>-<downstream_network_name>.uplink.incus.example.net
手动添加到区域的记录。
您可以使用 dig
命令检查使用您的区域设置生成的记录。
这假设 core.dns_address
已设置为 <DNS_server_IP>:<DNS_server_PORT>
。(设置该配置选项会导致后端立即开始在该地址上提供服务。)
为了允许对给定区域进行 dig
请求,您必须为该区域设置 peers.NAME.address
配置选项。NAME
可以是任何随机名称。该值必须与您的 dig
调用来自的 IP 地址匹配。您必须将同一随机 NAME
的 peers.NAME.key
保留为空。
例如:incus network zone set incus.example.net peers.whatever.address=192.0.2.1
。
注意
地址与 dig
调用来自的同一台机器的地址相同是不够的;它需要作为字符串与 incus
中的 DNS 服务器认为的确切远程地址匹配。dig
绑定到 0.0.0.0
,因此您需要的地址很可能与您提供给 core.dns_address
的地址相同。
例如,运行 dig @<DNS_server_IP> -p <DNS_server_PORT> axfr incus.example.net
可能会产生以下输出
user@host:~$
dig @192.0.2.200 -p 1053 axfr incus.example.net
incus.example.net. 3600 IN SOA incus.example.net. ns1.incus.example.net. 1669736788 120 60 86400 30
incus.example.net. 300 IN NS ns1.incus.example.net.
inctest.gw.incus.example.net. 300 IN A 192.0.2.1
inctest.gw.incus.example.net. 300 IN AAAA fd42:4131:a53c:7211::1
default-ovntest.uplink.incus.example.net. 300 IN A 192.0.2.20
default-ovntest.uplink.incus.example.net. 300 IN AAAA fd42:4131:a53c:7211:216:3eff:fe4e:b794
c1.incus.example.net. 300 IN AAAA fd42:4131:a53c:7211:216:3eff:fe19:6ede
c1.incus.example.net. 300 IN A 192.0.2.125
manualtest.incus.example.net. 300 IN A 8.8.8.8
incus.example.net. 3600 IN SOA incus.example.net. ns1.incus.example.net. 1669736788 120 60 86400 30
反向记录¶
如果您为使用192.0.2.0/24
的网络配置了2.0.192.in-addr.arpa
的 IPv4 反向 DNS 记录区域,它将为通过其某个正向区域引用该网络的所有项目的地址生成反向PTR
DNS 记录。
例如,运行dig @<DNS_server_IP> -p <DNS_server_PORT> axfr 2.0.192.in-addr.arpa
可能会产生以下输出
user@host:~$
dig @192.0.2.200 -p 1053 axfr 2.0.192.in-addr.arpa
2.0.192.in-addr.arpa. 3600 IN SOA 2.0.192.in-addr.arpa. ns1.2.0.192.in-addr.arpa. 1669736828 120 60 86400 30
2.0.192.in-addr.arpa. 300 IN NS ns1.2.0.192.in-addr.arpa.
1.2.0.192.in-addr.arpa. 300 IN PTR inctest.gw.incus.example.net.
20.2.0.192.in-addr.arpa. 300 IN PTR default-ovntest.uplink.incus.example.net.
125.2.0.192.in-addr.arpa. 300 IN PTR c1.incus.example.net.
2.0.192.in-addr.arpa. 3600 IN SOA 2.0.192.in-addr.arpa. ns1.2.0.192.in-addr.arpa. 1669736828 120 60 86400 30
启用内置 DNS 服务器¶
要使用网络区域,您必须启用内置 DNS 服务器。
为此,请将core.dns_address
配置选项设置为 Incus 服务器上的本地地址。为避免与现有 DNS 冲突,我们建议不要使用端口 53。这是 DNS 服务器将侦听的地址。请注意,在 Incus 集群中,每个集群成员上的地址可能不同。
注意
内置 DNS 服务器仅支持通过 AXFR 进行区域传送。它不能直接查询 DNS 记录。因此,内置 DNS 服务器必须与外部 DNS 服务器(bind9
、nsd
等)结合使用,后者将从 Incus 传输整个区域,在到期时刷新它并为 DNS 请求提供权威答案。
区域传送的身份验证在每个区域的基础上配置,在区域配置中定义对等体,并结合 IP 地址匹配和基于 TSIG 密钥的身份验证。
创建和配置网络区域¶
使用以下命令创建网络区域
incus network zone create <network_zone> [configuration_options...]
以下示例分别显示了如何为正向 DNS 记录配置一个区域、为 IPv4 反向 DNS 记录配置一个区域以及为 IPv6 反向 DNS 记录配置一个区域。
incus network zone create incus.example.net
incus network zone create 2.0.192.in-addr.arpa
incus network zone create 1.0.0.0.1.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa
注意
区域必须在全局范围内唯一,即使跨项目也是如此。如果您收到创建错误,可能是由于该区域已存在于另一个项目中。
您可以在创建网络时指定配置选项,也可以使用以下命令在之后进行配置
incus network zone set <network_zone> <key>=<value>
使用以下命令以 YAML 格式编辑网络区域
incus network zone edit <network_zone>
配置选项¶
网络区域提供以下配置选项
注意
使用tsig-keygen
生成 TSIG 密钥时,密钥名称必须遵循<zone_name>_<peer_name>.
格式。例如,如果您的区域名称为incus.example.net
,对等体名称为bind9
,则密钥名称必须为incus.example.net_bind9.
。如果不遵循此格式,区域传输可能会失败。
将网络区域添加到网络¶
要将区域添加到网络,请在网络配置中设置相应的配置选项
对于正向 DNS 记录:
dns.zone.forward
对于 IPv4 反向 DNS 记录:
dns.zone.reverse.ipv4
对于 IPv6 反向 DNS 记录:
dns.zone.reverse.ipv6
例如
incus network set <network_name> dns.zone.forward="incus.example.net"
区域属于项目,并与项目的networks
功能相关联。您可以通过restricted.networks.zones
项目配置键将项目限制到特定的域和子域。
添加自定义记录¶
网络区域会自动为所有实例、网络网关和下游网络端口生成正向和反向记录。如果需要,您可以手动将自定义记录添加到区域。
为此,请使用incus network zone record
命令。
创建记录¶
使用以下命令创建记录
incus network zone record create <network_zone> <record_name>
此命令创建没有条目的空记录并将其添加到网络区域。
记录属性¶
记录具有以下属性
属性 |
类型 |
必需 |
描述 |
---|---|---|---|
|
字符串 |
是 |
记录的唯一名称 |
|
字符串 |
否 |
记录的描述 |
|
条目列表 |
否 |
DNS 条目的列表 |
|
字符串集 |
否 |
配置选项作为键值对(仅支持 |
添加或删除条目¶
要将条目添加到记录中,请使用以下命令
incus network zone record entry add <network_zone> <record_name> <type> <value> [--ttl <TTL>]
此命令将具有指定类型和值的 DNS 条目添加到记录中。
例如,要创建双栈 Web 服务器,请添加一个具有两个条目的记录,类似于以下内容
incus network zone record entry add <network_zone> <record_name> A 1.2.3.4
incus network zone record entry add <network_zone> <record_name> AAAA 1234::1234
您可以使用--ttl
标志为条目设置自定义生存时间(以秒为单位)。否则,将使用默认的 300 秒。
您无法编辑条目(除非您使用incus network zone record edit
编辑完整记录),但您可以使用以下命令删除条目
incus network zone record entry remove <network_zone> <record_name> <type> <value>