IP Adressen automatisch der VM zuweisen

Pitbull

Active Member
Mar 21, 2017
18
3
43
41
Guten Morgen zusammen,

Ich würde gerne wissen ob es die Möglichkeit gibt mit einzelnen IP Adressen und kein Subnetz die IP per DHCP zuzuweisen, ist das über Haupt möglich wenn ja wie würdet ihr es realisieren?

Vielen Dank im voraus

Nach dem ich alles hinbekommen habe und ich per PN anfragen bekommen hatte für eine Anleitung stelle ich es doch gerne der Öffentlichkeit zur Verfügung.

IPV4

apt install isc-dhcp-server

/etc/network/Interfaces

Code:
# network interface settings; autogenerated
# Please do NOT modify this file directly, unless you know what
# you're doing.
#
# If you want to manage part of the network configuration manually,
# please utilize the 'source' or 'source-directory' directives to do
# so.
# PVE will preserve these directives, but will NOT its network
# configuration from sourced files, so do not attempt to move any of
# the PVE managed interfaces into external files!
auto lo
iface lo inet loopback
auto enp6s0
iface enp6s0 inet static
    address  Haupt IP
    netmask  Haupt Netmaks
    pointopoint  Haupt Gateway
    gateway  Haupt Gateway
auto vmbr0
iface vmbr0 inet static
    address  2te IP aus Subnet
    netmask  Netmaks aus Subnet
    bridge_ports none
    bridge_stp off
    bridge_fd 0

/etc/dhcp/dhcpd.conf

Code:
# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#
# option definitions common to all supported networks...
option domain-name "lan";
option domain-name-servers 213.133.98.98, 213.133.99.99, 213.133.100.100;
default-lease-time -1;
max-lease-time -1;
# The ddns-updates-style parameter controls whether or not the server will
# attempt to do a DNS update when a lease is confirmed. We default to the
# behavior of the version 2 packages ('none', since DHCP v2 didn't
# have support for DDNS.)
ddns-update-style none;
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;
# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;
# No service will be given on this subnet, but declaring it helps the
# DHCP server to understand the network topology.
#subnet 10.152.187.0 netmask 255.255.255.0 {
#}
# This is a very basic subnet declaration.
#subnet 10.254.239.0 netmask 255.255.255.224 {
#  range 10.254.239.10 10.254.239.20;
#  option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
#}
# This declaration allows BOOTP clients to get dynamic addresses,
# which we don't really recommend.
#subnet 10.254.239.32 netmask 255.255.255.224 {
#  range dynamic-bootp 10.254.239.40 10.254.239.60;
#  option broadcast-address 10.254.239.31;
#  option routers rtr-239-32-1.example.org;
#}
# A slightly different configuration for an internal subnet.
#subnet 10.5.5.0 netmask 255.255.255.224 {
#  range 10.5.5.26 10.5.5.30;
#  option domain-name-servers ns1.internal.example.org;
#  option domain-name "internal.example.org";
#  option routers 10.5.5.1;
#  option broadcast-address 10.5.5.31;
#  default-lease-time 600;
#  max-lease-time 7200;
#}
# Hosts which require special configuration options can be listed in
# host statements.   If no address is specified, the address will be
# allocated dynamically (if possible), but the host-specific information
# will still come from the host declaration.
#host passacaglia {
#  hardware ethernet 0:0:c0:5d:bd:95;
#  filename "vmunix.passacaglia";
#  server-name "toccata.example.com";
#}
# Fixed IP addresses can also be specified for hosts.   These addresses
# should not also be listed as being available for dynamic assignment.
# Hosts for which fixed IP addresses have been specified can boot using
# BOOTP or DHCP.   Hosts for which no fixed address is specified can only
# be booted with DHCP, unless there is an address range on the subnet
# to which a BOOTP client is connected which has the dynamic-bootp flag
# set.
#host fantasia {
#  hardware ethernet 08:00:07:26:c0:a5;
#  fixed-address fantasia.example.com;
#}
# You can declare a class of clients and then do address allocation
# based on that.   The example below shows a case where all clients
# in a certain class get addresses on the 10.17.224/24 subnet, and all
# other clients get addresses on the 10.0.29/24 subnet.
#class "foo" {
#  match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
#}
#shared-network 224-29 {
#  subnet 10.17.224.0 netmask 255.255.255.0 {
#    option routers rtr-224.example.org;
#  }
#  subnet 10.0.29.0 netmask 255.255.255.0 {
#    option routers rtr-29.example.org;
#  }
#  pool {
#    allow members of "foo";
#    range 10.17.224.10 10.17.224.250;
#  }
#  pool {
#    deny members of "foo";
#    range 10.0.29.10 10.0.29.230;
#  }
#}
subnet 1st IP aus Subnet netmask Netmask aus Subnet {
    option subnet-mask Netmask aus Subnet;
    option broadcast-address Letzte IP aus Subnet;
    option routers 2te IP aus Subnet;
    range 2te IP aus Subnet Vorletzte IP aus Subnet;
    interface vmbr0;
}

/etc/default/isc-dhcp-server

Code:
# Defaults for isc-dhcp-server (sourced by /etc/init.d/isc-dhcp-server)

# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
#DHCPDv4_CONF=/etc/dhcp/dhcpd.conf
#DHCPDv6_CONF=/etc/dhcp/dhcpd6.conf

# Path to dhcpd's PID file (default: /var/run/dhcpd.pid).
#DHCPDv4_PID=/var/run/dhcpd.pid
#DHCPDv6_PID=/var/run/dhcpd6.pid

# Additional options to start dhcpd with.
#    Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead
#OPTIONS=""

# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#    Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACESv4="vmbr0"
INTERFACESv6="vmbr0"

Erklärung:
Die Installation erfolgte mit einem /29 Subnetz 3 IP Adressen gehen leider verloren aber es Funktioniert mit KVM und LXC.

Wichtig:
default-lease-time -1;
max-lease-time -1;

Würden diese Einträge nicht vorhanden sein würde der DHCP Server nach gewisser Zeit der VM eine neue IP zuweisen.

IPV6:

apt install radvd

/etc/dhcp/dhcpd6.conf

Code:
# Server configuration file example for DHCPv6
# From the file used for TAHI tests - addresses chosen
# to match TAHI rather than example block.

# IPv6 address valid lifetime
#  (at the end the address is no longer usable by the client)
#  (set to 30 days, the usual IPv6 default)
default-lease-time -1;

# IPv6 address preferred lifetime
#  (at the end the address is deprecated, i.e., the client should use
#   other addresses for new connections)
#  (set to 7 days, the    usual IPv6 default)
preferred-lifetime 604800;

# T1, the delay before Renew
#  (default is 1/2 preferred lifetime)
#  (set to 1 hour)
option dhcp-renewal-time 3600;

# T2, the delay before Rebind (if Renews failed)
#  (default is 3/4 preferred lifetime)
#  (set to 2 hours)
option dhcp-rebinding-time 7200;

# Enable RFC 5007 support (same than for DHCPv4)
allow leasequery;

# Global definitions for name server address(es) and domain search list
option dhcp6.name-servers 2001:4860:4860::8888, 2001:4860:4860::8844; # google

option dhcp6.domain-search "test.example.com","example.com";

# Set preference to 255 (maximum) in order to avoid waiting for
# additional servers when there is only one
##option dhcp6.preference 255;

# Server side command to enable rapid-commit (2 packet exchange)
##option dhcp6.rapid-commit;

# The delay before information-request refresh
#  (minimum is 10 minutes, maximum one day, default is to not refresh)
#  (set to 6 hours)
option dhcp6.info-refresh-time 21600;

# Static definition (must be global)
#host myclient {
#    # The entry is looked up by this
#    host-identifier option
#        dhcp6.client-id 00:01:00:01:00:04:93:e0:00:00:00:00:a2:a2;
#
#    # A fixed address
#    fixed-address6 3ffe:501:ffff:100::1234;
#
#    # A fixed prefix
#    fixed-prefix6 3ffe:501:ffff:101::/64;
#
#    # Override of the global definitions,
#    # works only when a resource (address or prefix) is assigned
#    option dhcp6.name-servers 3ffe:501:ffff:100:200:ff:fe00:4f4e;
#
#    # For debug (to see when the entry statements are executed)
#    #  (log "sol" when a matching Solicitation is received)
#    ##if packet(0,1) = 1 { log(debug,"sol"); }
#}
#
#host otherclient {
#        # This host entry is hopefully matched if the client supplies a DUID-LL
#        # or DUID-LLT containing this MAC address.
#        hardware ethernet 01:00:80:a2:55:67;
#
#        fixed-address6 3ffe:501:ffff:100::4321;
#}

# The subnet where the server is attached
#  (i.e., the server has an address in this subnet)
#subnet6 3ffe:501:ffff:100::/64 {
#    # Two addresses available to clients
#    #  (the third client should get NoAddrsAvail)
#    range6 3ffe:501:ffff:100::10 3ffe:501:ffff:100::11;
#
#    # Use the whole /64 prefix for temporary addresses
#    #  (i.e., direct application of RFC 4941)
#    range6 3ffe:501:ffff:100:: temporary;
#
#    # Some /64 prefixes available for Prefix Delegation (RFC 3633)
#    prefix6 3ffe:501:ffff:100:: 3ffe:501:ffff:111:: /64;
#}

# A second subnet behind a relay agent
#subnet6 3ffe:501:ffff:101::/64 {
#    range6 3ffe:501:ffff:101::10 3ffe:501:ffff:101::11;
#
#    # Override of the global definitions,
#    # works only when a resource (address or prefix) is assigned
#    option dhcp6.name-servers 3ffe:501:ffff:101:200:ff:fe00:3f3e;
#
#}

# A third subnet behind a relay agent chain
#subnet6 3ffe:501:ffff:102::/64 {
#    range6 3ffe:501:ffff:102::10 3ffe:501:ffff:102::11;
#}
subnet6 IPV6/64 {
    range6 IPV6/1 IPV6/2;
}

nano /etc/radvd.conf

Code:
#
# NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE 
# NOTE                                                             NOTE
# NOTE  This is an EXAMPLE, which serves only to demonstrate the   NOTE
# NOTE  syntax of radvd.conf, and is not meant to be used for a    NOTE
# NOTE  real radvd configuration.                                  NOTE
# NOTE                                                             NOTE
# NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE 
#

interface vmbr0
{
    AdvSendAdvert on;

# This may be needed on some interfaces which are not active when
# radvd starts, but become available later on; see man page for details.
#
#    # IgnoreIfMissing on;
#
#
# These settings cause advertisements to be sent every 3-10 seconds.  This
# range is good for 6to4 with a dynamic IPv4 address, but can be greatly
# increased when not using 6to4 prefixes.
#
#
#    MinRtrAdvInterval 3;
#    MaxRtrAdvInterval 10;
#
#
# You can use AdvDefaultPreference setting to advertise the preference of
# the router for the purposes of default router determination.
# NOTE: This feature is still being specified and is not widely supported!
#
#    AdvDefaultPreference low;
#
#
# Disable Mobile IPv6 support
#
#    AdvHomeAgentFlag off;
#
#
# example of a standard prefix
#
    prefix SUBNETZ/64
    {
        AdvOnLink on;
        AdvAutonomous on;
        AdvRouterAddr off;
    };

#
# example of a 6to4 prefix
#
# Note that the first 48 bits are specified here as zeros.  These will be
# replaced with the appropriate 6to4 address when radvd starts or is
# reconfigured. Be sure that the SLA ID (1234 in this case) is specified
# here!
#
#    prefix 0:0:0:1234::/64
#    {
#        AdvOnLink on;
#        AdvAutonomous on;
#        AdvRouterAddr off;
#
#
# This setting causes radvd to replace the first 48 bits of the prefix
# with the 6to4 address generated from the specified interface.  For example,
# if the address of ppp0 is 192.0.2.25 when radvd configures itself, this
# prefix will be advertised as 2002:C000:0219:1234::/64.
#
# If ppp0 is not available at configuration time, this prefix will not be
# advertised, but other prefixes listed in the configuration will be
# advertised as usual.
#
# When using the Base6to4Interface option, make sure radvd receives a
# SIGHUP every time the ppp0 interface goes up, down, or is assigned a
# new IPv4 address.  The SIGHUP will cause radvd to recognize that the
# ppp0 interface has changed and will adjust the advertisements
# accordingly.
#
#
#        Base6to4Interface ppp0;
#
#
# If the IP address of ppp0 is assigned dynamically, be sure to set the
# lifetimes for this prefix to be small.  Otherwise, hosts on your network
# may continue to use a prefix that no longer corresponds to the address
# on ppp0!
#
#        AdvPreferredLifetime 120;
#        AdvValidLifetime 300;
#    };
#
# example of a more specific route
# NOTE: This feature is not very widely supported! You may also need to
# enable it manually (e.g. on Linux, change the value of
# sysctl accept_ra_rt_info_max_plen to 48 or 64)
#
#    route 2001:db0:fff::/48
#    {
#        AdvRoutePreference high;
#        AdvRouteLifetime 3600;
#    };
#
#
# RDNSS
# NOTE: This feature is not very widely implemented.
#
        RDNSS 2001:4860:4860::8888 
          2001:4860:4860::8844
        {
                AdvRDNSSLifetime 30;
        };

#
# DNS Search Lists
#
#        DNSSL branch.example.com example.com
#        {
#                AdvDNSSLLifetime 30;
#        };
#
#
};

sudo service radvd start
sudo service isc-dhcp-server6 start
 
Last edited:
Was genau hast du denn vor? Du kannst im DHCP Reservierungen setzen, man kann auch über scripte die MACs der neu gebauten VMs direkt in eine Reservierung auf dem DHCP eintragen.
 
IP Adressen funktionieren IMMER nur in Verbindung mit einer Subnetzmaske. Kein Gerät kann eine IP Adresse "haben" ohne dem Gerät mitzuteilen, wie die Subnetzmaske aussieht. Die Subnetzmaske ist der Schlüssel um aus der IP Adresse Netzadresse und Geräte Adresse zu ermitteln. Ohne funktioniert das nicht.
Also: Nein, sowas funktioniert nicht.
 
IP Adressen funktionieren IMMER nur in Verbindung mit einer Subnetzmaske. Kein Gerät kann eine IP Adresse "haben" ohne dem Gerät mitzuteilen, wie die Subnetzmaske aussieht. Die Subnetzmaske ist der Schlüssel um aus der IP Adresse Netzadresse und Geräte Adresse zu ermitteln. Ohne funktioniert das nicht.
Also: Nein, sowas funktioniert nicht.
Du hast jetzt Subnetzmaske mit Subnetz vermischt. Ich vermute er möchte nicht einen ganzen Range einer VM zuteilen, wo die eventuell mal eine andere IP bekommt.
 
Äh ja... Okay. Dann ergibt das tatsächlich etwas mehr Sinn :rolleyes: :p

Also um einer VM immer die gleiche IP Adresse zuzuweisen, so dass die IP nicht immer mal wieder zufällig eine Andere aus dem Subnetz ist, sollte man Reservierungen anlegen. Wie das funktioniert hängt vom verwendeten DHCP Server ab.

In 'ner Fritzbox z.B. klickt man dazu in der GUI beim entsprechenden Gerät die Option "Diesem Gerät immer die gleiche Adresse zuweisen" an.

Beim ISC DHCP Server unter Linux gibt es die Möglichkeit, dies über einen host eintrag zu erreichen:
Code:
host <hostname> {
    hardware ethernet <MAC Adresse des Hosts>; #Format: 00:0a:1b:2c:3d:4e
    fixed-address <fest zugewiesene IP Adresse>;
}
Die IP Adresse MUSS in einem Subnetz liegen, das im DHCP Server definiert ist. Gibt man eine IP an, für die kein Subnetz definiert ist, gibts einen Fehler.
 
Last edited:
Guten Abend,

Ich hatte vorher bei Hetzner ein /29 Subnetz das mit isc dhscp und radvd Konfiguriertwar, nach anlegen einer vm oder ct wurde automatisch über dhcp die IP Adressen vergeben.

Jetzt bin ich bei einem anderen Hoster und dort habe ich kein Subnetz sondern nur 10 Einzelne IP Adressen ohne MAC Adresse, jetzt würde ich es gerne so Konfigurieren wie es vorher so mit dem Subnetz war.

LG
 
OK, hast du 10 aufeinanderfolgende IPs? Wenn ja, dann kannst du den scope deines DHCP auf den Bereich beschränken. Wenn es 10 nicht zusammenhängende IPs sind, dann entweder mit exclusions arbeiten oder einzelne Bereiche im DHCP anlegen.
 
Nein Leider nicht sondern einmal 4 aufeinanderfolgende dann nochmal 5 aufeinanderfolgende und eine einzelne
 
Hast du schon einmal einen DHCP eingerichtet? Dann müsste dir ja aufgefallen sein, wie man einen Range anlegt.
Wenn du z.B. 20-24, 30-35 und 40 hast, machst du einen Range von 20-40 und exclusions 25-29 und 36-39
 
Ja habe ich aber nur mit einem /29 Subnetz aktuell habe ich nur 10 Einzelne IP Adressen die sind wie folg:

XXX.XXX.X.70/32
XXX.XXX.X.71/32
XXX.XXX.X.72/32
XXX.XXX.X.73/32
XXX.XXX.X.74/32
XXX.XXX.X.11X/32
XXX.XXX.X.120/32
XXX.XXX.X.121/32
XXX.XXX.X.122/32
XXX.XXX.X.123/32

Damals war meine Funktionierende Konfiguration diese hier:

subnet XXX.X.XXX.32 netmask 255.255.255.248 {
range XXX.X.XXX.33 XXX.X.XXX.38;
option subnet-mask 255.255.255.248;
option routers XXX.X.XXX.33;
option broadcast-address XXX.X.XXX.3X;
interface vmbr0;
}

evtl. kannst du mir ja ein Denkanstoß geben denn wenn ich 2 range wie hier von machen würde ich 6 IP Adressen verlieren richtig ?
 
Ich weiß nicht wie das mit dem 32er Netz funktionieren soll, ohne Broadcast und vor allem ohne ein Gateway.

Wir genau sind die Vorgaben vom Provider, vor allem welche IP hat das Gateway?
 
Last edited:
Das wird hier nicht gehen, da alle einzelne IPs direkt geroutet werden. Wenn du ein DHCP Server betreibst, dann müsstest du bei deinem Provider fragen, ob er einen IP Helper für deine IP Subnetze einrichten und auf deinen DHCP leiten kann. Dann müsst Du alle IPs auch gleichzeitig jeweils als SCOPE im DHCP anlegen, damit es dein DHCP Server später zuordnen kann. Ob es aber Sinnvoll ist und ob dein Provider anhand des Anschlusses die Subnetze zuordnen kann ist fraglich.
 
Erklärt mir mal einer wie das Routing funktionieren soll ohne Gateway?
 
440D2782-E499-4333-B6F5-9F913EEECE41.jpegWer sagt dass es keinen Gateway gibt? 32bit Subnetze ist gängige Praxis bei Internetprovidern.
 
Ich kenne halt nur die normalen IP Grundlagen. Und da muss das Gateway immer im selben Subnetz sein. Daher kann ich mir nicht herleiten wie dann sowas funktioniert.
 
Wie wäre es mit:

Code:
subnet xxx.xxx.xxx.0 netmask 255.255.255.0 {
        range xxx.xxx.xxx.11 xxx.xxx.xxx.11;
        range xxx.xxx.xxx.70 xxx.xxx.xxx.74;
        range xxx.xxx.xxx.120 xxx.xxx.xxx.123;
        option subnet-mask 255.255.255.255;
        option routers XXX.X.XXX.33;
        option broadcast-address XXX.X.XXX.3X;
}
Wenn dann jeder Host noch die Adresse fest zugewiesen haben soll, machste das halt mit einem Host Eintrag:
Code:
host <hostname> {
    hardware ethernet <MAC Adresse des Hosts>; #Format: 00:0a:1b:2c:3d:4e
    fixed-address <fest zugewiesene IP Adresse>;
}

PS: Hier bin ich davon ausgegangen, dass in deinem Beispiel der x-Teil jeder Adresse immer gleich ist, also immer z.B. 192.168.1. und NICHT z.B. 192.168.1.11, 192.168.27.70 und 192.168.179.121
Falls doch, müsstest du das subnet entsprechend größer machen, z.B. wie hier jetzt 255.255.0.0, damit alle Adressen rein passen, oder du machst tatsächlich für jeden Block ein subnet.

Da wir aber über die Range nur die Adressen verteilen, die dir zugeteilt wurden, macht das wenig Unterschied.
 
Last edited:
Das bringt bei /32 nichts da der Broadcast an der Leitung bleibt und seine ndere Systeme nichts davon mitbekommen. D.h. Sein DHCP server lauscht aber er kriegt nichts mit und kann dementsprechend auch nicht antworten. Da geht nur noch unicasting mit IP Helper.

Wäre es nicht so, so würde das bei dem Provider ein Sicherheitsrisiko bedeuten und auf beliebigem Kundenserver ein falsch konfigurierter DHCP Server eine Betriebsstörung am ganzen Subnetz darstellen würde
 
Ich muss zugegeben, ich hab nicht so die große Ahnung, wie Hoster ihre Netze organisieren.
Dann machen die die host-isolation einfach über die Subnetz-Maske? :oops:
Das allein dürfte nicht reichen, da ist mit Sicherheit noch in den Switches ne isolation, auf Port-Basis oder via VLAN oder so implementiert.
Ich hatte aber auch gar nicht dran gedacht, dass der Lease-renew dann gar nicht mehr am DHCP ankommt, wenn man ein /32 hat. Ich hatte vergessen das das dann über einen Unicast abgewickelt wird.

Naja aber da bin ich dann raus. o_O
 
Wie wäre es mit:

Code:
subnet xxx.xxx.xxx.0 netmask 255.255.255.0 {
        range xxx.xxx.xxx.11 xxx.xxx.xxx.11;
        range xxx.xxx.xxx.70 xxx.xxx.xxx.74;
        range xxx.xxx.xxx.120 xxx.xxx.xxx.123;
        option subnet-mask 255.255.255.255;
        option routers XXX.X.XXX.33;
        option broadcast-address XXX.X.XXX.3X;
}
Wenn dann jeder Host noch die Adresse fest zugewiesen haben soll, machste das halt mit einem Host Eintrag:
Code:
host <hostname> {
    hardware ethernet <MAC Adresse des Hosts>; #Format: 00:0a:1b:2c:3d:4e
    fixed-address <fest zugewiesene IP Adresse>;
}

PS: Hier bin ich davon ausgegangen, dass in deinem Beispiel der x-Teil jeder Adresse immer gleich ist, also immer z.B. 192.168.1. und NICHT z.B. 192.168.1.11, 192.168.27.70 und 192.168.179.121
Falls doch, müsstest du das subnet entsprechend größer machen, z.B. wie hier jetzt 255.255.0.0, damit alle Adressen rein passen, oder du machst tatsächlich für jeden Block ein subnet.

Da wir aber über die Range nur die Adressen verteilen, die dir zugeteilt wurden, macht das wenig Unterschied.
So Funktioniert es tadellos so wie ich es mir vorstelle vielen Dank an alle für die Hilfestellung
 
  • Like
Reactions: Ingo S and mijanek
Hast du was bei deinem Provider diesbezüglich was anfragen müssen, oder läuft die Broadcast einfach so bei dir rein?
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!