PyDHCP
ISC DHCP Server ha muerto. Así reza el comunicado oficial. Y no es un anuncio nuevo. El proyecto llegó a EOL en 2022, y aunque todavía sigue funcionando en muchas instalaciones Linux y los paquetes están en los principales repositorios, la realidad es que ya no recibe mantenimiento. Por tanto, no es buena idea seguir apostando por algo que más temprano que tarde desaparecerá y las infraestructuras que dependan de este demonio quedarán expuestas.
¿Y qué queda para reemplazarlo? Las alternativas disponibles más relevantes son:
- Kea DHCP: Es el reemplazo que propone el propio ISC. El problema es que Kea es una solución enterprise, con una arquitectura considerablemente más compleja: base de datos backend opcional, API REST, hooks en C++, múltiples daemons separados por protocolo. Para redes pequeñas o medianas, toda esa complejidad es overhead innecesario sin beneficio real.
-
dnsmasq: Combina DNS y DHCP en un solo daemon liviano. Es una opción válida para redes pequeñas, pero no es un reemplazo directo de
isc-dhcp-server: el formato de configuración es distinto, el manejo de leases es diferente y migrar una instalación existente desde ISC DHCP implica reescribir la configuración desde cero. - dhcpd (versiones fork): Existen forks comunitarios del ISC DHCP, pero su mantenimiento es incierto y no resuelven el problema de fondo: seguir dependiendo de una base de código en C con deuda técnica acumulada.
Ninguna de estas opciones es realmente un reemplazo de
isc-dhcp-server. Por eso, la mejor alternativa era una nueva implementación.
¿Qué es PyDHCP?
PyDHCP es un servidor DHCP IPv4 escrito completamente en Python. La idea es garantizar la compatibilidad con
isc-dhcp-server y de esta manera no afectar el flujo ni obligar a cambiar configuraciones ya existentes.
Básicamente:
- Usa el mismo formato de
dhcpd.conf - Mantiene compatibilidad con
dhcpd.leases - Corre como servicio
systemd - Tiene wrapper
init.d - Funciona sobre UDP 67/68 implementando RFC 2131
- Está pensado como reemplazo directo de
isc-dhcp-server
¿Por qué Python?
Porque es un lenguaje fácil de mantener y ampliamente usado por la comunidad. Además, en la práctica la complejidad de administrar DHCP no está en el daemon sino en los scripts y la automatización que lo rodean. Para eso Python es ideal: integrar lógica adicional es rápido y sin fricciones. Y para redes LAN, Python tiene rendimiento más que suficiente para DHCP.
Alcance
Lo que PyDHCP hace:
- Demonio Python que implementa DHCP (RFC 2131) sobre UDP 67/68
- Lee
/etc/pydhcp/pydhcpd.conf(compatible con el formato dedhcpd.conf) - Escribe
/etc/pydhcp/pydhcpd.leases(compatible con el formato dedhcpd.leases) - Corre como servicio
systemdbajo el usuariopydhcpd - Responde a
/etc/init.d/pydhcpd stop|start(wrapper compatible) - Solo IPv4, interfaz única
Fuera de alcance (no implementado):
- IPv6
- LDAP
- DDNS
- Múltiples interfaces
- BOOTP / PXE
Y eso es intencional. El objetivo no era crear otro monstruo enorme lleno de features que nadie usa, sino algo estable y sencillo para pequeñas y medianas empresas que tienen una sola LAN y prefieren administrar sus IPs con algo más personalizado que un router comercial.
Instalación
La instalación es bastante directa:
sudo apt install -y python-is-python3 wget -qO gitfolder.py https://raw.githubusercontent.com/maravento/vault/master/scripts/python/gitfolder.py chmod +x gitfolder.py python gitfolder.py https://github.com/maravento/vault/pydhcp cd pydhcp sudo bash install.sh
Para actualizar el daemon y las herramientas sin afectar los archivos de configuración (
pydhcpd.conf, pydhcpd.defaults, pydhcpd.leases), ejecutar desde el directorio del proyecto actualizado: sudo bash install.sh --update
Para desinstalar:
sudo bash install.sh --remove
El instalador configura de forma interactiva:
- Interfaz
- IP del servidor
- Subred
- Rango DHCP
Después solo queda definir reservas estáticas, pools y demás parámetros típicos, al mismo estilo que
isc-dhcp-server.
Compatibilidad con isc-dhcp-server
La migración desde
isc-dhcp-server es casi transparente. Por ejemplo: /etc/dhcp/dhcpd.conf -> /etc/pydhcp/pydhcpd.conf /var/lib/dhcp/dhcpd.leases -> /etc/pydhcp/pydhcpd.leases systemctl restart isc-dhcp-server -> systemctl restart pydhcpd
Eso permite reutilizar configuraciones existentes con cambios mínimos.
Herramientas opcionales
PyDHCP incluye dos herramientas opcionales que extienden su funcionalidad:
pyleases.sh
Gestor avanzado de leases y ACLs para
pydhcpd. Parsea pydhcpd.leases, detecta clientes no autorizados, reconstruye pydhcpd.conf a partir de archivos ACL y reinicia el daemon. Diseñado para entornos que aplican control de acceso basado en DHCP. Maneja dos directorios ACL:
/etc/acl/acl_mac/ para clientes autorizados ( mac-proxy.txt, mac-transparent.txt, mac-unlimited.txt) y /etc/acl/acl_dhcp/ para bloqueados ( blockdhcp.txt). El formato de entrada es a;MAC;IP;HOSTNAME; y en modo hotspot: a;MAC;IP;HOSTNAME;END_TIME_EPOCH;
sudo bash tools/pyleases.sh
Como complemento,
pyleases.sh tiene soporte para entornos Hotspot (probado con Unifi Network). Para activarlo basta con habilitar la variable UNIFI_HOTSPOT_ENABLED=true en el script, y usar iptables junto con
unhotspot.sh
, un script auxiliar que gestiona las reglas necesarias para que el daemon coexista correctamente con el portal cautivo. Puede usarse junto con Squid y ACLs. Para mayor información lea Unifi Hotspot con Iptables.
pywebmin.sh
Instalador opcional de un módulo PyDHCP para Webmin. Proporciona una interfaz web para administrar el daemon
pydhcpd: control del servicio (start/stop/restart), tabla de leases activas y editor del archivo de configuración. Requiere que Webmin esté instalado en el sistema. sudo bash tools/pywebmin.sh install
Limitaciones reales en Android e iOS
Vale la pena documentar el comportamiento problemático que tienen Android e iOS con proxies y DHCP. Por ejemplo:
- Ignoran WPAD
- Muchas apps bypassean el proxy manual
- Usan MAC aleatorias
- Muestran "sin internet" aunque todo funcione
Eso no es culpa de PyDHCP, son limitaciones reales de los sistemas móviles modernos, aplicables a cualquier entorno DHCP restrictivo.
systemd e init.d
Aunque hoy todo usa
systemd, PyDHCP incluye compatibilidad con init.d para scripts viejos que aún dependen de eso. Así que ambos funcionan: sudo systemctl restart pydhcpd
O también:
sudo /etc/init.d/pydhcpd restart
Estado del proyecto
El proyecto está marcado como experimental, sin embargo, ya ha sido probado con éxito en Ubuntu 24.04 y actualmente está en uso en varios entornos de producción reales.
Repositorio
El código está publicado en GitHub. Issues y feedback son bienvenidos:
Conclusión
PyDHCP nació de una necesidad concreta: ISC DHCP llegó a su fin y no existe un reemplazo directo que sea simple, compatible y fácil de mantener. El proyecto cubre ese hueco sin pretender competir con soluciones enterprise, sino apuntar a pymes que internamente solo usan IPv4 en su infraestructura LAN.
La idea es simple:
- DHCP IPv4
- Configuración compatible
- Fácil de administrar
- Código legible y auditable
- Sin dependencias absurdas
Y, honestamente, muchas veces eso es exactamente lo que se necesita.

Post a Comment