Отладка DHCP

Skip to end of metadata
Go to start of metadata
Время выполнения инструкции: 60-120 минут

Организация тестовой станции Windows

В Windows создать bat файл с содержимым:

:label1
ping \-n 60 127.0.0.1
ipconfig /release *
ipconfig /renew
goto label1
Многие коммутаторы умеют кешировать lease. Поэтому при отладке их нужно перезагружать.

Отладка получения IP адреса

Проверьте, что dhcp-сервер настроен. В примере использованы:

  • Сервер - 198.51.100.10
  • Клиент - 198.51.100.20

DHCP в широковещательном домене

  1. Просмотрите трафик на сетевом интерфейсе настроенном на приём DHCP запросов:
    tcpdump -pnnei eth0 port 67 or port 68
    

    Вывод команды будет выглядеть следующим образом. В примере показан законченный dhcp диалог.

    10:37:00.623329 08:00:27:97:c8:3c > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 350: 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 08:00:27:97:c8:3c, length 308
    10:37:00.628647 08:00:27:ee:21:c8 > 08:00:27:97:c8:3c, ethertype IPv4 (0x0800), length 342: 198.51.100.10.67 > 198.51.100.20.68: BOOTP/DHCP, Reply, length 300
    10:37:00.632202 08:00:27:97:c8:3c > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 342: 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 08:00:27:97:c8:3c, length 300
    10:37:00.632403 08:00:27:ee:21:c8 > 08:00:27:97:c8:3c, ethertype IPv4 (0x0800), length 342: 198.51.100.10.67 > 198.51.100.20.68: BOOTP/DHCP, Reply, length 300
    

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

    Если в широковещательном домене несколько dhcp клиентов, удобно отфильтровать пакеты тестовой станции по mac адресу:
    tcpdump -pnnei eth0 '(port 67 or port 68) and ether host 08:00:27:97:c8:3c'
    
  2. Просмотрите запрос адреса в логе DHCP сервера:
    • Удалите данные по выданным адресам, чтобы они были взяты из конфигурационного файла:
      rm -f /app/collector/var/lib/dhcpd/*
      

      Перезапустите DHCP сервер:

      chroot /app/collector/ service dhcpd restart
      

      Проследите за логом DHCP сервера:

      tail -f /app/collector/var/log/messages
      
    • Законченный dhcp диалог в логе сервера выглядит так:
      Jul 12 10:30:11 localhost dhcpd: DHCPDISCOVER from 08:00:27:97:c8:3c (windows07) via eth0
      Jul 12 10:30:11 localhost dhcpd: DHCPOFFER on 198.51.100.20 to 08:00:27:97:c8:3c (windows07) via eth0
      Jul 12 10:30:11 localhost dhcpd: 
      Jul 12 10:30:11 localhost dhcpd: DHCPREQUEST for 198.51.100.20 (198.51.100.10) from 08:00:27:97:c8:3c (windows07) via eth0
      Jul 12 10:30:11 localhost dhcpd: DHCPACK on 198.51.100.20 to 08:00:27:97:c8:3c (windows07) via eth0
      
  3. Проверьте, что DHCPOFFER доходит до абонента. То есть абонент получает выданный адрес.
    1. Посмотрите лог DHCP сервера:
      tail -f /app/collector/var/log/messages | fgrep -i dhcpd
      
    2. Если видим, что на запрос IP адреса DHCPDISCOVER биллинг отвечает DHCPOFFER и на этом dhcp диалог по этому абоненту заканчивается и начинается снова, значит DHCPOFFER до абонента от биллинга не доходит.
      Jul 12 10:30:11 localhost dhcpd: DHCPDISCOVER from 08:00:27:97:c8:3c (windows07) via eth0
      Jul 12 10:30:11 localhost dhcpd: DHCPOFFER on 198.51.100.20 to 08:00:27:97:c8:3c (windows07) via eth0
      Jul 12 10:31:00 localhost dhcpd: DHCPDISCOVER from 08:00:27:97:c8:3c (windows07) via eth0
      Jul 12 10:31:00 localhost dhcpd: DHCPOFFER on 198.51.100.20 to 08:00:27:97:c8:3c (windows07) via eth0
      
    3. Возможные причины:
    • На промежуточном коммутаторе настроен dhcp-snooping;
    • Проблема в настройках клиентской станции.

DHCP-relay

Отладка проходит так же, как в широковещательном домене. Нужно убедиться, что relay доступен по IP для биллинга.

Возможные ошибки

Могут возникать ошибки при выдаче ip-адреса абоненту, который подключен через dhcp-relay.
При проверке лога службы dhcp обнаружили ошибку ignored (unknown subnet)

лог /app/collector/var/log/messages
Oct 7 07:02:04 Optimaset dhcpd: DHCPREQUEST for 10.90.163.133 from b0:be:76:6a:b3:55 via 10.90.163.129: ignored (unknown subnet).

Требуется проверить, что в файле конфигурации DHCP /app/collector/etc/dhcp/dhcpd.conf есть запись об этой подсети.

Запрос для проверки
grep '10.90.163.128' /app/collector/etc/dhcp/dhcpd.conf

Если записи нет в списке, а в http://ip-биллинга:8081/settings/collector/dhcp_subnets/ запись существует, требуется изменить, например, dns и нажать кнопку "Сохранить" внизу страницы. После этого вновь убедиться, что конфигурационный файл dhcp сервера создан корректно, со всеми сетями.

Отладка opt82

  1. Для исключения сетевых проблем проведите отладку получения IP адреса;
  2. Проверьте, что отключена опция OPT 82. Создавать статические mac привязки вместо vlan+port;
  3. Настройте на коммутаторе релей и OPT82;
  4. В учётной записи абонента укажите MAC.
    Галочку opt82 оставьте пустой. Поставим её после того, как отладим прием opt82 от коммутатора.
  5. Просмотрите лог dhcp сервера. В логе виден запрос на получение адреса и дальнейшая его обработка. DHCP сервер последовательно проходит по всем типам коммутаторов и разбирает DHCP указанными в них функциями. В конечном счёте адрес выдаётся по MAC адресу.
    /app/collector/var/log/messages
    

    Пример:

    • aa:bb:cc:dd:ee:ff - MAC адрес клиента;
    • 192.0.2.2 - адрес абонента в биллинге;
    • 198.51.100.10 - адрес релэя;
    • 198.51.100.20 - адрес биллинга.
      лог DHCP сервера
      May 19 14:01:32 TestBill dhcpd: RAW:: Lease for 192.0.2.2agent.circuit-id txt=
      May 19 14:01:32 TestBill dhcpd:  agent.circuit-id bin8=0 100 0 7 1
      May 19 14:01:32 TestBill dhcpd:  agent.remote-id txt=<E0><E8><E6>#036#005k
      May 19 14:01:32 TestBill dhcpd:  agent.remote-id bin8=224 232 230 30 5 107
      May 19 14:01:32 TestBill dhcpd: binary-to-ascii: length of buffer 1 not a multiple of width 2!
      May 19 14:01:32 TestBill dhcpd: PARS_ALTER:: Lease for 192.0.2.2 SWIP=<E6>#036#005k VLAN=7 PORT=1 PARAM=none MAC=none GPON_MODEM_PORT=none SVLAN=none
      May 19 14:01:32 TestBill dhcpd: PARS_SNR2940:: Lease for 192.0.2.2 SWIP=198.51.100.10 VLAN=100 PORT= PARAM=none MAC=none GPON_MODEM_PORT=none SVLAN=none
      May 19 14:01:32 TestBill dhcpd: PARS_SNR2950:: Lease for 192.0.2.2 SWIP=<E0><E8><E6>#036#005k VLAN=#001 PORT= PARAM=none MAC=none GPON_MODEM_PORT=none SVLAN=none
      May 19 14:01:32 TestBill dhcpd: PARS_ELTEX_LTE2:: Lease for 192.0.2.2 SWIP=none VLAN=
      May 19 14:01:32 TestBill dhcpd: PARS_Cisco2950:: Lease for 192.0.2.2 SWIP=none VLAN=7 PORT=1 PARAM=none MAC=aa:bb:cc:dd:ee:ff GPON_MODEM_PORT=none SVLAN=none
      May 19 14:01:32 TestBill dhcpd: DHCPREQUEST for 192.0.2.2 (198.51.100.20) from aa:bb:cc:dd:ee:ff via 198.51.100.10
      May 19 14:01:32 TestBill dhcpd: DHCPACK on 192.0.2.2 to aa:bb:cc:dd:ee:ff via 198.51.100.10
      
  6. Убедитесь, что биллинг разбирает данные из opt82 DHCP запроса верно;
  7. Заполните поля opt82 учётной записи. Установите галочку opt82. Биллинг сгенерирует конфигурационный файл dhcpd.
    /app/collector/etc/dhcp/dhcpd.conf
    

    В конфигурационном файле будет создан class и pull для каждой учётной записи с opt82.

            class "match_vlan_0_port_2_ip_198.51.100.10__opt82_param_aa:bb:cc:dd:ee:ff_gpon_modem_port_NULL_svlan_NULL_hw_serial_<null>" {
                    match if ((binary-to-ascii(16, 8, ":", option agent.remote-id) = "aa:bb:cc:dd:ee:ff"));
            }
    
            pool {
                    range 192.0.2.2;
                    allow members of "match_vlan_0_port_2_ip_198.51.100.10_opt82_param_aa:bb:cc:dd:ee:ff_gpon_modem_port_NULL_svlan_NULL_hw_serial_<null>";
            }
    
    
  8. Проверьте, что клиентская станция получает адрес.
    May 19 15:34:30 Avetel dhcpd: DHCPREQUEST for 192.0.2.2 (198.51.100.20) from aa:bb:cc:dd:ee:ff (TestPC) via 198.51.100.10
    May 19 15:34:30 Avetel dhcpd: DHCPACK on 192.0.2.2 to aa:bb:cc:dd:ee:ff (TestPC) via 198.51.100.10
    
Введите метки, чтобы добавить к этой странице:
Please wait 
Ищите метку? просто начните печатать.