Se eu entendi esse "problema" (o servidor DHCP systemd-networkd ignora SendOptions #15780) , o SystemD pode ser configurado para lidar com a inicialização da rede. No entanto, não consigo encontrar mais informações sobre essa funcionalidade.
Atualmente estou usando um servidor DHCPD com configuração mínima, por que seria bom se ele pudesse ser movido para systemd-networkd
, que lida com todas as outras funcionalidades de rede em meu ambiente.
# /etc/dhcpd.conf
allow booting; # How is this defined in systemd-networkd?
allow bootp; # How is this defined in systemd-networkd?
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative; # How is this defined in systemd-networkd?
option architecture code 93 = unsigned integer 16; # I think this corresponds to SendOption=93:uint16:architecture
host client_computer {
hardware ethernet a1:b2:c3:d4:e5:f6; # This should be captured with [Match] MACAddress=a1:b2:c3:d4:e5:f6
fixed-address 192.168.1.101; # I think this corresponds to something like SendOption=???:ipv4address:192.168.1.101
next-server 192.168.1.100; # This should be defines as [Network] Address?
option host-name "clientname"; # I think this corresponds to something like SendOption=12:string:clientname
option root-path "/srv/tftp"; # I think this corresponds to something like SendOption=17:string:/srv/tftp
if option architecture = 00:07 {
filename "grub/x86_64-efi/core.efi"; # I think this corresponds to SendOption=67:string:grub/x86_64-efi/core.efi
}
else {
filename "grub/i396-pc/core.0"; # I think this corresponds to SendOption=67:string:grub/i396-pc/core.0
}
}
Parece que preciso dos códigos de "opção", mas onde posso encontrá-los? Existe uma especificação? -- Encontrei-os :)
A documentação do SystemD NetworkD .
O que tenho até agora:
#allow booting; = ? # Not necessary?
#allow bootp; = ? # Not necessary?
#authoritative; = ? # Not necessary?
[Match]
MACAddress=a1:b2:c3:d4:e5:f6
[Network]
DHCP=no
DHCPServer=true
Address=192.168.1.100/24 # DHCP server IP
[DHCPv4]
ClientIdentifier=mac
[DHCPServer]
PoolOffset=3
PoolSize=7
BootServerAddress=192.168.1.100/24
#SendOption=93:uint16:architecture # Failed to parse DHCP uint16 data, ignoring assignment: architecture # Not necessary?
#SendOption=???:ipv4address:192.168.1.101
SendOption=12:string:clientname # 12 "Hostname"
SendOption=17:string:/srv/tftp # 17 "Root Path"
# BootFilename=grub/i396-pc/core.0 # Sane as code 67
# SendOption=67:string:grub/x86_64-efi/core.efi
SendOption=67:string:grub/i396-pc/core.0
[DHCPServerStaticLease]
MACAddress=a1:b2:c3:d4:e5:f6
Address=192.168.1.101
Atualização nº 1
Usando tcpdump -i <INTERFACE> -nn -s0 -v -A udp port 67
posso ver que o servidor SystemD NetworkD DCHP está interagindo com o cliente!
No entanto, o sistema não inicializa e o problema parece ser que o endereço IP estático esperado não está atribuído ao cliente.
A [DHCPServerStaticLease]
seção não parece surtir efeito. Encontrei algo sobre um bug em systemctl --version
<= 253 e adicionei a solução alternativa ClientIdentifier=mac
. No entanto, não deve ser necessário, pois estou executando a versão 255.
Ah, e adicionei os Pool*
parâmetros, mas o servidor DHCP ainda atribui o mesmo IP (192.168.1.242).
A resposta é sim! A seguinte configuração funcionou para mim.
Pegadinhas
networkctl reload
depois de alterar a configuraçãoAddress=192.168.1.100/24 # My Server