From 223f56a330eb594d3f22458b4ce025ecb46c8e3d Mon Sep 17 00:00:00 2001 From: Timothy Middelkoop Date: Sat, 29 Nov 2025 02:12:19 +0000 Subject: [PATCH] Merge dnsmasq ipv4 and ipv6 files Signed-off-by: Timothy Middelkoop --- overlays/host/internal/host_test.go | 38 ++++------------ overlays/host/internal/warewulf.conf | 1 + .../rootfs/etc/dnsmasq.d/ww4-hosts.conf.ww | 43 +++++++++++++++++-- .../rootfs/etc/dnsmasq.d/ww4-hosts6.conf.ww | 39 ----------------- .../internal/systemd_networkd_test.go | 10 ++++- .../etc/systemd/network/default.network.ww | 4 +- 6 files changed, 60 insertions(+), 75 deletions(-) delete mode 100644 overlays/host/rootfs/etc/dnsmasq.d/ww4-hosts6.conf.ww diff --git a/overlays/host/internal/host_test.go b/overlays/host/internal/host_test.go index 7fd16573..f8a39c68 100644 --- a/overlays/host/internal/host_test.go +++ b/overlays/host/internal/host_test.go @@ -20,7 +20,6 @@ func Test_hostOverlay(t *testing.T) { env.ImportFile("etc/warewulf/nodes.conf", "nodes.conf") env.ImportFile("var/lib/warewulf/overlays/host/rootfs/etc/dhcp/dhcpd.conf.ww", "../rootfs/etc/dhcp/dhcpd.conf.ww") env.ImportFile("var/lib/warewulf/overlays/host/rootfs/etc/dnsmasq.d/ww4-hosts.conf.ww", "../rootfs/etc/dnsmasq.d/ww4-hosts.conf.ww") - env.ImportFile("var/lib/warewulf/overlays/host/rootfs/etc/dnsmasq.d/ww4-hosts6.conf.ww", "../rootfs/etc/dnsmasq.d/ww4-hosts6.conf.ww") env.ImportFile("var/lib/warewulf/overlays/host/rootfs/etc/exports.ww", "../rootfs/etc/exports.ww") env.ImportFile("var/lib/warewulf/overlays/host/rootfs/etc/hosts.ww", "../rootfs/etc/hosts.ww") env.ImportFile("var/lib/warewulf/overlays/host/rootfs/etc/profile.d/ssh_setup.csh.ww", "../rootfs/etc/profile.d/ssh_setup.csh.ww") @@ -54,13 +53,6 @@ func Test_hostOverlay(t *testing.T) { log: host_dnsmasq, header: "", }, - { - name: "host:dnsmasq6", - conf: "warewulf.conf-ipv6", - args: []string{"--render", "host", "host", "etc/dnsmasq.d/ww4-hosts6.conf.ww"}, - log: host_dnsmasq6, - header: "", - }, { name: "host:/etc/exports", conf: "", @@ -274,40 +266,26 @@ dhcp-boot=tag:iPXE,"http://192.168.0.1:9873/ipxe/${mac:hexhyp}?assetkey=${asset} dhcp-no-override # define the the range dhcp-range=192.168.0.100,192.168.0.199,255.255.255.0,6h -dhcp-host=e6:92:39:49:7b:03,set:warewulf,node1,192.168.3.21,infinite -dhcp-host=9a:77:29:73:14:f1,set:warewulf,node1,192.168.3.22,infinite -dhcp-host=e6:92:39:49:7b:04,set:warewulf,node2,192.168.3.23,infinite -` -const host_dnsmasq6 string = `backupFile: false -writeFile: true -Filename: etc/dnsmasq.d/ww4-hosts6.conf -# This file was autgenerated by warewulf - -# enable services +# IPv6 routing announcements enable-ra -enable-tftp -# match archtecture (client-arch=61) +# IPv6 matching (client-arch=61) dhcp-match=set:x86PC,option6:61,0007 # EFI x86-64 dhcp-match=set:aarch64,option6:61,0011 # EFI aarch64 dhcp-vendorclass=set:x86PC,enterprise:343,PXEClient:Arch:00007 # EFI x86-64 dhcp-vendorclass=set:aarch64,enterprise:343,PXEClient:Arch:00011 # EFI aarch64 -# match iPXE -dhcp-userclass=set:iPXE,iPXE - -# send iPXE EFI binary +# IPv6 bootfile-url (iPXE EFI binary) dhcp-option=tag:x86PC,option6:bootfile-url,"tftp://[2001:db8::1]/warewulf/ipxe-snponly-x86_64.efi" dhcp-option=tag:aarch64,option6:bootfile-url,"tftp://[2001:db8::1]/warewulf/snponly.efi" -# iPXE binary will get the following configuration file +# IPv6 iPXE binary will get the following configuration file dhcp-option=tag:iPXE,option6:bootfile-url,"http://[2001:db8::1]:9873/ipxe/${mac:hexhyp}?assetkey=${asset}&uuid=${uuid}" -# DHCP range and entries -dhcp-range=2001:db8::100,2001:db8::0:1FF,6h -dhcp-host=e6:92:39:49:7b:03,set:warewulf,node1,2001:db8::111,infinite -dhcp-host=9a:77:29:73:14:f1,set:warewulf,node1,2001:db8::112,infinite -dhcp-host=e6:92:39:49:7b:04,set:warewulf,node2,2001:db8::121,infinite +# hosts +dhcp-host=e6:92:39:49:7b:03,id:00:03:00:01:e6:92:39:49:7b:03,set:warewulf,192.168.3.21,[2001:db8::111],node1,infinite +dhcp-host=9a:77:29:73:14:f1,id:00:03:00:01:9a:77:29:73:14:f1,set:warewulf,192.168.3.22,[2001:db8::112],node1,infinite +dhcp-host=e6:92:39:49:7b:04,id:00:03:00:01:e6:92:39:49:7b:04,set:warewulf,192.168.3.23,[2001:db8::121],node2,infinite ` const host_exports string = `backupFile: true diff --git a/overlays/host/internal/warewulf.conf b/overlays/host/internal/warewulf.conf index e1fb8850..76fda62d 100644 --- a/overlays/host/internal/warewulf.conf +++ b/overlays/host/internal/warewulf.conf @@ -1,4 +1,5 @@ ipaddr: 192.168.0.1/24 +ipaddr6: 2001:db8::1/64 netmask: 255.255.255.0 network: 192.168.0.0 warewulf: diff --git a/overlays/host/rootfs/etc/dnsmasq.d/ww4-hosts.conf.ww b/overlays/host/rootfs/etc/dnsmasq.d/ww4-hosts.conf.ww index e6b8a3e8..8da1b86e 100644 --- a/overlays/host/rootfs/etc/dnsmasq.d/ww4-hosts.conf.ww +++ b/overlays/host/rootfs/etc/dnsmasq.d/ww4-hosts.conf.ww @@ -34,10 +34,47 @@ tftp-root={{ $.Tftp.TftpRoot }} # define the the range dhcp-range={{$.Dhcp.RangeStart}},{{$.Dhcp.RangeEnd}},{{$.Netmask}},6h {{ end -}} +{{ if and $.Dhcp.Range6Start $.Dhcp.Range6End -}} +dhcp-range={{$.Dhcp.Range6Start}},{{$.Dhcp.Range6End}},6h +{{ end -}} + +{{- if .Ipv6 }} +# IPv6 routing announcements +enable-ra + +# IPv6 matching (client-arch=61) +dhcp-match=set:x86PC,option6:61,0007 # EFI x86-64 +dhcp-match=set:aarch64,option6:61,0011 # EFI aarch64 +dhcp-vendorclass=set:x86PC,enterprise:343,PXEClient:Arch:00007 # EFI x86-64 +dhcp-vendorclass=set:aarch64,enterprise:343,PXEClient:Arch:00011 # EFI aarch64 + +# IPv6 bootfile-url (iPXE EFI binary) +{{ with (index $.Tftp.IpxeBinaries "00:07" ) -}} +dhcp-option=tag:x86PC,option6:bootfile-url,"tftp://[{{$.Ipaddr6}}]/warewulf/{{ index $.Tftp.IpxeBinaries "00:07" }}" +{{ end -}} +{{ with (index $.Tftp.IpxeBinaries "00:0B" ) -}} +dhcp-option=tag:aarch64,option6:bootfile-url,"tftp://[{{$.Ipaddr6}}]/warewulf/{{ index $.Tftp.IpxeBinaries "00:0B" | basename }}" +{{ end -}} + +# IPv6 iPXE binary will get the following configuration file +dhcp-option=tag:iPXE,option6:bootfile-url,"http://[{{$.Ipaddr6}}]:{{$.Warewulf.Port}}/ipxe/${mac:hexhyp}?assetkey=${asset}&uuid=${uuid}" + +{{- end }} + +# hosts {{ range $node := $.AllNodes -}} {{ range $devname, $netdev := $node.NetDevs -}} -{{ if and $netdev.Ipaddr $netdev.Hwaddr -}} -dhcp-host={{$netdev.Hwaddr}},set:warewulf,{{$node.Id}},{{$netdev.Ipaddr}},infinite -{{- end }} +dhcp-host= + {{- if $netdev.Hwaddr -}} + {{$netdev.Hwaddr}},id:00:03:00:01:{{$netdev.Hwaddr}}, + {{- end -}} + set:warewulf, + {{- if $netdev.Ipaddr -}} + {{- $netdev.Ipaddr -}}, + {{- end -}} + {{- if $netdev.Ipaddr6 -}} + [{{$netdev.Ipaddr6}}], + {{- end -}} + {{$node.Id}},infinite {{ end -}} {{ end -}} diff --git a/overlays/host/rootfs/etc/dnsmasq.d/ww4-hosts6.conf.ww b/overlays/host/rootfs/etc/dnsmasq.d/ww4-hosts6.conf.ww deleted file mode 100644 index 76bdd584..00000000 --- a/overlays/host/rootfs/etc/dnsmasq.d/ww4-hosts6.conf.ww +++ /dev/null @@ -1,39 +0,0 @@ -# This file was autgenerated by warewulf -{{ nobackup }} -{{ if .Ipv6 -}} -# enable services -enable-ra -enable-tftp - -# match archtecture (client-arch=61) -dhcp-match=set:x86PC,option6:61,0007 # EFI x86-64 -dhcp-match=set:aarch64,option6:61,0011 # EFI aarch64 -dhcp-vendorclass=set:x86PC,enterprise:343,PXEClient:Arch:00007 # EFI x86-64 -dhcp-vendorclass=set:aarch64,enterprise:343,PXEClient:Arch:00011 # EFI aarch64 - -# match iPXE -dhcp-userclass=set:iPXE,iPXE - -# send iPXE EFI binary -{{ with (index $.Tftp.IpxeBinaries "00:07" ) -}} -dhcp-option=tag:x86PC,option6:bootfile-url,"tftp://[{{$.Ipaddr6}}]/warewulf/{{ index $.Tftp.IpxeBinaries "00:07" }}" -{{ end -}} -{{ with (index $.Tftp.IpxeBinaries "00:0B" ) -}} -dhcp-option=tag:aarch64,option6:bootfile-url,"tftp://[{{$.Ipaddr6}}]/warewulf/{{ index $.Tftp.IpxeBinaries "00:0B" | basename }}" -{{ end -}} - -# iPXE binary will get the following configuration file -dhcp-option=tag:iPXE,option6:bootfile-url,"http://[{{$.Ipaddr6}}]:{{$.Warewulf.Port}}/ipxe/${mac:hexhyp}?assetkey=${asset}&uuid=${uuid}" - -# DHCP range and entries -{{ if and $.Dhcp.Range6Start $.Dhcp.Range6End -}} -dhcp-range={{$.Dhcp.Range6Start}},{{$.Dhcp.Range6End}},6h -{{ end -}} -{{ range $node := $.AllNodes -}} -{{ range $devname, $netdev := $node.NetDevs -}} -{{ if and $netdev.Ipaddr6 $netdev.Hwaddr -}} -dhcp-host={{$netdev.Hwaddr}},set:warewulf,{{$node.Id}},{{$netdev.Ipaddr6}},infinite -{{ end -}} -{{ end -}} -{{ end -}} -{{ end -}} diff --git a/overlays/systemd.networkd/internal/systemd_networkd_test.go b/overlays/systemd.networkd/internal/systemd_networkd_test.go index cc5ae922..70f9e83c 100644 --- a/overlays/systemd.networkd/internal/systemd_networkd_test.go +++ b/overlays/systemd.networkd/internal/systemd_networkd_test.go @@ -69,6 +69,7 @@ MACAddress=e6:92:39:49:7b:03 DHCP=no Address=192.168.3.21/24 Gateway=192.168.3.1 + [Link] MTUBytes=1500 backupFile: true @@ -83,9 +84,11 @@ MACAddress=9a:77:29:73:14:f1 DHCP=no Address=192.168.3.22/24 Gateway=192.168.3.1 +IPv6AcceptRA=no IPv6PrivacyExtensions=false Address=2001:db8::23/64 Gateway=2001:db8::1 + [Link] MTUBytes=9000 @@ -94,7 +97,7 @@ Destination=192.168.1.0/24 Gateway=192.168.3.254 [DHCPv6] -UseAddress=no +DUIDType=link-layer ` const expected_log_without_hwaddr string = `backupFile: true @@ -109,6 +112,7 @@ Name=wwnet0 DHCP=no Address=192.168.3.21/24 Gateway=192.168.3.1 + [Link] MTUBytes=1500 backupFile: true @@ -122,9 +126,11 @@ Name=wwnet1 DHCP=no Address=192.168.3.22/24 Gateway=192.168.3.1 +IPv6AcceptRA=no IPv6PrivacyExtensions=false Address=2001:db8::23/64 Gateway=2001:db8::1 + [Link] MTUBytes=9000 @@ -133,5 +139,5 @@ Destination=192.168.1.0/24 Gateway=192.168.3.254 [DHCPv6] -UseAddress=no +DUIDType=link-layer ` diff --git a/overlays/systemd.networkd/rootfs/etc/systemd/network/default.network.ww b/overlays/systemd.networkd/rootfs/etc/systemd/network/default.network.ww index 8301fa18..ecf6139b 100644 --- a/overlays/systemd.networkd/rootfs/etc/systemd/network/default.network.ww +++ b/overlays/systemd.networkd/rootfs/etc/systemd/network/default.network.ww @@ -20,6 +20,7 @@ Address={{ $netdev.IpCIDR }} Gateway={{ $netdev.Gateway }} {{- end }} {{- if $netdev.IpCIDR6 }} +IPv6AcceptRA=no IPv6PrivacyExtensions=false Address={{ $netdev.IpCIDR6 }} {{- end }} @@ -33,6 +34,7 @@ DNS={{ $tv }} {{- end }} {{- if $netdev.MTU }} + [Link] MTUBytes={{ $netdev.MTU }} {{- end }} @@ -49,7 +51,7 @@ Gateway={{ index $route 1 }} {{- if $netdev.Ipaddr6 }} [DHCPv6] -UseAddress=no +DUIDType=link-layer {{ end -}} {{ end -}}