bertvv.dhcp
Rola Ansible dhcp
Rola Ansible do konfigurowania ISC DHCPD. Do zadań tej roli należy instalacja pakietów oraz zarządzanie konfiguracją (dhcpd.conf(5)). Zarządzanie konfiguracją zapory sieciowej NIE jest częścią tej roli. Możesz to zrobić w swoim lokalnym pliku playbooka, lub użyć innej roli (np. bertvv.rh-base).
Zobacz dziennik zmian, aby zapoznać się z istotnymi zmianami w każdej wersji.
Czy używasz lub lubisz tę rolę? Proszę rozważ dodanie jej do ulubionych. Jeśli ocenisz tę rolę na Ansible Galaxy i zauważysz jakieś braki, rozważ otwarcie zgłoszenia z konstruktowną opinią lub PR, abyśmy mogli ją poprawić. Dziękujemy!
Wymagania
Brak szczególnych wymagań.
Zmienne roli
Ta rola umie ustawiać globalne opcje oraz określać deklaracje podsieci.
Zobacz testowy playbook jako działający przykład serwera DHCP w środowisku testowym opartym na Vagrant i VirtualBox. Ta sekcja jest odniesieniem do wszystkich obsługiwanych opcji.
Globalne opcje
Poniższe zmienne, po ustawieniu, zostaną dodane do globalnej sekcji pliku konfiguracyjnego DHCP. Jeśli nie podano wartości domyślnej, odpowiadająca ustawieniu nie zostanie uwzględniona w dhcpd.conf(5)
.
Zobacz stronę man dhcp-options(5) po więcej informacji na temat tych opcji.
Zmienna | Uwagi |
---|---|
dhcp_global_authoritative |
Globalne oświadczenie autorytatywne (authoritative , not authoritative ) |
dhcp_global_booting |
Globalne bootowanie (allow , deny , ignore ) |
dhcp_global_bootp |
Globalne bootp (allow , deny , ignore ) |
dhcp_global_broadcast_address |
Globalny adres rozgłoszeniowy |
dhcp_global_classes |
Definicje klas z oświadczeniem match(1) |
dhcp_global_default_lease_time |
Domyślny czas dzierżawy w sekundach |
dhcp_global_domain_name_servers |
Lista adresów IP serwerów DNS(2) |
dhcp_global_domain_name |
Nazwa domeny, której klient powinien używać do rozwiązywania nazw hostów |
dhcp_global_domain_search |
Lista nazw domen, które będą używane przez klienta do odnajdywania non-FQDNs(1) |
dhcp_global_failover |
Ustawienia peer w trybie failover (3) |
dhcp_global_failover_peer |
Nazwa dla Peer w trybie failover (np. foo ) |
dhcp_global_filename |
Nazwa pliku do zażądania przy bootowaniu |
dhcp_global_includes_missing |
Typ logiczny. Kontynuować, nawet gdy includes pliki brakuje w plikach roli |
dhcp_global_includes |
Lista plików konfiguracyjnych do włączenia (z dhcp_config_dir ) |
dhcp_global_log_facility |
Globalny obiekt logowania (np. daemon , syslog , user , ...) |
dhcp_global_max_lease_time |
Maksymalny czas dzierżawy w sekundach |
dhcp_global_next_server |
IP serwera PXEboot |
dhcp_global_ntp_servers |
Lista adresów IP serwerów NTP |
dhcp_global_omapi_port |
Port OMAPI |
dhcp_global_omapi_secret |
Sekret OMAPI |
dhcp_global_other_options |
Tablica dodatkowych globalnych opcji |
dhcp_global_routers |
Adres IP routera |
dhcp_global_server_name |
Nazwa serwera przesyłana do klienta |
dhcp_global_server_state |
Stan usługi (uruchomiony, zatrzymany) |
dhcp_global_subnet_mask |
Globalna maska podsieci |
dhcp_custom_includes |
Lista plików konfiguracyjnych jinja do włączenia (z dhcp_config_dir ) |
dhcp_custom_includes_modes |
Lista trybów dla docelowego pliku konfiguracyjnego |
Uwagi
(1) Ta rola wspiera definiowanie klas z oświadczeniem match, np.:
# Klasa dla maszyn wirtualnych VirtualBox
dhcp_global_classes:
- name: vbox
match: 'match if binary-to-ascii(16,8,":",substring(hardware, 1, 3)) = "8:0:27"'
Nazwy klas można używać w definicji pul adresowych (patrz poniżej).
(2) Zmienna roli dhcp_global_domain_name_servers
może być zapisana jako lista (gdy masz więcej niż jeden element) lub jako ciąg (gdy masz tylko jeden). Następujący fragment pokazuje przykład obu możliwości:
# Jedyny serwer DNS
dhcp_global_domain_name_servers: 8.8.8.8
# Lista serwerów DNS
dhcp_global_domain_name_servers:
- 8.8.8.8
- 8.8.4.4
(3) Ta rola również wspiera definiowanie peer w trybie failover, np.:
# Definicja peer w trybie failover
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
Zmienna dhcp_global_failover_peer
zawiera nazwę skonfigurowanego peer, do użycia w odniesieniu do danej puli. Opcje deklaracji failover są określone zmienną dhcp_global_failover
, słownik, który może zawierać następujące opcje:
Opcja | Wymagana | Uwagi |
---|---|---|
address |
nie | Adres IP tego serwera |
hba |
nie | lista w formacie heksadecymalnym, oddzielona dwukropkami |
load_balance_max_seconds |
nie | Czas po którym obciążenie jest wyłączone (zalecane 3 do 5) |
max-balance |
nie | Oświadczenie o balansoofre wyników w puli failover |
max-lease-misbalance |
nie | Oświadczenie o balansu puli failover |
max-lease-ownership |
nie | Oświadczenie o balansu puli failover |
max_response_delay |
nie | Maksymalny czas bez kontaktu przed włączeniem failover |
max_unacked_updates |
nie | Maksymalna liczba BNDUPD, które może zostać wysłane przed otrzymaniem BNDACK (zalecane 10) |
mclt |
nie | Maksymalny czas oczekiwania klienta |
min-balance |
nie | Oświadczenie o balansu puli failover |
peer_address |
nie | Adres IP peer w trybie failover |
peer_port |
nie | Port tego serwera (zwykle 519/520 lub 647/847) |
port |
nie | Port tego serwera (zwykle 519/520 lub 647/847) |
role |
nie | Primary, secondary |
split |
nie | Podział obciążenia (0-255) |
Dyrektywa peer w trybie failover musi być w definicji pul adresów (patrz poniżej).
Deklaracje podsieci
Zmienna roli dhcp_subnets
zawiera listę słowników, określających deklaracje podsieci, które mają być dodane do pliku konfiguracyjnego DHCP. Każda deklaracja podsieci powinna mieć ip
i netmask
, inne opcje nie są obowiązkowe. Rozpoczynamy tę sekcję przykładem, a pełna lista obsługiwanych opcji znajduje się poniżej.
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
Alfabetyczna lista obsługiwanych opcji w deklaracji podsieci:
Opcja | Wymagana | Uwagi |
---|---|---|
booting |
nie | allow, deny, ignore |
bootp |
nie | allow, deny, ignore |
default_lease_time |
nie | Domyślny czas dzierżawy dla tej podsieci (w sekundach) |
domain_name_servers |
nie | Lista serwerów DNS dla tej podsieci(1) |
domain_search |
nie | Lista nazw domen do rozwiązania dla non-FQDNs(1) |
filename |
nie | plik do pobrania z serwera rozruchowego |
hosts |
nie | Lista hostów z stałym adresem IP dla każdej podsieci, podobna do dhcp_hosts |
interface |
nie | Nadpisuje interface deklaracji podsieci |
ip |
tak | Wymagane. Adres IP podsieci |
max_lease_time |
nie | Maksymalny czas dzierżawy dla tej podsieci (w sekundach) |
netmask |
tak | Wymagane. Maska sieci podsieci (w notacji dziesiętnej z kropkami) |
next_server |
nie | Adres IP serwera rozruchowego |
ntp_servers |
nie | Lista serwerów NTP dla tej podsieci |
range_begin |
nie | Najniższy adres w zakresie dynamicznych adresów IP do przypisania |
range_end |
nie | Najwyższy adres w zakresie dynamicznych adresów IP do przypisania |
ranges |
nie | Jeśli potrzebne są wiele zakresów, można je określić jako listę (2) |
routers |
nie | Adres IP bramy dla tej podsieci |
server_name |
nie | Nazwa serwera przesyłana do klienta |
subnet_mask |
nie | Nadpisuje netmask deklaracji podsieci |
options |
nie | Słownik opcji do dodania do tej podsieci |
Możesz określić pule adresów w podsieci, ustawiając opcję pools
. Dzięki temu możesz określić pulę adresów, które będą traktowane inaczej niż inna pula adresów, nawet w tej samej sieci lub podsieci. Jest to lista słowników z następującymi kluczami, które są opcjonalne:
Opcja | Uwagi |
---|---|
allow |
Określa, które hosty są dozwolone w tej puli(1) |
default_lease_time |
Domyślny czas dzierżawy dla tej puli |
deny |
Określa, które hosty nie są dozwolone w tej puli |
domain_name_servers |
Serwery DNS do użycia w tej puli(1) |
failover_peer |
Określa serwer failover |
max_lease_time |
Maksymalny czas dzierżawy dla tej puli |
min_lease_time |
Minimalny czas dzierżawy dla tej puli |
range_begin |
Najniższy adres w tej puli |
range_end |
Najwyższy adres w tej puli |
ranges |
Jeśli potrzebne są wiele zakresów, można je określić jako listę (2) |
(1) Dla pól allow
i deny
, opcje są enumerowane w dhcpd.conf(5), ale obejmują:
booting
bootp
client-updates
known-clients
members of "CLASS"
unknown-clients
(2) Dla wielu zakresów podsieci, mogą one być określone w ten sposób:
ranges:
- { begin: 192.168.222.50, end: 192.168.222.99 }
- { begin: 192.168.222.110, end: 192.168.222.127 }
Deklaracje hostów
Możesz określić hosty, które powinny otrzymać stały adres IP na podstawie swojego adresu MAC, ustawiając opcję dhcp_hosts
. Jest to lista słowników z następującymi trzema kluczami, z których name
i mac
są obowiązkowe:
Opcja | Uwagi |
---|---|
name |
Nazwa hosta |
mac |
Adres MAC hosta |
ip |
Adres IP przypisany do hosta |
hostname |
Nazwa hosta, która ma zostać przypisana przez DHCP (opcjonalnie) |
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
Określenie serwera PXEBoot
Ustawienie zmiennej dhcp_pxeboot_server
przekieruje klientów PXE do określonego serwera PXEBoot, aby bootować przez sieć. Podany serwer powinien mieć obrazy rozruchowe w oczekiwanych lokalizacjach. Użyj np. bertvv.pxeserver, aby go skonfigurować.
Niestandardowe włączenia
Ustawienie zmiennej dhcp_custom_inludes
na szablon jinja pozwoli używać niestandardowych konfiguracji, które zostaną następnie uwzględnione w pliku dhcpd.conf
. Jeśli nazwa pliku szablonu ma rozszerzenie .j2
, zostanie ono usunięte z nazwy docelowego pliku, w przeciwnym razie zachowa nazwę pliku szablonu w docelowej lokalizacji.
dhcp_custom_includes:
- custom-dhcp-config.conf[.j2]
Domyślny tryb dla docelowego pliku konfiguracyjnego niestandardowego to 0644. Aby to zmienić, ustaw zmienną dhcp_custom_includes_modes
. Filtr zip_longest zostanie użyty w związku z zmienną dhcp_custom_includes
.
dhcp_custom_includes_modes:
- '0600'
Możesz stworzyć własne zmienne do użycia w szablonie, co pozwala na pełną elastyczność. Aby uniknąć konfliktów zmiennych, upewnij się, że używasz zmiennych, które nie są odwoływane w tej roli, aby uniknąć duplikacji konfiguracji w wielu plikach .conf
.
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"
Na zakończenie szablon jinja musi zawierać poprawną konfigurację ISC DHCPD (dhcpd.conf(5)). To przykład użycia bertvv.dhcp dla 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 %}
#
# Deklaracje hostów
#
{% 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 %}
Zależności
Brak zależności.
Przykładowy playbook
Zobacz testowy playbook.
Testowanie
Aby uruchomić testy tego playbooka, musisz mieć zainstalowane Molecule, VirtualBox i Vagrant. Uruchomienie polecenia molecule converge
stworzy maszynę wirtualną VirtualBox z interfejsem host-only z adresem IP 192.168.222.2. Do testowania, możesz użyć np. skryptu nmap dhcp-discover:
$ sudo nmap --script broadcast-dhcp-discover -e vboxnet7
Starting Nmap 7.91 ( https://nmap.org ) at 2021-11-30 11:32 CET
Pre-scan script results:
| broadcast-dhcp-discover:
| Response 1 of 2:
| Interface: vboxnet7
| IP Offered: 192.168.222.50
| DHCP Message Type: DHCPOFFER
| Server Identifier: 192.168.222.2
| IP Address Lease Time: 5m00s
| Subnet Mask: 255.255.255.0
| Domain Name Server: 10.0.2.3, 10.0.2.4
| Domain Name: example.com
| Broadcast Address: 192.168.222.255
| Response 2 of 2:
| Interface: vboxnet7
| IP Offered: 192.168.222.50
| DHCP Message Type: DHCPOFFER
| Server Identifier: 192.168.222.2
| IP Address Lease Time: 5m00s
| Subnet Mask: 255.255.255.0
| Domain Name Server: 10.0.2.3, 10.0.2.4
| Domain Name: example.com
|_ Broadcast Address: 192.168.222.255
WARNING: No targets were specified, so 0 hosts scanned.
Nmap done: 0 IP addresses (0 hosts up) scanned in 10.19 seconds
Licencja
BSD
Wnoszenie wkładu
Problemy, prośby o funkcje, pomysły są mile widziane i można je zgłaszać w sekcji zgłoszeń. Proszę również o życzliwe przyjęcie pull requestów. Preferowo stwórz gałąź tematyczną i przy składaniu prośby, zgrupuj swoje zmiany w jedną (z opisowym komunikatem).
Współtwórcy
ansible-galaxy install bertvv.dhcp