Назад | Перейти на главную страницу

Как получить netplan для установки сервера DNS в /etc/resolv.conf на основе информации, поступающей с сервера DHCP?

Я настраиваю кластер 4 x RPi со следующей простой топологией сети:

На всех 4 узлах RPi установлена ​​последняя версия ОС Ubuntu Server LTS 20.04. rpi1 - мой основной / шлюзовой узел. На rpi1 сделал следующее:

# Basics:
interface=eth0
listen-address=127.0.0.1

# DHCP Settings (MAC Addresses removed)
dhcp-range=10.0.0.1,10.0.0.128,12h

dhcp-host=XX:XX:XX:XX:XX:XX,rpi1,10.0.0.1
dhcp-host=XX:XX:XX:XX:XX:XX,rpi2,10.0.0.2
dhcp-host=XX:XX:XX:XX:XX:XX,rpi3,10.0.0.3
dhcp-host=XX:XX:XX:XX:XX:XX,rpi4,10.0.0.4

dhcp-option=option:router,10.0.0.1
dhcp-option=option:dns-server,10.0.0.1
dhcp-option=option:netmask,255.255.255.0

# Forward to nameservers:
server=8.8.8.8
server=8.8.4.4

# Misc
bind-interfaces
domain-needed
bogus-priv
expand-hosts
10.0.0.1 rpi1
10.0.0.2 rpi2
10.0.0.3 rpi3
10.0.0.4 rpi4

Эта настройка, похоже, успешно работает в качестве DHCP-сервера, поскольку она правильно назначает желаемые IP-адреса устройствам eth0 оставшихся «второстепенных» узлов (rpi2, rpi3, rpi4) на основе их MAC-адресов.

ОДНАКО, я не могу понять, как использовать netplan на второстепенных узлах для регистрации сервера имен, транслируемого сервером dnsmasq-DHCP, работающим на rpi1. Я перепробовал всевозможные настройки в /etc/netplan/50-cloud-init.yaml файл на второстепенном узле, но когда я запускаю sudo netplan apply, он ВСЕГДА создает /etc/resolv.conf файл со следующей информацией о местоположении сервера имен:

nameserver 127.0.0.53
options edns0

Если я вручную отредактирую /etc/resolv.conf указать на rpi1 (nameserver 10.0.0.1), тогда он работает (например, тогда я могу ping rpi3 из rpi2), но хотелось бы понять, почему запускается netplan apply не устанавливает это автоматически на основе информации, поступающей из трансляции dnsmasq. Я пробовал различные настройки в своем /etc/netplan/50-cloud-init.yaml, но похоже, что на результирующий /etc/resolv.conf файл.

Вот где я продержался /etc/netplan/50-cloud-init.yaml файл на rpi2, прежде чем отказаться (примечание: я также включаю здесь прямой доступ к Wi-Fi для начальной настройки / отладки):

network:
    version: 2    
    ethernets:
        eth0:
            dhcp4: true
            optional: true
            dhcp4-overrides:
                use-dns: false
            nameservers:
                addresses: [10.0.0.1]
    wifis:
        wlan0:
            optional: true
            access-points:
                "my-wifi-signal":
                    password: "mypassword"
            dhcp4: no
            addresses: [192.168.0.52/24]
            gateway4: 192.168.0.1
            nameservers:
                addresses: [8.8.8.8,8.8.4.4]

Еще мне странно, что когда я бегу systemd-resolve --status после применения netplan с этой конфигурацией, похоже, это указывает на то, что теперь он ДЕЙСТВИТЕЛЬНО распознает расположение желаемого DNS-сервера имен на rpi1:

$ systemd-resolve --status
...

Link 2 (eth0)
      Current Scopes: DNS
DefaultRoute setting: yes
       LLMNR setting: yes
MulticastDNS setting: no
  DNSOverTLS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
  Current DNS Server: 10.0.0.1
         DNS Servers: 10.0.0.1

... но, как я уже сказал, когда я пытаюсь, например, ping rpi4 из rpi3 это не работает (я получаю сообщение «ping: rpi4: Temporary failure in name resolution»).

В итоге:

Как мне сделать так, чтобы бег sudo netplan apply проконсультируется с DHCP-сервером о DNS-сервере имен и будет использовать его для установки содержимого /etc/resolv.conf?