Trabajo en un sistema Linux con configuración de red "clásica", es decir, no hay ningún demonio de configuración con todas las funciones que se ejecute como NetworkManager. La mayor parte de la configuración la realiza dhclient.
Necesito detectar situaciones en las que tengo que volver a ejecutar dhclient. (subred diferente debido a cambios en la configuración del cable o la red). Quiero ejecutar la verificación cada 10 minutos sin cortar las conexiones existentes.
Lo que básicamente necesito es una respuesta a preguntas como ¿Es válida mi dirección IP y mi puerta de enlace para la red a la que estoy conectado? o Si renovara mi contrato de arrendamiento de DHCP, ¿obtendré la misma IP nuevamente? . Para responder a la primera pregunta, uno podría hacer ping a alguna IP pública como 8.8.8.8, pero necesito una solución que también funcione en grandes redes privadas de las que no tengo conocimiento. Incluso la puerta de enlace predeterminada no siempre puede ser pingable.
Si supiera que mi ip no es válida, haría "dhclient -r eth0; dhclient eth0" para renovar el contrato de arrendamiento. Sin embargo, esto me desconecta de Internet por un corto tiempo, si ya estoy conectado correctamente.
Descubrí que dhcping es una buena herramienta para preguntar al servidor DHCP sin usar el resultado. Sin embargo, obtengo resultados extraños, que incluso pueden calificar para otra pregunta. Parece que dhcping solo funciona bien si conozco la ip de los servidores de antemano, por lo que falta una herramienta para el DESCUBRIMIENTO DHCP. (y el uso de direcciones de servidor de difusión no es confiable)
Sé que puedo hacer hdcp discover con nmap, sin embargo, instalar nmap no es una buena idea por razones de seguridad.
Preguntas que me gustaría hacer:
- ¿Hay alguna forma de validar mi ip configurada en el contexto de la red conectada?
- ¿Existe la posibilidad de renovar el contrato de arrendamiento de dhclient a pedido?
- ¿Hay herramientas que realizan una transmisión de descubrimiento de dhcp e imprimen el resultado?
Anexo :
A diferencia de los resultados de mi primera prueba, simplemente llamar a dhclient -v no resuelve mi problema. Para aclarar esto, mi problema inicial es que dhclient se ejecuta en modo de fondo (sin renovar el contrato de arrendamiento todo el tiempo). Llamar a dhclient da como resultado:
dhclient (30887) ya se está ejecutando, saliendo.
Sin embargo, esto no es completamente repoducible. A veces tiene éxito. (Es por eso que primero pensé que la opción -v marcaría la diferencia, no lo hace)
Entonces mi pregunta es: si tengo este problema que ya se está ejecutando, aunque dclient actualmente no está haciendo nada, ¿cómo desencadenar una renovación para el proceso en segundo plano?
(La razón detrás de esto es que un cliente DHCP debe vincularse al puerto 68. Cuando este puerto está vinculado por el demonio de fondo dhclient, no se puede ejecutar otra instancia en primer plano)
fuente
La mejor solución que encontré hasta ahora es usar una implementación de descubrimiento de dhcp en python:
https://code.activestate.com/recipes/577649-dhcp-query/
Lo cual es bastante bueno, ya que ya uso Python. Pero tal vez todavía me falta una solución simple y todo esto es demasiado complicado.
editar: esto realmente no ayudó. Mi principal problema es que un proceso en segundo plano de dhclient está ocupando el puerto 68, lo que impide que cualquier otro proceso realice el descubrimiento de DHCP, y no conozco ninguna forma de liberarlo sin abandonar la configuración de red.
fuente