17.4. 通过某个接口路由 DNS 流量
NetworkManager 可以配置 systemd-resolved、dnsmasq 和 dnsconf DNS 后端。为了避免多接口系统上 DNS 解析问题,NetworkManager 可以自动为绑定到特定网络接口的 DNS 服务器创建专用路由。
连接配置文件中提到的每个 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 yesCopy 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 yesCopy 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 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令验证是否通过正确的接口到达了名称服务器,是否使用了将 DNS 服务器的所有路由都放在特殊路由表
20053中的策略路由方法。