From 07eee48a6aa61dcbb34a3b49235da413297ed48c Mon Sep 17 00:00:00 2001 From: Timothy Middelkoop Date: Mon, 17 Nov 2025 18:03:05 +0000 Subject: [PATCH] Add IPv6 support for dnsmasq Signed-off-by: Timothy Middelkoop --- CHANGELOG.md | 1 + overlays/host/internal/host_test.go | 22 +++++++++++++++++++ overlays/host/internal/nodes.conf | 3 +++ overlays/host/internal/warewulf.conf-ipv6 | 5 +++++ .../rootfs/etc/dnsmasq.d/ww4-hosts6.conf.ww | 13 +++++++++++ 5 files changed, 44 insertions(+) create mode 100644 overlays/host/internal/warewulf.conf-ipv6 create mode 100644 overlays/host/rootfs/etc/dnsmasq.d/ww4-hosts6.conf.ww diff --git a/CHANGELOG.md b/CHANGELOG.md index b3fed7ff..989a27d8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Use opencontainers/selinux to manage SELinux in wwclient. - Replace unused/unneeded IPv6net with IpCIDR6 to align with IPv4 - Add IPv6 DHCP range +- Add IPv6 functionality for dnsmasq ### Fixed diff --git a/overlays/host/internal/host_test.go b/overlays/host/internal/host_test.go index 273fd5d4..c48a3df9 100644 --- a/overlays/host/internal/host_test.go +++ b/overlays/host/internal/host_test.go @@ -20,6 +20,7 @@ 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") @@ -53,6 +54,13 @@ 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: "", @@ -271,6 +279,20 @@ 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 + +dhcp-range=2001:db8::100,2001:db8::0:1FF,slaac,6h +dhcp-option=option6:bootfile-url,tftp://[2001:db8::1]/ +dhcp-option=option6:ntp-server,[2001:db8::1] + +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 +` + const host_exports string = `backupFile: true writeFile: true Filename: etc/exports diff --git a/overlays/host/internal/nodes.conf b/overlays/host/internal/nodes.conf index 3b286313..a5d99ffc 100644 --- a/overlays/host/internal/nodes.conf +++ b/overlays/host/internal/nodes.conf @@ -5,13 +5,16 @@ nodes: device: wwnet0 hwaddr: e6:92:39:49:7b:03 ipaddr: 192.168.3.21 + ip6addr: 2001:db8::111 secondary: device: wwnet1 hwaddr: 9a:77:29:73:14:f1 ipaddr: 192.168.3.22 + ip6addr: 2001:db8::112 node2: network devices: default: device: wwnet0 hwaddr: e6:92:39:49:7b:04 ipaddr: 192.168.3.23 + ip6addr: 2001:db8::121 diff --git a/overlays/host/internal/warewulf.conf-ipv6 b/overlays/host/internal/warewulf.conf-ipv6 new file mode 100644 index 00000000..3f6e1232 --- /dev/null +++ b/overlays/host/internal/warewulf.conf-ipv6 @@ -0,0 +1,5 @@ +ipaddr6: 2001:db8::1/64 +dhcp: + enabled: true + range6 start: 2001:db8::100 + range6 end: 2001:db8::0:1FF diff --git a/overlays/host/rootfs/etc/dnsmasq.d/ww4-hosts6.conf.ww b/overlays/host/rootfs/etc/dnsmasq.d/ww4-hosts6.conf.ww new file mode 100644 index 00000000..084041a5 --- /dev/null +++ b/overlays/host/rootfs/etc/dnsmasq.d/ww4-hosts6.conf.ww @@ -0,0 +1,13 @@ +# This file was autgenerated by warewulf +{{ nobackup }} +dhcp-range={{$.Dhcp.Range6Start}},{{$.Dhcp.Range6End}},slaac,6h +dhcp-option=option6:bootfile-url,tftp://[{{$.Ipaddr6}}]/ +dhcp-option=option6:ntp-server,[{{$.Ipaddr6}}] + +{{ 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 -}}