25.3. 通过特定接口路由 DNS 流量
NetworkManager 支持在系统中配置 DNS 服务器的不同机制,其中包括将配置添加到 /etc/resolv.conf
文件并配置 DNS 服务,如 systemd-resolved
、dnsmasq
和 dnsconfd
。
连接配置文件中提到的每个 DNS 服务器都与特定网络接口关联。DNS 后端服务 systemd-resolved
和 dnsmasq
确保每个 DNS 名称服务器只能通过正确的网络接口访问。但是,其他后端服务不支持此功能。因此,NetworkManager 具有一个自动添加专用路由的功能,以便仅通过正确的接口访问每个名称服务器。您可以设置 ipv4.routed-dns
和 ipv6.routed-dns
属性来使用此功能。
示例情况:
连接配置文件 1: <example-connection-1>
-
默认网关:
192.0.2.254
-
DNS 服务器:
10.0.0.1
- 搜索域:example-domain.com
-
默认网关:
连接配置文件 2: <example-connection-2>
-
默认网关:
198.51.100.254
(此网关无法访问10.0.0.0/24
网络) -
DNS 服务器:203.0.113.
1
-
默认网关:
在本例中,您有两个连接配置集: <example-connection-1> 和 <example-connection-2> 通过 enp1s0
和 enp7s0
网络接口进行连接。如果 <example-connection-2> 首先连接了第二个配置集,则此连接的默认网关 198.51.100.254
具有较低指标,并且优先于第一个配置集。因此,RHEL 在连接到第一个配置集的 DNS 服务器时使用第二个连接的默认网关。因此,DNS 解析会失败。要解决这个问题,请为两个连接配置文件启用
ipv4.routed-dns
设置,以便 NetworkManager 通过正确的接口为 10.0.0.1
DNS 服务器创建一个专用路由,本例中为 enp1s0
。
先决条件
- 连接配置集已经存在。
流程
修改连接配置文件,以启用为名称服务器创建路由:
对于连接配置文件 1,请输入:
nmcli connection modify <example-connection-1> ipv4.routed-dns yes
# nmcli connection modify <example-connection-1> ipv4.routed-dns yes
Copy to Clipboard Copied! 对于连接配置文件 2,请输入:
nmcli connection modify <example-connection-2> ipv4.routed-dns yes
# nmcli connection modify <example-connection-2> ipv4.routed-dns yes
Copy to Clipboard Copied!
重新激活连接:
nmcli connection up <example-connection-1> nmcli connection up <example-connection-2>
# nmcli connection up <example-connection-1> # nmcli connection up <example-connection-2>
Copy to Clipboard Copied!
验证
显示要访问 IP 地址的路由:
ip route get 203.0.113.1
# ip route get 203.0.113.1 203.0.113.1 dev enp1s0 table 20053 src 10.0.0.1 uid 0
Copy to Clipboard Copied! 此命令验证名称服务器是否通过正确的接口访问,并使用策略路由方法将 DNS 服务器的所有路由放在特殊路由表
20053
中。