[pve-devel] [WIP v3 cluster/network/manager/qemu-server 00/22] Add support for DHCP servers to SDN
Stefan Hanreich
s.hanreich at proxmox.com
Tue Nov 14 19:05:58 CET 2023
This patch series adds support for automatically deploying dnsmasq as a DHCP
server to a simple SDN Zone.
This is mostly an update for Alexandre, Stefan and Thomas so we have a
consolidated base for further development of this feature. Code and UI is (very)
rough in some places, but all the planned functionality is now included and
usable via the web UI.
I will be doing some cleanup and refactoring the following days. Additionally,
permissions and validations are still missing and are now top priority on my
TODO list.
Alexandre is still working on the new LXC integration, that should follow
shortly.
You need to install dnsmasq (and disable it afterwards):
apt install dnsmasq && systemctl disable --now dnsmasq
You can use the following example configuration for deploying a DHCP server in
a SDN subnet, you should also be able to recreate this configuration in the
web UI:
/etc/pve/sdn/zones.cfg:
simple: DHCPNAT
ipam pve
dhcp dnsmasq
/etc/pve/sdn/vnets.cfg:
vnet: dhcpnat
zone DHCPNAT
/etc/pve/sdn/subnets.cfg:
subnet: DHCPNAT-10.1.0.0-16
vnet dhcpnat
dhcp-dns-server 10.1.0.1
dhcp-range start-address=10.1.0.100,end-address=10.1.0.200
gateway 10.1.0.1
snat 1
Don't forget to apply the new configuration!
For testing it can be helpful to monitor the following files (e.g. with watch)
to find out what is happening
* /etc/dnsmasq.d/<zone_id>/ethers (on each node)
* /etc/pve/priv/ipam.db
* /etc/pve/priv/macs.db
Changes from v2 -> v3:
* Removed dhcp.cfg, DHCP server now get configured at the zone
* added UI
* added / updated API
* DHCP acquires IPs at vNIC creation instead of VM start
* DHCP releases IPs at vNIC removal instead of VM stop
* improved dnsmasq configuration generation
* added priv/macs.db for caching mac/IP mappings
* refactored IPAM plugins
* updated tests
Changes from v1 -> v2:
* added hooks for handling DHCP when starting / stopping / .. VMs and CTs
* Get an IP from IPAM and register that IP in the DHCP server
(pve only for now)
* remove lease-time, since it is now infinite and managed by the VM lifecycle
* add hooks for setting & deleting DHCP mappings to DHCP plugins
* modified interface of the abstract class to reflect new requirements
* added helpers in existing SDN classes
* simplified DHCP configuration settings
pve-cluster:
Alexandre Derumier (1):
add priv/macs.db
src/PVE/Cluster.pm | 1 +
src/pmxcfs/status.c | 1 +
2 files changed, 2 insertions(+)
pve-network:
Alexandre Derumier (1):
sdn: fix tests
Stefan Hanreich (12):
sdn: preparations for DHCP plugin
subnet: add dhcp options
sdn: zone: add dhcp options
sdn: subnet: vnet: refactor IPAM related methods
ipam: plugins: preparations for DHCP
dhcp: add abstract class for DHCP plugins
sdn: dhcp: add dnsmasq plugin
sdn: dhcp: add helper for creating DHCP leases
api: add IPAM endpoints
api: subnet: add dhcp ranges
api: zone: add dhcp options
dhcp: regenerate config for DHCP servers on reload
debian/control | 1 +
src/PVE/API2/Network/SDN.pm | 6 +
src/PVE/API2/Network/SDN/Ipam.pm | 172 ++++++++++++++++++
src/PVE/API2/Network/SDN/Makefile | 2 +-
src/PVE/API2/Network/SDN/Subnets.pm | 1 +
src/PVE/API2/Network/SDN/Zones.pm | 1 +
src/PVE/Network/SDN.pm | 9 +-
src/PVE/Network/SDN/Dhcp.pm | 115 ++++++++++++
src/PVE/Network/SDN/Dhcp/Dnsmasq.pm | 198 +++++++++++++++++++++
src/PVE/Network/SDN/Dhcp/Makefile | 8 +
src/PVE/Network/SDN/Dhcp/Plugin.pm | 65 +++++++
src/PVE/Network/SDN/Ipams.pm | 80 ++++++++-
src/PVE/Network/SDN/Ipams/NetboxPlugin.pm | 86 ++++++++-
src/PVE/Network/SDN/Ipams/PVEPlugin.pm | 85 ++++++++-
src/PVE/Network/SDN/Ipams/PhpIpamPlugin.pm | 29 +++
src/PVE/Network/SDN/Ipams/Plugin.pm | 19 +-
src/PVE/Network/SDN/Makefile | 3 +-
src/PVE/Network/SDN/SubnetPlugin.pm | 32 +++-
src/PVE/Network/SDN/Subnets.pm | 98 +++++++---
src/PVE/Network/SDN/Vnets.pm | 122 +++++++------
src/PVE/Network/SDN/Zones.pm | 34 +++-
src/PVE/Network/SDN/Zones/SimplePlugin.pm | 7 +-
src/test/run_test_subnets.pl | 8 +-
src/test/run_test_vnets.pl | 4 +-
24 files changed, 1069 insertions(+), 116 deletions(-)
create mode 100644 src/PVE/API2/Network/SDN/Ipam.pm
create mode 100644 src/PVE/Network/SDN/Dhcp.pm
create mode 100644 src/PVE/Network/SDN/Dhcp/Dnsmasq.pm
create mode 100644 src/PVE/Network/SDN/Dhcp/Makefile
create mode 100644 src/PVE/Network/SDN/Dhcp/Plugin.pm
pve-manager:
Stefan Hanreich (4):
sdn: regenerate DHCP config on reload
sdn: add DHCP option to Zone dialogue
sdn: subnet: add panel for editing DHCP ranges
sdn: dhcp: add view for DHCP mappings
PVE/API2/Network.pm | 1 +
www/css/ext6-pve.css | 10 +-
www/manager6/Makefile | 2 +
www/manager6/dc/Config.js | 12 +-
www/manager6/sdn/MappingEdit.js | 65 ++++++++
www/manager6/sdn/SubnetEdit.js | 161 +++++++++++++++++++-
www/manager6/sdn/zones/Base.js | 4 +-
www/manager6/sdn/zones/SimpleEdit.js | 10 ++
www/manager6/tree/DhcpTree.js | 215 +++++++++++++++++++++++++++
9 files changed, 469 insertions(+), 11 deletions(-)
create mode 100644 www/manager6/sdn/MappingEdit.js
create mode 100644 www/manager6/tree/DhcpTree.js
qemu-server:
Alexandre Derumier (4):
vmnic add|remove : add|del ip in ipam
vm_start : vm-network-scripts: get ip from ipam and add dhcp
reservation
api2: create|restore|clone: add_free_ip
vm_destroy: delete ip from ipam && dhcp
PVE/API2/Qemu.pm | 6 +++
PVE/QemuServer.pm | 86 +++++++++++++++++++++++++++++++++++
vm-network-scripts/pve-bridge | 5 ++
3 files changed, 97 insertions(+)
Summary over all repositories:
38 files changed, 1637 insertions(+), 127 deletions(-)
--
murpp v0.4.0
More information about the pve-devel
mailing list