Отладка 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 для биллинга.

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

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).

Ошибка может возникать при выдаче IP-адреса абоненту, который подключен через dhcp-relay.

Требуется проверить, что в файле конфигурации 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 сервера создан корректно, со всеми сетями.

unknown network segment

лог /app/collector/var/log/messages
Jan 10 19:27:19 carbon dhcpd: DHCPDISCOVER from 34:0a:98:88:7a:d8 via 10.10.10.1: unknown network segment

Ошибка может возникать при выдаче IP-адреса абоненту, который подключен через dhcp-relay или запрос проходит несколько релеев.

Убедитесь, что для IP релея, с которого поступает запрос (в примере 10.10.10.1) заведена подсеть. Можно добавить подсеть только на IP релея, например "10.10.10.1/32", если адреса для абонентов принаджежат другой подсети.

Отладка 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 
Ищите метку? просто начните печатать.