Я настраиваю кластер 4 x RPi со следующей простой топологией сети:
На всех 4 узлах RPi установлена последняя версия ОС Ubuntu Server LTS 20.04. rpi1 - мой основной / шлюзовой узел. На rpi1 сделал следующее:
systemd-resolved
и созданы вручную /etc/resolv.conf
со значением nameserver 127.0.0.1
dnsmasq
со следующими /etc/dnsmasq.conf
:# 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
/etc/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
?