dhcp

Ansible роль dhcp

Роль Ansible для настройки ISC DHCPD. Ответственности этой роли заключаются в установке пакетов и управлении конфигурацией (dhcpd.conf(5)). Управление конфигурацией брандмауэра не входит в обязанности этой роли. Вы можете сделать это в вашем локальном плейбуке или использовать другую роль (например, bertvv.rh-base.

Смотрите журнал изменений для заметных изменений в каждом выпуске.

Используете/нравится вам эта роль? Пожалуйста, подумайте о том, чтобы поставить ей звезду. Если вы оцените эту роль на Ansible Galaxy и заметите недочеты, пожалуйста, откройте проблему с конкретными комментариями или запрос на изменение, чтобы мы могли ее улучшить. Спасибо!

Требования

Нет специфических требований

Переменные роли

Эта роль может устанавливать глобальные параметры и указывать объявления подсетей.

Смотрите тестовый плейбук для примера рабочей DHCP-сервер в тестовой среде, основанной на Vagrant и VirtualBox. Этот раздел служит справкой по всем поддерживаемым параметрам.

Глобальные параметры

Следующие переменные, при установке, будут добавлены в глобальный раздел файла конфигурации DHCP. Если заранее не указано значение по умолчанию, соответствующий параметр будет пропущен в dhcpd.conf(5).

Смотрите страницу man dhcp-options(5) для получения дополнительной информации о этих параметрах.

Переменная Комментарии
dhcp_global_authoritative Глобальное авторитетное утверждение (authoritative, not authoritative)
dhcp_global_booting Глобальное разрешение на загрузку (allow, deny, ignore)
dhcp_global_bootp Глобальное разрешение на bootp (allow, deny, ignore)
dhcp_global_broadcast_address Глобальный широковещательный адрес
dhcp_global_classes Определения классов с утверждением совпадения(1)
dhcp_global_default_lease_time Время аренды по умолчанию в секундах
dhcp_global_domain_name_servers Список IP-адресов DNS-серверов(2)
dhcp_global_domain_name Имя домена, которое клиент должен использовать для разрешения имен хостов
dhcp_global_domain_search Список доменных имен, используемых клиентом для нахождения non-FQDN (1)
dhcp_global_failover Настройки для резервирования (failover) (3)
dhcp_global_failover_peer Имя резервного сервера (например, foo)
dhcp_global_filename Имя файла для запроса загрузки
dhcp_global_includes_missing Логическое значение. Продолжить, если файлы includes отсутствуют в файлах роли
dhcp_global_includes Список файлов конфигурации для включения (из dhcp_config_dir)
dhcp_global_log_facility Глобальное журналирование (например, daemon, syslog, user, ...)
dhcp_global_max_lease_time Максимальное время аренды в секундах
dhcp_global_next_server IP-адрес сервера PXEboot
dhcp_global_ntp_servers Список IP-адресов NTP-серверов
dhcp_global_omapi_port Порт OMAPI
dhcp_global_omapi_secret Секрет OMAPI
dhcp_global_other_options Массив произвольных дополнительных глобальных параметров
dhcp_global_routers IP-адрес маршрутизатора
dhcp_global_server_name Имя сервера, отправляемое клиенту
dhcp_global_server_state Состояние службы (запущена, остановлена)
dhcp_global_subnet_mask Глобальная маска подсети
dhcp_custom_includes Список файлов конфигурации jinja для включения (из dhcp_config_dir)
dhcp_custom_includes_modes Список режимов для целевого пользовательского конфигурационного файла

Примечания

(1) Эта роль поддерживает определение классов с утверждением совпадения, например:

# Класс для виртуальных машин VirtualBox
dhcp_global_classes:
  - name: vbox
    match: 'match if binary-to-ascii(16,8,":",substring(hardware, 1, 3)) = "8:0:27"'

Названия классов могут использоваться в определении пулов адресов (см. ниже).

(2) Переменная роли dhcp_global_domain_name_servers может быть записана как список (если у вас более одного элемента), или как строка (если только один). Следующий фрагмент демонстрирует пример обоих вариантов:

# Один DNS сервер
dhcp_global_domain_name_servers: 8.8.8.8

# Список DNS серверов
dhcp_global_domain_name_servers:
  - 8.8.8.8
  - 8.8.4.4

(3) Эта роль также поддерживает определение резервного сервера, например:

# Определение резервного сервера
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

Переменная dhcp_global_failover_peer содержит название для настроенного резервного сервера, используемого для каждого пула. Опции декларации резервирования указываются с помощью переменной dhcp_global_failover, которая является словарем и может содержать следующие опции:

Опция Обязательна Комментарий
address нет IP-адрес этого сервера
hba нет список шестнадцатеричных значений, разделенных двоеточием
load_balance_max_seconds нет Период, после которого балансировка нагрузки отключается (рекомендуется 3-5)
max-balance нет Утверждение о балансе пула резервирования
max-lease-misbalance нет Утверждение о балансе пула резервирования
max-lease-ownership нет Утверждение о балансе пула резервирования
max_response_delay нет Максимальное количество секунд без контакта перед активацией резервирования
max_unacked_updates нет Максимальное количество BNDUPD, которое может быть отправлено перед получением BNDACK (рекомендуется 10)
mclt нет Максимальное время ожидания клиента
min-balance нет Утверждение о балансе пула резервирования
peer_address нет IP-адрес резервного сервера
peer_port нет Порт этого сервера (обычно 519/520 или 647/847)
port нет Порт этого сервера (обычно 519/520 или 647/847)
role нет primary, secondary
split нет Балансировка нагрузки (0-255)

Директива резервного сервера должна находиться в определении пулов адресов (см. ниже).

Объявления подсетей

Переменная роли dhcp_subnets содержит список словарей, указывая объявления подсетей, которые будут добавлены в файл конфигурации DHCP. Каждое объявление подсети должно содержать ip и netmask, остальные параметры не обязательны. Начнем этот раздел с примера, а полный обзор поддерживаемых параметров следует далее.

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

Алфавитный список поддерживаемых параметров в объявлении подсетей:

Параметр Обязателен Комментарий
booting нет allow,deny,ignore
bootp нет allow,deny,ignore
default_lease_time нет Время аренды по умолчанию для этой подсети (в секундах)
domain_name_servers нет Список доменных имен для этой подсети(1)
domain_search нет Список доменных имен для разрешения non-FQDN(1)
filename нет Имя файла, которое потрібно получить из сервера загрузки
hosts нет Список фиксированных IP-адресов для каждой подсети, похожий на dhcp_hosts
interface нет Переопределяет интерфейс объявления подсети
ip да Обязательно. IP-адрес подсети
max_lease_time нет Максимальное время аренды для этой подсети (в секундах)
netmask да Обязательно. Маска сети подсети (в десятичной нотации)
next_server нет IP-адрес сервера загрузки
ntp_servers нет Список NTP-серверов для этой подсети
range_begin нет Наименьший адрес в диапазоне динамических IP-адресов
range_end нет Наибольший адрес в диапазоне динамических IP-адресов
ranges нет Если нужны несколько диапазонов, их можно указать в списке (2)
routers нет IP-адрес шлюза для этой подсети
server_name нет Имя сервера, отправляемое клиенту
subnet_mask нет Переопределяет mask объявления подсети
options нет Словарь параметров для добавления в эту подсеть

Вы можете указать пулы адресов в пределах подсети, установив параметры pools. Это позволит вам указать пул адресов, который будет обрабатываться иначе, чем другой пул адресов, даже в одном сетевом сегменте или подсети. Это список словарей со следующими ключами, которые все являются необязательными:

Параметр Комментарий
allow Указывает, какие хосты разрешены в этом пуле(1)
default_lease_time Время аренды по умолчанию для этого пула
deny Указывает, какие хосты не разрешены в этом пуле
domain_name_servers DNS-серверы, используемые для этого пула(1)
failover_peer Указывает резервный сервер
max_lease_time Максимальное время аренды для этого пула
min_lease_time Минимальное время аренды для этого пула
range_begin Наименьший адрес в этом пуле
range_end Наибольший адрес в этом пуле
ranges Если нужны несколько диапазонов, их можно указать в списке (2)

(1) Для полей allow и deny параметры перечислены в dhcpd.conf(5), но включают:

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

(2) Для нескольких диапазонов подсетей их можно указать, например:

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

Объявления хостов

Вы можете указать хосты, которые должны получать фиксированный IP-адрес, основываясь на их MAC-адресах, установив опцию dhcp_hosts. Это список словарей с тремя ключами, из которых name и mac являются обязательными:

Параметр Комментарий
name Имя хоста
mac MAC-адрес хоста
ip IP-адрес, который будет присвоен хосту
hostname Имя хоста, которое будет назначено через DHCP (необязательный)
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

Установка переменной dhcp_pxeboot_server перенаправит клиентов PXE на указанный сервер PXEBoot для загрузки по сети. Указанный сервер должен иметь образы загрузки в ожидаемых местах. Используйте, например, bertvv.pxeserver для его настройки.

Пользовательские включения

Установка переменной dhcp_custom_includes на шаблон jinja позволит использовать пользовательские конфигурации, которые затем будут включены в файл dhcpd.conf. Если имя файла шаблона имеет расширение .j2, оно будет удалено из имени конечного файла, в противном случае имя файла шаблона будет сохранено в конечном файле.

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

Режим по умолчанию для конечного пользовательского конфигурационного файла - 0644. Чтобы изменить это, установите переменную dhcp_custom_includes_modes. Фильтр zip_longest будет использоваться вместе с переменной dhcp_custom_includes.

dhcp_custom_includes_modes:
  - '0600'

Вы можете создавать свои собственные переменные для использования в шаблоне, что обеспечит абсолютную гибкость. Для избежания конфликтов переменных убедитесь, что используете переменные, которые не упоминаются в этой роли, так как это приведет к дублированию конфигурации в нескольких .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"

Наконец, шаблон jinja должен содержать допустимую конфигурацию ISC DHCPD (dhcpd.conf(5)). Это пример использования bertvv.dhcp для автоматического развертывания 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 %}

#
# Объявления хостов
#
{% 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 %}

Зависимости

Нет зависимостей.

Пример плейбука

Смотрите тестовый плейбук

Тестирование

Чтобы запустить тесты для этого плейбука, вам необходимо установить Molecule, VirtualBox и Vagrant. Выполнение команды molecule converge создаст виртуальную машину VirtualBox с интерфейсом только для хоста с IP-адресом 192.168.222.2. Для тестирования вы можете, например, использовать скрипт 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

Лицензия

BSD

Участие в разработке

Вопросы, запросы на функции, идеи приветствуются и могут быть опубликованы в разделе Issues. Запросы на изменение также приветствуются. Предпочтительно создавайте отдельную ветку и, при отправке, объединяйте свои коммиты в один (с описательным сообщением).

Участники

О проекте

Ansible role for setting up ISC DHCPD.

Установить
ansible-galaxy install bertvv/ansible-role-dhcp
Лицензия
other
Загрузки
103734
Владелец
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!