GNU/Linux >> Tutoriales Linux >  >> Linux

Opción de servidor DHCP de Linux 43 opciones encapsuladas del proveedor, ¿cómo formatear/codificar?

La opción 43 de DHCP es un poco extraña. Los proveedores pueden tratarlo como quieran; algunos esperan que los números de opción coincidan con los números de opción de DHCP, otros no.

La estructura básica es 1 byte para una ID de opción, 1 byte para la longitud de los datos de la opción (n), luego n bytes de los datos de la opción real, y enjuague y repita.

Tomemos el ejemplo de dhcp-options. Han pegado las líneas nuevas en lugares estratégicos para que sea más fácil de leer. En realidad, la configuración que han configurado es solo esta:

02:04:AC:11:41:01:03:12:73:75:6e:64:68:63:70:2d:73:65:72:76:65:72:31:37:2d:31:04:12:2f:65:78:70:6f:72:74:2f:72:6f:6f:74:2f:69:38:36:70:63;

Lo cual es bastante difícil de leer a menos que sepas lo que estás buscando. Desglosemos las partes:

  • Byte 1, 0x02 . Esto dice que este bloque está configurado para la opción número 2. La forma en que se interpreta depende del proveedor.
  • Byte 2, 0x04 . Esto dice que los datos para la opción 2 ocuparán los próximos 4 bytes.
  • Bytes 3-6, 0xAC114101 . Estos cuatro bytes son los datos reales. Como viste cuando intentaste decodificarlo, no son datos legibles.
  • Byte 7, el comienzo del siguiente bloque de opciones , 0x03 . Toda la cadena comienza de nuevo, esto dice que la siguiente configuración es para la opción 3.
  • y así sucesivamente, para 3 secciones

Otro ejemplo, de la página wiki de snom:

42:0c:68:74:74:70:3a:2f:2f:74:65:73:74:00:43:12:73:6e:6f:6d:2f:73:65:74:74:69:6e:67:73:2e:70:68:70:00;
  • Byte 1, 0x42 . 42 en hexadecimal es 66, para el código de opción 66.
  • Byte 2, 0x0c . Longitud de 12 bytes.
  • Bytes 3-14, 0x687474703a2f2f7465737400 . Este es http://test con un byte nulo (0x00 ) al final. No estoy seguro de por qué tienen eso allí.
  • Byte 15, 0x43 . Opción 67.
  • Byte 16, 0x12 . longitud de 18 bytes.
  • Bytes 17-34, 0x736e6f6d2f73657474696e67732e70687000 . snom/settings.php . Nuevamente, el byte nulo al final.

Entonces, digamos que necesita construir una opción 43 con http://phone.example.com como opción 66 y phonesettings.txt como opción 67.

  • Byte 1, código de opción 66, 0x42
  • Byte 2, longitud de 24 bytes en http://phone.example.com , entonces 0x18
  • Bytes 3-26, los datos. 0x687474703a2f2f70686f6e652e6578616d706c652e636f6d
  • Byte 27, código de opción 67, 0x43
  • Byte 28, longitud de 17 bytes en phonesettings.txt , entonces 0x11
  • Bytes 29-45, datos. 0x70686f6e6573657474696e67732e747874

Entonces, una cadena de configuración completa de:

42:18:68:74:74:70:3a:2f:2f:70:68:6f:6e:65:2e:65:78:61:6d:70:6c:65:2e:63:6f:6d:43:11:70:68:6f:6e:65:73:65:74:74:69:6e:67:73:2e:74:78:74;

Si eso no funciona, intente agregar los bytes nulos al final de las cadenas de datos (y aumente el campo de longitud en consecuencia) como en su ejemplo:es posible que deseen bytes nulos al final de cada opción o un número par de bytes para la longitud de cada opción. Esa es la desventaja de la opción 43:¡pueden hacer lo que quieran!


Esa es definitivamente la forma más horrible de configurar la opción 43. En su lugar, debe usar la sintaxis de "espacio de opción de proveedor" de ISC que le permite obtener una lectura humana de lo que configuró y evitar errores:

option space db;
option db.db-server code 1 = ip-address;
option db.loginid code 2 = text;
option db.db-name code 3 = text;

Jean-Yves Bisiaux


Recuerde usar la encapsulación local:

option space cisco;
option cisco.wlc code 241 = array of ip-address;
option local-encapsulation code 43 = encapsulate cisco;
option cisco.wlc 10.7.3.6, 10.7.3.2;

Linux
  1. Cómo particionar y formatear una unidad en Linux

  2. Cómo usar SSH en Linux desde Android

  3. Cómo configurar SSH sin contraseña en Linux

  4. Así es como funciona un servidor Linux

  5. Cómo instalar un servidor Linux de virtualización

Cómo formatear particiones de disco en Linux

Cómo instalar Apache en Arch Linux

Cómo SSH al servidor a través de Linux

Cómo instalar Webmin en Ubuntu Linux

Cómo instalar Jenkins en Rocky Linux 8

Cómo hacer un servidor de Minecraft en distribuciones de Linux