Резервирования DHCP ISC-kea, похоже, не работают с моей конфигурацией.

Вопрос или проблема

Я переключился на свою сеть, чтобы использовать isc-kea v2.2.0, но похоже, что резервирования не выполняются. Я создал тестовый хост, и вместо получения своего резервированного IP он получает динамический IP из пула подсети. Я проверил свою конфигурацию isc-dhcpd с помощью инструмента миграции, а затем мне пришлось изменить некоторые параметры, так как параметры высокой доступности и другие поля сильно изменились.

Мои файлы конфигурации Kea следующие. Я надеюсь, что я пропустил какое-то поле, или я неправильно настроил что-то для работы резервирования?

#// kea-dhcp4.conf
{
  "Dhcp4": {
    #// 1d время аренды глобально
    "valid-lifetime": 86400,
    #// T1 жестко установленное значение
    #//"renew-timer": 900,
    #// T2 жестко установленное значение
    #//"rebind-timer": 1800,
    "calculate-tee-times": true,
    #// T1 по умолчанию 50% от срока аренды
    "t1-percent": 0.5,
    #// T2 по умолчанию 87.5% от срока аренды
    "t2-percent": 0.875,
    "interfaces-config": {
      "interfaces": [ "eth0" ]
    },
    "reservation-mode": "global",
    "host-reservation-identifiers": [
      "hw-address"
    ],
    "lease-database": {
      "type": "memfile",
      "lfc-interval": 3600,
      "persist": true,
      #// По умолчанию "[kea-install-dir]/var/lib/kea/kea-leases4.csv"
      #//"name": "/var/log/kea/kea-leases4.csv",
      "max-row-errors": 100
    },
    "control-socket": {
      "socket-type": "unix",
      "socket-name": "/run/kea/kea4-ctrl-socket"
    },
    "expired-leases-processing": {
      #// 1ч, проверка аренд, которые истекли, каждый час
      "reclaim-timer-wait-time": 3600,
      #// 2д, чтобы устройство вернулось и использовало тот же IP
      "hold-reclaimed-time": 172800,
      #// По умолчанию 100, обработка всех возвращенных аренды за одно время
      "max-reclaim-leases": 0,
      #// По умолчанию 250мс, сколько времени требуется для обработки восстановления
      "max-reclaim-time": 0
    },
    "option-data": [ {
        #// DNS-серверы по умолчанию для всех
        "name": "domain-name-servers",
        "code": 6,
        "data": "9.9.9.9, 1.1.1.1"
        #//"data": "192.168.1.6, 192.168.1.7"
    } ],
    #// https://kb.isc.org/docs/kea-hook-libraries
    "hooks-libraries": [
      {
        "library": "/usr/lib/aarch64-linux-gnu/kea/hooks/libdhcp_lease_cmds.so"
      },
      {
        "library": "/usr/lib/aarch64-linux-gnu/kea/hooks/libdhcp_ha.so",
        "parameters": {
          "high-availability": [ {
            "this-server-name": "dhcp-001",
            "mode": "hot-standby",
            "heartbeat-delay": 10000,
            "max-response-delay": 60000,
            "max-ack-delay": 5000,
            "max-unacked-clients": 5,
            "sync-timeout": 60000,
            "peers": [
              {
                "name": "dhcp-001",
                "url": "http://192.168.1.6:8000/",
                "role": "primary"
              },
              {
                "name": "dhcp-002",
                "url": "http://192.168.1.7:8000/",
                "role": "standby"
              }
            ]
          } ]
        }
      }
    ],
    "loggers": [ {
      "name": "kea-dhcp4",
      "output_options": [
        {
          "output": "stdout",
          "pattern": "%-5p %m\n"
        },
        {
          "output": "/var/log/kea/kea-dhcp4.log",
          "maxsize": 2048000,
          "maxver": 4
        }
      ],
      "severity": "INFO",
      "debuglevel": 0
    } ],
    "subnet4": [
      <?include "/etc/kea/subnet-1-trust.conf"?>
     ],
    "option-def": [ #// Используется для сети управления unifi AP
      {
        "space": "ubnt",
        "name": "unifi-address",
        "code": 1,
        "type": "ipv4-address"
    } ],
    "client-classes": [ {
      "name": "ubnt",
      #// из: соответствовать, если (подстрока(option dhcp.vendor-class-identifier, 0, 4)) = 'ubnt'
      "test": "substring(option[60].hex,0,4) == 'ubnt'",
      "option-data": [
        {
          "space": "dhcp4",
          "name": "vendor-class-identifier",
          "code": 60,
          "data": "ubnt"
        },
        {
          "name": "vendor-encapsulated-options",
          "code": 43
        },
        {
          "space": "ubnt",
          "name": "unifi-address",
          "code": 1,
          "data": "192.168.1.23"
        }
      ],
      "option-def": [ {
          "name": "vendor-encapsulated-options",
          "code": 43,
          "type": "empty",
          "encapsulate": "ubnt"
        } ]
    } ]
  }
}
#//subnet-1-trust.conf
{
  #// Доверительная сеть
  "id": 1,
  "subnet": "192.168.1.0/24",
  "option-data": [
    {
      "name": "subnet-mask",
      "code": 1,
      "data": "255.255.255.0"
    },
    {
      "name": "routers",
      "code": 3,
      "data": "192.168.1.1"
    },
    {
      "name": "domain-name-servers",
      "code": 6,
      "data": "9.9.9.9, 1.1.1.1"
    }
  ],
  #// 24ч 1 день перед обновлением
  #//"valid-lifetime": 86400,
  "valid-lifetime": 3600,
  #// 3д
  "max-valid-lifetime": 259200,
  "pools": [ {
    "pool": "192.168.1.128 - 192.168.1.254"
  } ],
  "reservations": [ {
    "hostname": "docker-host-001",
    "hw-address": "06:40:1d:7a:f4:b1",
    "ip-address": "192.168.1.11"
  } ]
}

Чтобы протестировать и “очистить” любые возможные кеши, я удалял аренду с помощью restapi. Я остановил службу kea-dhcp4, удалил все строки в файле CSV аренды, относящиеся к тестовому хосту, и снова запустил службу.

http --json POST http://127.0.0.1:8000 \
  service:='["dhcp4"]' \
  command=lease4-del \
  arguments:='{"ip-address": "192.168.1.211"}'

sudo systemctl stop kea-dhcp4-server.service 
sudo sed -i '/docker-host/d' /var/lib/kea/kea-leases4.csv
sudo systemctl start kea-dhcp4-server.service 
sudo tail -f /var/log/kea/kea-dhcp4.log

Затем удалите IP с хоста и перезапустите его сетевую службу или даже полностью перезагрузите хост.

Ответ или решение

Возможные Причины Игнорирования Резервации IP в ISC-Kea DHCP

Вы столкнулись с проблемой, когда резервации IP в системе ISC-Kea DHCP версии 2.2.0 не работают должным образом. Вместо получения заранее заданного IP-адреса, ваше устройство получает динамический IP из диапазона пула подсети. Давайте проанализируем вашу конфигурацию и выясним, в чем может быть ошибка.

1. Проверка Конфигурации Резервации

Согласно предоставленной конфигурации, вы указали резервацию в файле subnet-1-trust.conf:

"reservations": [ {
    "hostname": "docker-host-001",
    "hw-address": "06:40:1d:7a:f4:b1",
    "ip-address": "192.168.1.11"
} ]

Хотя резервация выглядит правильно, важно убедиться, что MAC-адрес устройства, запрашивающего IP, точно совпадает с тем, что указан в конфигурации. Проверьте, что:

  • Устройство, получающее IP, действительно использует MAC-адрес 06:40:1d:7a:f4:b1.
  • Убедитесь, что вы применили корректные настройки, чтобы устройство могло отправить DHCP-запрос с правильным идентификатором.

2. Механизмы Идентификации Хостов

Ваша конфигурация по умолчанию использует hw-address для определения резервации:

"host-reservation-identifiers": [
    "hw-address"
]

Убедитесь, что это соответствует тому, как ваше устройство идентифицируется в сети. Если ваше устройство использует DHCP-клиент с другим методом аутентификации (например, идентификатором DUID), вам нужно будет добавить соответствующее значение в host-reservation-identifiers.

3. Проверка Настроек Подсети

В subnet-1-trust.conf вы указываете пул IP-адресов:

"pools": [ {
    "pool": "192.168.1.128 - 192.168.1.254"
} ]

Убедитесь, что резервация (192.168.1.11) находится вне диапазона динамических адресов, который может выдать сервер. В вашем случае это выполняется, так как указанный адрес не входит в диапазон пулов.

4. Журнал Логов

Вы упомянули, что записываете логи в файл /var/log/kea/kea-dhcp4.log. Настоятельно рекомендуется анализировать этот файл на предмет любых предупреждений или ошибок, связанных с резервациями. Особенно обратите внимание на сообщения, когда ваше устройство отправляет DHCP-запросы – это поможет понять, принимает ли Kea запросы правильно.

5. Очистка Лизинга

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

http --json POST http://127.0.0.1:8000 service:='["dhcp4"]' command=lease4-del arguments:='{"ip-address": "192.168.1.211"}'

Также, стоит ещё раз убедиться, что лизинг, который вы удаляете, действительно относится к мак-адресу вашего клиента, и что он был удален из базы данных перед перезапуском.

6. Перезапуск Сервиса

После очистки данных обязательно перезапустите службу:

sudo systemctl restart kea-dhcp4-server.service

Любые кэшированные данные могут вызвать проблемы с резервацией. Поэтому важно следить за тем, чтобы все изменения входили в силу.

Заключение

Если после проверки всех вышеуказанных пунктов проблема сохраняется, рассмотрите возможность проведения тестов с более простыми конфигурациями. Используйте только один или два устройства с резервацией для изоляции проблем. Также, возможно, вам стоит обратиться к сообществу ISC или на специализированные форумы, где другие пользователи могли сталкиваться с подобной проблемой.

Убедитесь, что ваша конфигурация правильно оформлена и соответствует всем требованиям, это поможет вам избежать множества потенциальных ошибок и обеспечить надежную работу вашего DHCP сервера.

Оцените материал
Добавить комментарий

Капча загружается...