Ubuntu Server 22.04 中 DHCP 提供的 DNS 服务器路由错误

Ubuntu Server 22.04 中 DHCP 提供的 DNS 服务器路由错误

在我的网络上全新安装 Ubuntu Server 22.04 (ubuntu-22.04-live-server-amd64.iso) 时,我无法使用位于不同子网上的 DHCP 提供的 DNS 服务器:到该子网的路由也由 DHCP 服务器提供,但似乎 Ubuntu 22.04 正在尝试强制使用默认网关来访问 DNS 服务器(这不行)。使用 Ubuntu 20.04 (ubuntu-20.04.4-live-server-amd64.iso) 时,问题不再存在,一切正常。

这是我的网络架构

DHCP 服务器提供以下配置:

  • Option 003 Router : 10.1.20.251
  • Option 006 DNS Servers : 10.1.10.11,10.1.10.12
  • 121 Classless Static Routes : 10.1.10.0/24 via 10.1.20.1, 10.1.11.0/24 via 10.1.20.1, 0.0.0.0/32 via 10.1.20.251

在 Ubuntu 服务器上20.04,这是我的 netplan 配置(全新安装):

root@ubsrv2004:~# cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
  ethernets:
    ens160:
      dhcp4: true
  version: 2

在 Ubuntu 服务器上22.04,这是我的 netplan 配置(全新安装):

root@ubsrv2204:~# cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
  ethernets:
    ens160:
      dhcp4: true
  version: 2

在 Ubuntu 服务器上20.04,获取DHCP配置后的路由表如下:

root@ubsrv2004:~# ip r
default via 10.1.20.251 dev ens160 proto dhcp src 10.1.20.15 metric 100
10.1.10.0/24 via 10.1.20.1 dev ens160 proto dhcp src 10.1.20.15 metric 100
10.1.11.0/24 via 10.1.20.1 dev ens160 proto dhcp src 10.1.20.15 metric 100
10.1.12.0/24 via 10.1.20.1 dev ens160 proto dhcp src 10.1.20.15 metric 100
10.1.20.0/24 dev ens160 proto kernel scope link src 10.1.20.15

在 Ubuntu 服务器上22.04,获取DHCP配置后的路由表如下:

root@ubsrv2204:~# ip r
default via 10.1.20.251 dev ens160 proto dhcp src 10.1.20.13 metric 100
10.1.10.0/24 via 10.1.20.1 dev ens160 proto dhcp src 10.1.20.13 metric 100
10.1.10.11 via 10.1.20.251 dev ens160 proto dhcp src 10.1.20.13 metric 100
10.1.10.12 via 10.1.20.251 dev ens160 proto dhcp src 10.1.20.13 metric 100
10.1.11.0/24 via 10.1.20.1 dev ens160 proto dhcp src 10.1.20.13 metric 100
10.1.12.0/24 via 10.1.20.1 dev ens160 proto dhcp src 10.1.20.13 metric 100
10.1.20.0/24 dev ens160 proto kernel scope link src 10.1.20.13 metric 100
10.1.20.1 dev ens160 proto dhcp scope link src 10.1.20.13 metric 100
10.1.20.251 dev ens160 proto dhcp scope link src 10.1.20.13 metric 100

如您所见,我有 2 条通往 DNS 服务器 10.1.10.11 和 10.1.10.12 的路由。这些路由完全不正确,因为 DNS 服务器可通过 10.1.20.1 而不是 10.1.20.251 访问。

10.1.10.11 via 10.1.20.251 dev ens160 proto dhcp src 10.1.20.13 metric 100
10.1.10.12 via 10.1.20.251 dev ens160 proto dhcp src 10.1.20.13 metric 100

如果我通过将其添加到两个 netplan 配置中来手动设置 DNS:

  dhcp4-overrides:
     use-dns: false
  nameservers:
     addresses: [10.1.10.11]

我仍然遇到同样的问题。

这两个全新安装的 ubuntu server 20.04 和 22.0.4 之间有什么区别?如何正确配置 Ubuntu 22.04 才能使 DHCP 提供的路由和 DHCP 提供的 DNS 服务器正常工作?

答案1

您可以为每个配置文件创建“插入式”配置.network,添加配置以禁用到 DNS 服务器的路由的创建。

for i in /run/systemd/network/10-netplan-*.network; do 
  drop_in="/etc/systemd/network/$(basename ${i}).d"
  mkdir -p "${drop_in}"
  cat <<EOF > "${drop_in}/override.conf"
[DHCPv4]
RoutesToDNS=false
EOF
done

Ubuntu Server 的默认安装将使用网络计划生成配置systemd-networkd。DNS 服务器的路由可以在systemd-networkd使用配置键RoutesToDNS

RoutesToDNS配置不受支持网络计划直接使用。使用“插入式”文件可以添加systemd-networkd配置生成的配置网络计划

链接

相关内容