Я пытаюсь настроить свой сервер Ubuntu 16.04 LTS Xenial для запуска DHCP-сервера, который предоставляет необходимую информацию для очень конкретного устройства.
Это устройство представляет собой ТВ-декодер от Orange ISP (французским поставщиком является Sagem), и оно работает только в том случае, если IP-адрес назначен Livebox 3 Orange (TM) (того же поставщика). Это ограничение позволяет избежать использования DHCP-сервера, отличного от предоставляемого Orange.
Если я хочу использовать свой собственный DHCP-сервер, работающий в Ubuntu 16.04, чтобы избежать работы на Livebox (это дерьмо), мне нужно адаптировать свою конфигурацию.
Протокол начальной загрузки (ACK) с использованием TV Decoder и DHCP, оба из Sagem
Message type: Boot Reply (2)
Hardware type: Ethernet (0x01)
Hardware address length: 6
Hops: 0
Transaction ID: 0x35139a37
Seconds elapsed: 0
Bootp flags: 0x8000, Broadcast flag (Broadcast)
Client IP address: 0.0.0.0
Your (client) IP address: 192.168.1.153
Next server IP address: 192.168.1.1
Relay agent IP address: 0.0.0.0
Client MAC address: Sagemcom_37:a1:9a (f0:82:61:37:a1:9a)
Client hardware address padding: 00000000000000000000
Server host name not given
Boot file name not given
Magic cookie: DHCP
Option: (53) DHCP Message Type (ACK)
Length: 1
DHCP: ACK (5)
Option: (54) DHCP Server Identifier
Length: 4
DHCP Server Identifier: 192.168.1.1
Option: (51) IP Address Lease Time
Length: 4
IP Address Lease Time: (843s) 14 minutes, 3 seconds
Option: (58) Renewal Time Value
Length: 4
Renewal Time Value: (421s) 7 minutes, 1 second
Option: (59) Rebinding Time Value
Length: 4
Rebinding Time Value: (737s) 12 minutes, 17 seconds
Option: (1) Subnet Mask
Length: 4
Subnet Mask: 255.255.255.0
Option: (6) Domain Name Server
Length: 4
Domain Name Server: 192.168.1.1
Option: (15) Domain Name
Length: 4
Domain Name: home
Option: (28) Broadcast Address
Length: 4
Broadcast Address: 192.168.1.255
Option: (3) Router
Length: 4
Router: 192.168.1.1
Option: (125) V-I Vendor-specific Information
Length: 41
Enterprise: The Broadband Forum (formerly 'ADSL Forum') (3561)
Length: 36
Option 125 Suboption: (4) GatewayManufacturerOUI
Length: 6
GatewayManufacturerOUI: 307CB2
Option 125 Suboption: (5) GatewaySerialNumber
Length: 15
GatewaySerialNumber: AN16XXXXXXXXXX
Option 125 Suboption: (6) GatewayProductClass
Length: 9
GatewayProductClass: Livebox 3
Option: (255) End
Option End: 255
Чтобы эмулировать то же поведение с моего собственного ISC DHCP-сервера в Убунти, я настроил его, основываясь на найденной документации и опциях.
По сути, дело в том, чтобы отправлять только на декодер телевизора следующие дополнительные коды:
- Код 15: Доменное имя
- Код 72: сервер World Wide Web по умолчанию.
- Код 125: Информация о поставщике VI
На основе документации ISC DHCP-сервера существуют три кода, которые можно легко отправить, добавив удобные параметры:
- текст доменного имени
- IP-адрес www-сервера
- строка с параметрами поставщика
Во-первых, я попробовал так:
/etc/dhcp/dhcpd.conf
# Create an option namespace called orangetv
option space orangetv code width 1 length width 1;
option orangetv.GatewayManufacturerOUI code 4 = text;
option orangetv.GatewaySerialNumber code 5 = text;
option orangetv.GatewayProductclass code 6 = text;
# Linux Router
subnet 192.168.1.0 netmask 255.255.255.0 {
option domain-name-servers 192.168.1.1;
option broadcast-address 192.168.1.255;
option subnet-mask 255.255.255.0;
option routers 192.168.1.5;
range 192.168.1.100 192.168.1.199;
class "sagem-vendor-classes" {
match if substring(option vendor-class-identifier, 0, 5) = "sagem";
option domain-name "home";
option www-server 193.253.67.89;
vendor-options-space orangetv;
option orangetv.GatewayManufacturerOUI "307CB2";
option orangetv.GatewaySerialNumber "AN16XXXXXXXXXXX";
option orangetv.GatewayProductclass "Livebox 3";
}
}
После сохранения новой конфигурации я проверил синтаксис конфигурации, выполнив: sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf
Затем я перезапустил сервер DHCP, чтобы перезагрузить новую конфигурацию (ISC DHCP 4.3 иногда не удается перезапустить и перезагрузить новую конфигурацию. Это как-то связано с сервером Apache2. Поэтому я предлагаю форсировать его):
sudo -i
service dhcp restart
service isc-dhcp-server restart
service isc-dhcp-server6 restart
service apache2 restart
Теперь я перезагрузил телевизор Decoded и снова проследил сеть с помощью Wireshark. Результат Bootstrap ACK был
Message type: Boot Reply (2)
Hardware type: Ethernet (0x01)
Hardware address length: 6
Hops: 0
Transaction ID: 0x70907f18
Seconds elapsed: 0
Bootp flags: 0x8000, Broadcast flag (Broadcast)
Client IP address: 0.0.0.0
Your (client) IP address: 192.168.1.153
Next server IP address: 192.168.1.5
Relay agent IP address: 0.0.0.0
Client MAC address: Sagemcom_37:a1:9a (f0:82:61:37:a1:9a)
Client hardware address padding: 00000000000000000000
Server host name not given
Boot file name not given
Magic cookie: DHCP
Option: (53) DHCP Message Type (ACK)
Length: 1
DHCP: ACK (5)
Option: (54) DHCP Server Identifier
Length: 4
DHCP Server Identifier: 192.168.1.5
Option: (51) IP Address Lease Time
Length: 4
IP Address Lease Time: (843s) 14 minutes, 3 seconds
Option: (1) Subnet Mask
Length: 4
Subnet Mask: 255.255.255.0
Option: (3) Router
Length: 4
Router: 192.168.1.5
Option: (6) Domain Name Server
Length: 4
Domain Name Server: 192.168.1.1
Option: (15) Domain Name
Length: 4
Domain Name: home
Option: (28) Broadcast Address
Length: 4
Broadcast Address: 192.168.1.255
Option: (72) Default WWW Server
Length: 4
Default WWW Server: 193.253.67.89
Option: (255) End
Option End: 255
Padding: 0000000000000000
Как вы заметили, опции 15 и 72 были правильно проанализированы, так как опция 125 отсутствует. Итак, я попытался использовать инкапсулированные параметры поставщика, как рекомендовано в руководстве. Я использовал
option vendor-encapsulated-options 7d:29:00:00:0d:XXXXXXXX:20:33
вместо метода vendor-options-space, но снова не удалось.
Я использовал другой обходной путь для отправки кода 125, как описано в [ https://lists.isc.org/pipermail/dhcp-users/2012-July/015793.html][1]
/etc/dhcp/dhcpd.conf
# Create an option namespace called orangetv
option space orangetv code width 1 length width 1;
option orangetv.GatewayManufacturerOUI code 4 = text;
option orangetv.GatewaySerialNumber code 5 = text;
option orangetv.GatewayProductclass code 6 = text;
# Package the orangetv namespace into option 125
option space vivso code width 4 length width 1;
option vivso.orangetv code 3561 = encapsulate orangetv;
option vivso.iana code 0 = string;
option op125 code 125 = encapsulate vivso;
# Linux Router
subnet 192.168.1.0 netmask 255.255.255.0 {
option domain-name-servers 192.168.1.1;
option broadcast-address 192.168.1.255;
option subnet-mask 255.255.255.0;
option routers 192.168.1.5;
range 192.168.1.100 192.168.1.199;
class "sagem-vendor-classes" {
match if substring(option vendor-class-identifier, 0, 5) = "sagem";
option domain-name "home";
option www-server 193.253.67.89;
option vivso.iana 01:01:01;
option orangetv.GatewayManufacturerOUI "307CB2";
option orangetv.GatewaySerialNumber "AN16XXXXXXXXXXX";
option orangetv.GatewayProductclass "Livebox 3";
}
}
Несмотря на эти конфигурации, DHCP-сервер не отправляет код 125, выигрывает специфика поставщика.
Любое другое предложение?