[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