public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: "DERUMIER, Alexandre" <alexandre.derumier@groupe-cyllene.com>
To: "pve-devel@lists.proxmox.com" <pve-devel@lists.proxmox.com>
Subject: Re: [pve-devel] [WIP v2 cluster/network/manager/qemu-server/container 00/10] Add support for DHCP servers to SDN
Date: Tue, 17 Oct 2023 14:48:09 +0000	[thread overview]
Message-ID: <160a8e8ddfa2ae6b1213543d11e1df521753d1de.camel@groupe-cyllene.com> (raw)
In-Reply-To: <20231017135507.2220948-1-s.hanreich@proxmox.com>

Hi Stefan,

Thanks for sharing !

I'll try to deeply test it this week or next week.

Maybe try to see if we can use pve ipam as cache in front of external
ipam.



-------- Message initial --------
De: Stefan Hanreich <s.hanreich@proxmox.com>
Répondre à: Proxmox VE development discussion <pve-
devel@lists.proxmox.com>
À: pve-devel@lists.proxmox.com
Objet: [pve-devel] [WIP v2 cluster/network/manager/qemu-
server/container 00/10] Add support for DHCP servers to SDN
Date: 17/10/2023 15:54:57

This is a WIP patch series, since I will be gone for 3 weeks and wanted
to
share my current progress with the DHCP support for SDN.

This patch series adds support for automatically deploying dnsmasq as a
DHCP
server to a simple SDN Zone.

While certainly not 100% polished on some ends (looking at restarting
systemd
services in particular), the general idea behind the mechanism shows. I
wanted
to gather some feedback on how I approached designing the plugins and
the
config regeneration process before comitting to this design by creating
an API
and UI around it.

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:

/etc/pve/sdn/dhcp.cfg:

  dnsmasq: nat


/etc/pve/sdn/zones.cfg:

  simple: DHCPNAT
          ipam pve


/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 server=nat,start-address=10.1.0.100,end-
address=10.1.0.200
          gateway 10.1.0.1
          snat 1


Then apply the SDN configuration:

  pvesh set /cluster/sdn

You need to apply the SDN configuration once after adding the dhcp-
range lines
to the configuration, since the running configuration is used for
managing
DHCP. It will not work otherwise!

For testing it can be helpful to monitor the following files (e.g. with
watch)
to find out what is happening
  * /etc/dnsmasq.d/<dhcp_id>/ethers (on each node)
  * /etc/pve/priv/ipam.db

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:

Stefan Hanreich (1):
  cluster files: add dhcp.cfg

 src/PVE/Cluster.pm  | 1 +
 src/pmxcfs/status.c | 1 +
 2 files changed, 2 insertions(+)


pve-network:

Stefan Hanreich (6):
  subnets: vnets: preparations for DHCP plugins
  dhcp: add abstract class for DHCP plugins
  dhcp: subnet: add DHCP options to subnet configuration
  dhcp: add DHCP plugin for dnsmasq
  ipam: Add helper methods for DHCP to PVE IPAM
  dhcp: regenerate config for DHCP servers on reload

 debian/control                         |   1 +
 src/PVE/Network/SDN.pm                 |  11 +-
 src/PVE/Network/SDN/Dhcp.pm            | 192 +++++++++++++++++++++++++
 src/PVE/Network/SDN/Dhcp/Dnsmasq.pm    | 186 ++++++++++++++++++++++++
 src/PVE/Network/SDN/Dhcp/Makefile      |   8 ++
 src/PVE/Network/SDN/Dhcp/Plugin.pm     |  83 +++++++++++
 src/PVE/Network/SDN/Ipams/PVEPlugin.pm |  64 +++++++++
 src/PVE/Network/SDN/Makefile           |   3 +-
 src/PVE/Network/SDN/SubnetPlugin.pm    |  32 +++++
 src/PVE/Network/SDN/Subnets.pm         |  43 ++++--
 src/PVE/Network/SDN/Vnets.pm           |  27 ++--
 11 files changed, 622 insertions(+), 28 deletions(-)
 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 (1):
  sdn: regenerate DHCP config on reload

 PVE/API2/Network.pm | 1 +
 1 file changed, 1 insertion(+)


qemu-server:

Stefan Hanreich (1):
  sdn: dhcp: add DHCP setup to vm-network-scripts

 PVE/QemuServer.pm                 | 14 ++++++++++++++
 vm-network-scripts/pve-bridge     |  3 +++
 vm-network-scripts/pve-bridgedown | 19 +++++++++++++++++++
 3 files changed, 36 insertions(+)


pve-container:

Stefan Hanreich (1):
  sdn: dhcp: setup DHCP mappings in LXC hooks

 src/PVE/LXC.pm            | 10 ++++++++++
 src/lxc-pve-poststop-hook |  1 +
 src/lxc-pve-prestart-hook |  9 +++++++++
 3 files changed, 20 insertions(+)


Summary over all repositories:
  20 files changed, 681 insertions(+), 28 deletions(-)



  parent reply	other threads:[~2023-10-17 14:48 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-17 13:54 Stefan Hanreich
2023-10-17 13:54 ` [pve-devel] [WIP v2 pve-cluster 01/10] cluster files: add dhcp.cfg Stefan Hanreich
2023-10-17 13:54 ` [pve-devel] [WIP v2 pve-network 02/10] subnets: vnets: preparations for DHCP plugins Stefan Hanreich
2023-10-17 13:55 ` [pve-devel] [WIP v2 pve-network 03/10] dhcp: add abstract class " Stefan Hanreich
2023-10-17 13:55 ` [pve-devel] [WIP v2 pve-network 04/10] dhcp: subnet: add DHCP options to subnet configuration Stefan Hanreich
2023-10-17 13:55 ` [pve-devel] [WIP v2 pve-network 05/10] dhcp: add DHCP plugin for dnsmasq Stefan Hanreich
2023-10-18 10:13   ` DERUMIER, Alexandre
2023-11-08 17:18   ` DERUMIER, Alexandre
2023-11-09  8:45     ` Stefan Hanreich
2023-10-17 13:55 ` [pve-devel] [WIP v2 pve-network 06/10] ipam: Add helper methods for DHCP to PVE IPAM Stefan Hanreich
2023-10-27 11:51   ` Stefan Lendl
2023-10-17 13:55 ` [pve-devel] [WIP v2 pve-network 07/10] dhcp: regenerate config for DHCP servers on reload Stefan Hanreich
2023-10-17 13:55 ` [pve-devel] [WIP v2 pve-manager 08/10] sdn: regenerate DHCP config " Stefan Hanreich
2023-10-17 13:55 ` [pve-devel] [WIP v2 qemu-server 09/10] sdn: dhcp: add DHCP setup to vm-network-scripts Stefan Hanreich
2023-10-17 13:55 ` [pve-devel] [WIP v2 pve-container 10/10] sdn: dhcp: setup DHCP mappings in LXC hooks Stefan Hanreich
2023-10-17 14:48 ` DERUMIER, Alexandre [this message]
2023-10-17 16:05   ` [pve-devel] [WIP v2 cluster/network/manager/qemu-server/container 00/10] Add support for DHCP servers to SDN Stefan Hanreich
2023-10-17 21:00     ` DERUMIER, Alexandre
2023-10-17 16:04 ` Stefan Hanreich
2023-10-18  9:59   ` DERUMIER, Alexandre
2023-10-23 12:40 ` Stefan Lendl
2023-10-27  7:39   ` Thomas Lamprecht
2023-10-27 12:26     ` Stefan Lendl
2023-10-27 12:36     ` DERUMIER, Alexandre
2023-10-27 11:19   ` [pve-devel] [RFC SDN DHCP] Add and Remove DHCP mappings on vNIC add/remove Stefan Lendl
2023-10-27 11:20   ` Stefan Lendl
2023-10-27 11:20     ` [pve-devel] [RFC pve-network 1/3] dhcp add ip returns IP if already present for MAC Stefan Lendl
2023-10-27 11:20     ` [pve-devel] [RFC pve-network 2/3] always generate dnsmasq ethers file Stefan Lendl
2023-10-27 11:20     ` [pve-devel] [RFC pve-network 3/3] touch the ethers file when creating the dnsmasq config Stefan Lendl
2023-10-27 11:20     ` [pve-devel] [RFC pve-network] do not remove DHCP mapping on stop Stefan Lendl
2023-11-08 14:32       ` DERUMIER, Alexandre
2023-11-08 14:38         ` Stefan Hanreich
2023-11-08 15:41           ` DERUMIER, Alexandre
2023-10-27 11:20     ` [pve-devel] [RFC pve-network 4/5] do not remove DHCP mapping on VM stop Stefan Lendl
2023-10-27 11:20     ` [pve-devel] [RFC pve-network 5/5] DHCP mappings on vNIC add/remove Stefan Lendl
2023-10-27 11:29   ` [pve-devel] [RFC SDN DHCP] Add and Remove " Stefan Lendl
2023-10-27 11:29     ` [pve-devel] [RFC pve-network 1/6] dhcp add ip returns IP if already present for MAC Stefan Lendl
2023-10-27 11:29     ` [pve-devel] [RFC pve-network 2/6] always generate dnsmasq ethers file Stefan Lendl
2023-11-08 16:44       ` DERUMIER, Alexandre
2023-10-27 11:29     ` [pve-devel] [RFC pve-network 3/6] touch the ethers file when creating the dnsmasq config Stefan Lendl
2023-10-27 11:29     ` [pve-devel] [RFC pve-container 4/6] do not remove DHCP mapping on stop Stefan Lendl
2023-10-27 11:29     ` [pve-devel] [RFC qemu-server 5/6] do not remove DHCP mapping on VM stop Stefan Lendl
2023-10-27 11:30     ` [pve-devel] [RFC qemu-server 6/6] DHCP mappings on vNIC add/remove Stefan Lendl
2023-11-08 16:46       ` DERUMIER, Alexandre
2023-10-27 11:52     ` [pve-devel] [RFC SDN DHCP] Add and Remove " Thomas Lamprecht
2023-10-27 11:54       ` Stefan Lendl
2023-10-27 11:59         ` Thomas Lamprecht
2023-10-27 11:57       ` Thomas Lamprecht
2023-10-27 12:53   ` [pve-devel] [WIP v2 cluster/network/manager/qemu-server/container 00/10] Add support for DHCP servers to SDN Stefan Lendl
2023-10-27 13:37     ` DERUMIER, Alexandre
2023-10-23 10:27 Stefan Lendl
2023-10-23 12:52 ` Stefan Lendl
2023-10-26 12:49 ` DERUMIER, Alexandre
2023-10-26 12:53 ` DERUMIER, Alexandre

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=160a8e8ddfa2ae6b1213543d11e1df521753d1de.camel@groupe-cyllene.com \
    --to=alexandre.derumier@groupe-cyllene.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal