bertvv.dhcp

Ansible-Rolle dhcp

Ansible-Rolle zur Einrichtung von ISC DHCPD. Die Aufgaben dieser Rolle sind die Installation von Paketen und die Verwaltung der Konfiguration (dhcpd.conf(5)). Die Verwaltung der Firewall-Konfiguration ist KEIN Bestandteil dieser Rolle. Das können Sie in Ihrem lokalen Playbook erledigen oder eine andere Rolle verwenden (z. B. bertvv.rh-base).

Bitte beziehen Sie sich auf das Änderungsprotokoll für wichtige Änderungen in jeder Version.

Verwenden Sie diese Rolle oder gefällt Ihnen diese? Bitte ziehen Sie in Betracht, ihr einen Stern zu geben. Wenn Sie diese Rolle bewerten auf Ansible Galaxy und finden, dass sie in irgendeiner Hinsicht nicht ausreichend ist, ziehen Sie bitte in Betracht, ein Problem mit umsetzbarem Feedback oder einen PR zu eröffnen, damit wir sie verbessern können. Vielen Dank!

Anforderungen

Keine speziellen Anforderungen.

Rollenspezifische Variablen

Diese Rolle kann globale Optionen festlegen und Subnetzdeklarationen spezifizieren.

Siehe das Test-Playbook für ein funktionierendes Beispiel eines DHCP-Servers in einer Testumgebung, die auf Vagrant und VirtualBox basiert. Dieser Abschnitt ist ein Referenz für alle unterstützten Optionen.

Globale Optionen

Die folgenden Variablen, wenn gesetzt, werden zum globalen Abschnitt der DHCP-Konfigurationsdatei hinzugefügt. Wenn kein Standardwert angegeben ist, wird die entsprechende Einstellung in dhcpd.conf(5) weggelassen.

Siehe das Handbuch dhcp-options(5) für weitere Informationen zu diesen Optionen.

Variable Kommentare
dhcp_global_authoritative Globale autoritative Aussage (authoritative, not authoritative)
dhcp_global_booting Globales Booting (allow, deny, ignore)
dhcp_global_bootp Globales BOOTP (allow, deny, ignore)
dhcp_global_broadcast_address Globale Broadcast-Adresse
dhcp_global_classes Klassendefinitionen mit einer Übereinstimmungserklärung(1)
dhcp_global_default_lease_time Standard-Mietzeit in Sekunden
dhcp_global_domain_name_servers Eine Liste von IP-Adressen von DNS-Servern(2)
dhcp_global_domain_name Der Domainname, den der Client bei der Auflösung von Hostnamen verwenden soll
dhcp_global_domain_search Eine Liste von Domainnamen, die vom Client verwendet werden, um nicht-FQDNs(1) zu finden
dhcp_global_failover Failover-Peer-Einstellungen (3)
dhcp_global_failover_peer Name für den Failover-Peer (z. B. foo)
dhcp_global_filename Dateiname, der für das Booten angefordert werden soll
dhcp_global_includes_missing Boolean. Fortfahren, wenn includes-Datei(en) fehlen
dhcp_global_includes Liste von Konfigurationsdateien, die einbezogen werden sollen (aus dhcp_config_dir)
dhcp_global_log_facility Globale Protokollierungsstelle (z. B. daemon, syslog, user, ...)
dhcp_global_max_lease_time Maximale Mietzeit in Sekunden
dhcp_global_next_server IP für den PXE-Server
dhcp_global_ntp_servers Liste von IP-Adressen von NTP-Servern
dhcp_global_omapi_port OMAPI-Port
dhcp_global_omapi_secret OMAPI-Geheimnis
dhcp_global_other_options Array von beliebigen zusätzlichen globalen Optionen
dhcp_global_routers IP-Adresse des Routers
dhcp_global_server_name Servername, der an den Client gesendet wird
dhcp_global_server_state Dienststatus (gestart, gestoppt)
dhcp_global_subnet_mask Globale Subnetzmaske
dhcp_custom_includes Liste von jinja-Konfigurationsdateien, die einbezogen werden sollen (aus dhcp_config_dir)
dhcp_custom_includes_modes Liste von Modi für die Ziel-Konfigurationsdatei

Anmerkungen

(1) Diese Rolle unterstützt die Definition von Klassen mit einer Übereinstimmungserklärung, z. B.:

# Klasse für VirtualBox-VMs
dhcp_global_classes:
  - name: vbox
    match: 'match if binary-to-ascii(16,8,":",substring(hardware, 1, 3)) = "8:0:27"'

Klassennamen können in der Definition von Adresspools verwendet werden (siehe unten).

(2) Die Rollenvariable dhcp_global_domain_name_servers kann entweder als Liste (wenn Sie mehr als einen Eintrag haben) oder als Zeichenfolge (wenn Sie nur einen haben) geschrieben werden. Der folgende Ausschnitt zeigt ein Beispiel für beides:

# Ein einzelner DNS-Server
dhcp_global_domain_name_servers: 8.8.8.8

# Eine Liste von DNS-Servern
dhcp_global_domain_name_servers:
  - 8.8.8.8
  - 8.8.4.4

(3) Diese Rolle unterstützt auch die Definition eines Failover-Peers, z. B.:

# Definition des Failover-Peers
dhcp_global_failover_peer: failover-group
dhcp_global_failover:
  role: primary # | secondary
  address: 192.168.222.2
  port: 647
  peer_address: 192.168.222.3
  peer_port: 647
  max_response_delay: 15
  max_unacked_updates: 10
  load_balance_max_seconds: 5
  split: 255
  mclt: 3600

Die Variable dhcp_global_failover_peer enthält einen Namen für den konfigurierten Peer, der auf Pool-Basis verwendet werden soll. Die Optionen zur Failover-Deklaration werden mit der Variable dhcp_global_failover festgelegt, einem Wörterbuch, das die folgenden Optionen enthalten kann:

Option Erforderlich Kommentar
address nein Die IP-Adresse dieses Servers
hba nein durch Doppelpunkte geteilte Hexliste
load_balance_max_seconds nein Grenzwert nach dem die Lastenverteilung deaktiviert wird (3 bis 5 empfohlen)
max-balance nein Lastenausgleichs-Aussage für den Failover-Pool
max-lease-misbalance nein Lastenausgleichs-Aussage für den Failover-Pool
max-lease-ownership nein Lastenausgleichs-Aussage für den Failover-Pool
max_response_delay nein Maximale Sekunden ohne Kontakt, bevor das Failover aktiviert wird
max_unacked_updates nein Maximale BNDUPD, die gesendet werden kann, bevor eine BNDACK empfangen wird (10 empfohlen)
mclt nein Maximale Client-Leitung-Zeit
min-balance nein Lastenausgleichs-Aussage für den Failover-Pool
peer_address nein IP-Adresse des Failover-Peers
peer_port nein Port dieses Servers (normalerweise 519/520 oder 647/847)
port nein Port dieses Servers (normalerweise 519/520 oder 647/847)
role nein primary, secondary
split nein Lastenausgleichsaufteilung (0-255)

Die Failover-Peer-Direktive muss in der Definition von Adresspools enthalten sein (siehe unten).

Subnetzdeklarationen

Die Rollenvariable dhcp_subnets enthält eine Liste von Diktaten, die die Subnetzdeklarationen spezifizieren, die der DHCP-Konfigurationsdatei hinzugefügt werden sollen. Jede Subnetzdeklaration sollte eine ip und netmask haben, andere Optionen sind nicht zwingend erforderlich. Wir beginnen diesen Abschnitt mit einem Beispiel, gefolgt von einer vollständigen Übersicht über die unterstützten Optionen.

dhcp_subnets:
  - ip: 192.168.222.0
    netmask: 255.255.255.128
    domain_name_servers:
      - 10.0.2.3
      - 10.0.2.4
    range_begin: 192.168.222.50
    range_end: 192.168.222.127
  - ip: 192.168.222.128
    default_lease_time: 3600
    max_lease_time: 7200
    netmask: 255.255.255.128
    domain_name_servers: 10.0.2.3
    routers: 192.168.222.129

Eine alphabetische Liste der unterstützten Optionen in einer Subnetzdeklaration:

Option Erforderlich Kommentar
booting nein allow, deny, ignore
bootp nein allow, deny, ignore
default_lease_time nein Standard-Mietzeit für dieses Subnetz (in Sekunden)
domain_name_servers nein Liste von DNS-Servern für dieses Subnetz(1)
domain_search nein Liste von Domainnamen zur Auflösung von nicht-FQDNs(1)
filename nein Dateiname, den Sie vom Boot-Server abrufen möchten
hosts nein Liste von festen IP-Adress-Hosts für jedes Subnetz, ähnlich wie dhcp_hosts
interface nein Überschreibt das interface der Subnetzdeklaration
ip ja Erforderlich. IP-Adresse des Subnetzes
max_lease_time nein Maximale Mietzeit für dieses Subnetz (in Sekunden)
netmask ja Erforderlich. Netzwerkmaske des Subnetzes (in punktierter Dezimalnotation)
next_server nein IP-Adresse des Boot-Servers
ntp_servers nein Liste von NTP-Servern für dieses Subnetz
range_begin nein Niedrigste Adresse im Bereich der dynamischen IP-Adressen, die zugewiesen werden sollen
range_end nein Höchste Adresse im Bereich der dynamischen IP-Adressen, die zugewiesen werden sollen
ranges nein Wenn mehrere Bereiche benötigt werden, können diese als Liste angegeben werden (2)
routers nein IP-Adresse des Gateways für dieses Subnetz
server_name nein Servername, der an den Client gesendet wird
subnet_mask nein Überschreibt die netmask der Subnetzdeklaration
options nein Ein Wörterbuch von Optionen, die zu diesem Subnetz hinzugefügt werden sollen

Sie können Adresspools innerhalb eines Subnetzes angeben, indem Sie die pools-Optionen festlegen. Dadurch können Sie einen Pool von Adressen angeben, der anders behandelt wird als ein anderer Adresspool, selbst im selben Netzwerksegment oder Subnetz. Es ist eine Liste von Diktaten mit den folgenden optionalen Schlüsseln:

Option Kommentar
allow Gibt an, welche Hosts in diesem Pool erlaubt sind(1)
default_lease_time Die Standard-Mietzeit für diesen Pool
deny Gibt an, welche Hosts in diesem Pool nicht erlaubt sind
domain_name_servers Die DNS-Server, die für diesen Pool verwendet werden sollen(1)
failover_peer Gibt einen Failover-Server an
max_lease_time Die maximale Mietzeit für diesen Pool
min_lease_time Die minimale Mietzeit für diesen Pool
range_begin Die niedrigste Adresse in diesem Pool
range_end Die höchste Adresse in diesem Pool
ranges Wenn mehrere Bereiche benötigt werden, können diese als Liste angegeben werden (2)

(1) Für die Felder allow und deny sind die Optionen im dhcpd.conf(5) aufgelistet, umfassen aber:

  • booting
  • bootp
  • client-updates
  • known-clients
  • members of "CLASS"
  • unknown-clients

(2) Für mehrere Subnetzbereiche können diese wie folgt angegeben werden:

ranges:
  - { begin: 192.168.222.50, end: 192.168.222.99 }
  - { begin: 192.168.222.110, end: 192.168.222.127 }

Hostdeklarationen

Sie können Hosts angeben, die eine feste IP-Adresse basierend auf ihrer MAC-Adresse erhalten sollen, indem Sie die Option dhcp_hosts festlegen. Dies ist eine Liste von Diktaten mit den folgenden drei Schlüsseln, von denen name und mac Pflichtfelder sind:

Option Kommentar
name Der Name des Hosts
mac Die MAC-Adresse des Hosts
ip Die IP-Adresse, die dem Host zugewiesen werden soll
hostname Hostname, der über DHCP zugewiesen werden soll (optional)
dhcp_hosts:
  - name: cl1
    mac: '00:11:22:33:44:55'
    ip: 192.168.222.150
  - name: cl2
    mac: '00:de:ad:be:ef:00'
    ip: 192.168.222.151

PXEBoot-Server angeben

Durch das Setzen der Variable dhcp_pxeboot_server werden PXE-Clients an den angegebenen PXEBoot-Server umgeleitet, um über das Netzwerk zu booten. Der angegebene Server sollte Boot-Images an den erwarteten Standorten haben. Verwenden Sie z. B. bertvv.pxeserver, um ihn zu konfigurieren.

Benutzerdefinierte Includes

Das Setzen der Variable dhcp_custom_includes auf eine Jinja-Vorlage ermöglicht die Verwendung custom Konfigurationen, die anschließend in die dhcpd.conf-Datei eingefügt werden. Wenn der Name der Vorlagendatei die .j2-Erweiterung hat, wird sie aus dem Zieldateinamen entfernt, andernfalls bleibt der Vorlagenname im Zieldokument erhalten.

dhcp_custom_includes:
  - custom-dhcp-config.conf[.j2]

Der Standardmodus für die Zielkonfigurationsdatei beträgt 0644. Um dies zu ändern, setzen Sie die Variable dhcp_custom_includes_modes. Der zip_longest-Filter wird zusammen mit der dhcp_custom_includes-Variable verwendet.

dhcp_custom_includes_modes:
  - '0600'

Sie können Ihre eigenen Variablen innerhalb der Vorlage erstellen, um totale Flexibilität zu ermöglichen. Um Konflikte mit Variablen zu vermeiden, stellen Sie sicher, dass Sie Variablen verwenden, die in dieser Rolle nicht referenziert werden, da dies Konfigurationen in mehreren .conf-Dateien duplizieren würde.

    dhcp_custom_hosts:
      - name: Juniper1
        mac: 'de:ad:c0:de:ca:fe'
        ip: 192.168.35.160
        options:
          - name: tftp-server-name
            value: 192.168.35.152
          - name: host-name
            value: Juniper1
          - name: NEW_OP.transfer-mode
            value: "http"
          - name: NEW_OP.config-file-name
            value: "/configurations/j1-switch.config"

Schließlich muss die Jinja-Vorlage eine gültige ISC DHCPD-Konfiguration enthalten (dhcpd.conf(5)). Dies ist ein Beispiel für die Verwendung von bertvv.dhcp für Juniper Zero-Touch-Provisioning.

option space NEW_OP;
option NEW_OP.image-file-name code 0 = text;
option NEW_OP.config-file-name code 1 = text;
option NEW_OP.image-file-type code 2 = text;
option NEW_OP.transfer-mode code 3 = text;
option NEW_OP.alt-image-file-name code 4= text;
option NEW_OP.http-port code 5= text;
option NEW_OP-encapsulation code 43 = encapsulate NEW_OP;

{% if dhcp_custom_hosts is defined %}

#
# Hostdeklarationen
#
{% for host in dhcp_custom_hosts %}
host {{ host.name | replace (" ","_") | replace ("'","_") | replace (":","_") }} {
  hardware ethernet {{ host.mac }};
{% if host.ip is defined %}
  fixed-address {{ host.ip }};
{% endif %}
{% if host.options is defined %}
{% for option in host.options %}
  {{ option.name }} "{{ option.value }}"
{% endfor %}
{% endif %}
}
{% endfor %}
{% endif %}

Abhängigkeiten

Keine Abhängigkeiten.

Beispiel-Playbook

Siehe das Test-Playbook.

Tests

Um die Tests für dieses Playbook auszuführen, müssen Sie Molecule, VirtualBox und Vagrant installiert haben. Wenn Sie den Befehl molecule converge ausführen, wird eine VirtualBox-VM mit einer Host-only-Schnittstelle mit der IP-Adresse 192.168.222.2 erstellt. Zum Testen können Sie z. B. das nmap dhcp-discover-Skript verwenden:

$ sudo nmap --script broadcast-dhcp-discover -e vboxnet7
Starte Nmap 7.91 ( https://nmap.org ) am 2021-11-30 11:32 CET
Vorab-Scan-Skriptergebnisse:
| broadcast-dhcp-discover: 
|   Antwort 1 von 2: 
|     Schnittstelle: vboxnet7
|     Angebots-IP: 192.168.222.50
|     DHCP-Nachrichtentyp: DHCPOFFER
|     Serverkennung: 192.168.222.2
|     IP-Adresse Mietzeit: 5m00s
|     Subnetzmaske: 255.255.255.0
|     DNS-Server: 10.0.2.3, 10.0.2.4
|     Domainname: example.com
|     Broadcast-Adresse: 192.168.222.255
|   Antwort 2 von 2: 
|     Schnittstelle: vboxnet7
|     Angebots-IP: 192.168.222.50
|     DHCP-Nachrichtentyp: DHCPOFFER
|     Serverkennung: 192.168.222.2
|     IP-Adresse Mietzeit: 5m00s
|     Subnetzmaske: 255.255.255.0
|     DNS-Server: 10.0.2.3, 10.0.2.4
|     Domainname: example.com
|_    Broadcast-Adresse: 192.168.222.255
WARNUNG: Es wurden keine Ziele angegeben, daher wurden 0 Hosts gescannt.
Nmap abgeschlossen: 0 IP-Adressen (0 Hosts aktiv) in 10.19 Sekunden gescannt.

Lizenz

BSD

Mitwirkende

Probleme, Funktionsanforderungen, Ideen sind willkommen und können im Abschnitt „Probleme“ gepostet werden. Pull-Requests sind ebenfalls sehr willkommen. Erstellen Sie vorzugsweise einen Thema-Branch und drücken Sie beim Einreichen Ihre Commits in einen (mit einer beschreibenden Nachricht).

Mitwirkende

Über das Projekt

Ansible role for setting up ISC DHCPD.

Installieren
ansible-galaxy install bertvv.dhcp
Lizenz
other
Downloads
124.4k
Besitzer
Hi! My contribs are often related to my job (teaching Linux), but are mostly done in my free time. I can't always respond quickly to PRs and Issues. Sorry!