17.4. 通过某个接口路由 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 服务器 10.0.0.1
时使用第二个连接的默认网关。因此,DNS 解析失败。要解决这个问题,请为两个连接配置文件启用 ipv4.routed-dns
设置,以便 NetworkManager 通过正确的接口(本例中为 enp1s0
)为 10.0.0.1
DNS 服务器创建一个专用的路由。
先决条件
- 连接配置文件已存在。
流程
修改连接配置文件,以能够创建到名称服务器的路由:
对于连接配置文件 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! Toggle word wrap Toggle overflow 对于连接配置文件 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! Toggle word wrap Toggle overflow
重新激活连接:
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! Toggle word wrap Toggle overflow
验证
显示要到达的 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! Toggle word wrap Toggle overflow 此命令验证是否通过正确的接口到达了名称服务器,是否使用了将 DNS 服务器的所有路由都放在特殊路由表
20053
中的策略路由方法。