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

O projekcie

Ansible role for setting up ISC DHCPD.

Zainstaluj
ansible-galaxy install bertvv.dhcp
Licencja
other
Pobrania
124.4k
Właściciel
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!