![Detección de MAC no válida del servidor dhcpd](https://rvso.com/image/768933/Detecci%C3%B3n%20de%20MAC%20no%20v%C3%A1lida%20del%20servidor%20dhcpd.png)
En mi configuración de DHCP, tengo activado el enlace de confirmación para guardar la información del dispositivo. Mi problema es que algunas de las direcciones MAC dejan de ser válidas:
8:7c:39:cf:b6:3f
- esto debería comenzar con cero
8:d0:b7:52:f9:68
- también esto
midhcpd.conf
set clientmac = binary-to-ascii(16,8,":",substring(hardware,1,6));
Respuesta1
Depende de lo que uses para analizarlo, se puede argumentar que es completamente válido omitir los ceros del prefijo, y eso es lo que hacemos la mayor parte del tiempo porque no hay una definición de cuántos dígitos debe haber.
Sin embargo, si omitimos la parte sobre si esto no es válido y por qué o no y en su lugar preguntamos "¿Cómo puedo obtener esto en el formato deseado?", podemos proporcionar una respuesta.
En este casoisc tiene un artículo de KB al respecto
Esto no es un error. El problema es que la función de binario a ascii no "sabe" nada sobre el uso previsto de los dígitos binarios convertidos y es inusual incluir ceros a la izquierda al imprimir valores numéricos.
Sin embargo, con un poco de manipulación adicional aún es posible obtener el resultado deseado:
set foo = concat (
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,1,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,2,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,3,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,4,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,5,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,6,1))),2)
);
(Funciona convirtiendo cada "componente" por separado, agregándole un cero inicial (en caso de que sea necesario); tomando los dos últimos caracteres hexadecimales y luego concatenándolos todos juntos nuevamente).
Respuesta2
Esta no es una respuesta, pero solo quiero compartir esta configuración. Donde el servidor DHCP establece el nombre del archivo de arranque (opción 67) para que contenga la dirección mac del cliente. Pero la mac se cambia para terminar con 00
o 80
. Cuál es la dirección mac base de los conmutadores Cisco. Entonces, independientemente de qué mac use el conmutador de su grupo de direcciones mac. Seguirá obteniendo el mismo archivo de configuración.
# Option 66
option tftp-server-name "198.51.100.19";
# Option 67
# Set to "switch-config/by-mac/<mac-of-client>"
# If the mac ends with 80-ff, set it to 80, else 00.
# Because the base MAC either ends with 00 or 80.
if substring(suffix (concat ("0", binary-to-ascii (2, 8, "", substring(hardware,6,1))),8), 0, 1) = "1"
{
option bootfile-name = concat(
"switch-config/by-mac/",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,1,1))),2),
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,2,1))),2),
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,3,1))),2),
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,4,1))),2),
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,5,1))),2),
"80",
"");
} else {
option bootfile-name = concat(
"switch-config/by-mac/",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,1,1))),2),
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,2,1))),2),
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,3,1))),2),
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,4,1))),2),
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,5,1))),2),
"00",
"");
}