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
ansible-galaxy install bertvv.dhcp