dhcpcd (Español)
dhcpcd es un cliente DHCP y DHCPv6. Actualmente es el cliente DHCP de código abierto que más características tiene, vea su página para una lista completa de características.
Instalación
dhcpcd-uiAUR es una interfaz GTK del demonio dhcpcd, y opcionalmente WPA supplicant. Estas interfaces ofrecen un diálogo de configuración y la capacidad de introducir una contraseña para las redes inalámbricas.
dhcpcd-ui-patchedAUR es una versión parcheada del paquete dhcpcd-uiAUR. Esta utiliza AppIndicator en vez de GtkStatusIcon y compila con gtk3. Posee un icono nítido para la bandeja del sistema cuando se utiliza con KDE.
Iniciar
Para iniciar el demonio para todas las interfaces red, Inicia/Activa dhcpcd.service
.
Para iniciar el demonio para solo una interfaz específica de red, Inicia/Activa dhcpcd@interfaz.service
, donde interfaz se puede encontrar con Configuración de red #Listar dispositivos.
Es recomendable utilizar la unidad de la plantilla, vea #dhcpcd y interfaces de red con systemd para más detalles. En cualquier caso se le asignará una dirección IP dinámica. Para establecer una dirección IP estática, vea #Perfil estático.
Configuración
La configuración principal se hace en /etc/dhcpcd.conf
. Vea dhcpcd.conf(5) para más detalles. Algunas de las opciones frecuentemente utilizadas están resaltadas abajo.
Ruta(s) estática DHCP
Si necesita añadir una ruta estática en el lado del cliente, añádelo a /etc/dhcpcd.exit-hook
. En el ejemplo se observa un hook-script nuevo que añade una ruta estática a una subred VPN en 10.11.12.0/24
via a la puerta de entrada de la maquina a 192.168.192.5
:
/etc/dhcpcd.exit-hook
ip route add 10.11.12.0/24 via 192.168.192.5
Puedes añadir múltiples rutas en este archivo.
Identificador de cliente DHCP
El cliente DHCP puede identificarse de diferentes formas por el servidor:
- hostname (o el valor del nombre del host enviado por el cliente),
- por la dirección MAC del controlador de la interfaz de red con la que se está realizando la conexión, vinculado al
- ID de Asociación de Identidad (IAID), que es una capa de abstracción para diferenciar usos/casos y/o interfaces en un solo host,
- Identificador único de DHCP (DUID).
Para una descripción más extensa, vea RFC 3315.
Dependiendo de la configuración del servidor DHCP algunas opciones serán opcionales u obligatorias para solicitar una concesión de IP a DHCP.
Si la configuración por defecto de dhcpcd falla al obtener una IP, las siguientes opciones están disponibles para usarse en dhcpcd.conf
:
-
hostname
envia el nombre del host establecido en/etc/hostname
-
clientid
envia la dirección MAC como identificador -
iaid <interface>
deriva el IAID para utilizarlo en el detector DHCP. Se tiene que utilizar en un block de la interfaz (iniciada porinterface <interface>
, vea [1]), pero normalmente se utiliza la siguiente opción: - El disparador
duid
utiliza una combinación de DUID y IAID como identificador.
El valor DUID esta establecido en /var/lib/dhcpcd/duid
. Para la eficiencia en la operación de concesión DHCP es importante que sea único para el sistema y se aplique a todas las interfaces de red iguales, mientras el IAID representa un identificador para cada interfaz del sistema (vea RFC 4361).
Tenga mucho cuidado en una red en funcionamiento con DNS dinámicos en asegurarse de que los tres IDs son únicos. Si se presenta valores duplicados DUID en el servidor DNS, por ejemplo, en el caso donde una máquina virtual ha sido clonada y el nombre del host y la MAC se han hecho únicos pero el DUID no se ha cambiado, cada cliente con el DUID duplicado requiere que el servidor elimine el predecesor del registro DNS.
Perfil estático
Los ajustes necesarios están explicados en Configuración de red. Normalmente incluye el nombre de la interfaz de red, dirección IP, dirección del router, y el nombre del servidor.
El perfil estático para dhcpcd se configura en /etc/dhcpcd.conf
, por ejemplo:
/etc/dhcpcd.conf
interface eth0 static ip_address=192.168.0.10/24 static routers=192.168.0.1 static domain_name_servers=192.168.0.1 8.8.8.8
Es posible realizar configuraciones más complicadas, por ejemplo combinar con la opción arping
. Vea dhcpcd.conf(5) para más información.
Volver al perfil anterior
Es posible configurar un perfil estático dentro de dhcpcd y regresar al perfil anterior cuando el requerimiento de DHCP falle. Esto es particularmente útil para máquinas sin monitor (en inglés), donde el perfil estático se puede utilizar como un perfil de "recuperación" para asegurarse de que siempre sea posible conectarse a la máquina.
El siguiente ejemplo configura un perfil estático_eth0
con 192.168.1.23
como dirección IP, 192.168.1.1
como puerta y nombre de servidor, y hace que este perfil sea un respaldo para la interfaz eth0
.
/etc/dhcpcd.conf
# define un perfil estático profile static_eth0 static ip_address=192.168.1.23/24 static routers=192.168.1.1 static domain_name_servers=192.168.1.1 # respaldo para el perfil estático en eth0 interface eth0 fallback static_eth0
Hooks
dhcpcd ejecuta todos los scripts que encuentra en /usr/lib/dhcpcd/dhcpcd-hooks/
en un orden léxico. Vea dhcpcd.conf(5) y dhcpcd-run-hooks(8) para más información.
- Cada script puede desactivarse utilizando la opción
nohook
endhcpcd.conf
. - La opción
env
se puede utilizar para establecer una variable de entorno para todos los hooks. Por ejemplo, puedes forzar el que el hook hostname siempre establezca en nombre del host conenv force_hostname=YES
.
10-wpa_supplicant
Activar este hook creando un enlace simbólico que asegura que siempre se utilice la versión actual, incluso después de actualizaciones:
# ln -s /usr/share/dhcpcd/hooks/10-wpa_supplicant /usr/lib/dhcpcd/dhcpcd-hooks/
El hook 10-wpa_supplicant
, si esta activado, ejecuta automáticamente WPA supplicant (Español) en las interfaces de red inalámbricas. Se inicia solo si:
- Ningún proceso wpa_supplicant esta escuchando a esa interfaz.
- existe un archivo de configuración wpa_supplicant. dhcpcd comprueba
/etc/wpa_supplicant/wpa_supplicant-interface.conf /etc/wpa_supplicant/wpa_supplicant.conf /etc/wpa_supplicant-interface.conf /etc/wpa_supplicant.conf
por defecto, y en ese orden, pero se puede configurar un parche personalizado añadiendo env wpa_supplicant_conf=archivo_de_configuración_del_parche
en /etc/dhcpcd.conf
.
Si wpa_supplicant maneja conexiones inalámbricas por si mismo, el hook puede crear eventos de conexiones no deseadas. Por ejemplo, si para wpa_supplicant el hook puede iniciar la interfaz otra vez. Incluso si utiliza netctl-auto (en inglés), wpa_supplicant se inicia automáticamente con /run/network/wpa_supplicant_interface.conf
por la configuración, por lo tanto iniciarlo otra vez desde el hook no es necesario y puede causar errores en el arranque al analizar el archivo /etc/wpa_supplicant/wpa_supplicant.conf
, que solo contiene valores ficticios en la versión por defecto.
Para desactivar el hook elimine el link simbólico que añadiste o añade nohook wpa_supplicant
en dhcpcd.conf
.
Consejos y trucos
Acelerar DHCP deshabilitando la exploración ARP
Dhcpcd contiene una implementación como recomendación del estándar DHCP (RFC2131 sección 2.2) para comprobar vía ARP si la dirección IP asignada no esta realmente ocupada. Esto puede no ser útil en las redes domésticas, por lo tanto se puede ahorrar alrededor de 5 segundos en cada conexión añadiendo la siguiente linea a /etc/dhcpcd.conf
:
noarp
Esto es equivalente si le pasa --noarp
a dhcpcd
, y desactiva la prueba ARP descrita, aumentando la velocidad de la conexiones a redes con DHCP.
Quitar el arrendamiento antiguo de DHCP
El archivo /var/lib/dhcpcd/interfaz.lease
, donde interfaz
es el nombre de la interfaz que tiene el arrendamiento, contiene la respuesta enviada por el servidor DHCP del actual arrendamiento de DHCP. Para una interfaz inalámbrica, el nombre del archivo es /var/lib/dhcpcd/interfaz-ssid.lease
, donde ssid
es el nombre de la red inalámbrica. Se usa para determinar el último arrendamiento del servidor, y su atributo mtime
se usa para determinar cuando se ha resuelto. La última información de arrendamiento se usa para pedir la misma dirección IP previamente retenida en la red, si está disponible. Si no quiere eso, simplemente elimine este archivo.
Si el servidor DHCP aún le asigna la misma dirección IP, puede deberse a que está configurado para mantener la asignación estable y reconoce el requerimiento del id del cliente DHCP o DUID (vea #Identificador de cliente DHCP). Puedes probarlo parando dhcpcd y eliminando o renombrando /var/lib/dhcpcd/duid
. Dhcpcd generará uno nuevo en la siguiente ejecución.
Tenga en cuenta que el DUID está destinado a ser un identificador persistente sobre los reinicios e interfaces. Si estás transfiriendo el sistema a un nuevo ordenador, preservar este archivo debería hacer que el ordenador se parezca al antiguo.
Diferentes IPs cuando se hace un arranque múltiple
Si está haciendo un arraque dual Arch y OS X o Windows y quiere que cada uno reciba direcciones IP distintas, puedes ejercer control sobre el arrendamiento de IPs especificando un DUID diferente para cada sistema operativo.
En Windows (en XP) el DUID debería estar guardado en
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\Dhcpv6DUID
registro clave.
En OS X es directamente accesible en Network\adapter\dhcp preferences panel
.
Si está utilizando un servidor dnsmasq DHCP, los DUIDs diferentes pueden utilizar las reglas apropiadas dhcp-host=
en su cpnfiguración.
/etc/resolv.conf
Si resolvconf está disponible en la información DNS se enviará a él, si no dhcpcd sobrescribirá automáticamente /etc/resolv.conf
.
La sobreescritura de /etc/resolv.conf
se puede parar desactivando el hook /usr/lib/dhcpcd/dhcpcd-hooks/20-resolv.conf
. Para hacerlo añada lo siguiente a la última sección de /etc/dhcpcd.conf
:
nohook resolv.conf
Alternativamente, puede crear un archivo llamado /etc/resolv.conf.head
conteniendo sus servidores DNS. Dhcpcd antepone este archivo al comienzo de /etc/resolv.conf
.
O puede configurar dhcpcd para utilizar el mismo servidor DNS siempre. Para hacer esto, añade la siguiente linea al final de su /etc/dhcpcd.conf
, donde dns-server-ip-addressses
es una lista deparada por espacios de las direcciones IP DNS.
static domain_name_servers=dns-server-ip-addresses
Por ejemplo, para establecer el servidor DNS de Google:
static domain_name_servers=8.8.8.8 8.8.4.4
/etc/resolvconf.conf
. De esta forma no se sobrescribirán por cualquier software que soporte resolvconf.Solución de problemas
ID del cliente
Si está en una red con DHCPv4 If you are on a network with DHCPv4 que filtra las IDs de los clientes basados en direcciones MAC, necesita cambiar la siguiente linea:
/etc/dhcpcd.conf
# Use el mismo DUID + IAID como se establece en DHCPv6 para el ID del cliente DHCPv4 igual que RFC4361. duid
A:
/etc/dhcpcd.conf
# Utilice la dirección de la interfaz del hardware para el ID del cliente (DHCPv4). clientid
Si no, puede no obtener ningún arrendamiento desde que el servidor DHCP no lea su ID del cliente estilo-DHCPv6 correctamente. Vea RFC 4361 para más información.
Comprobar un problema de DHCP soltando primero la IP
Puede ocurrir un problema cuando DHCP obtiene una asignación IP incorrecta, como que dos routers están enlazados juntos a una VPN. El router que está conectado a través de la VPN puede haber asignado una dirección IP. Para arreglarlo, como root, suelte la dirección IP:
# dhcpcd -k
Luego pida una nueva:
# dhcpcd
Puede que tengas que ejecutar estos dos comandos varias veces.
Problemas con routers no obedientes
Para algunos routers (desobedientes), no podrá conectarse apropiadamente a no haya ser que comentes la linea
require dhcp_server_identifier
en /etc/dhcpcd.conf
. Esto no debería causarle problemas a no ser que tenga múltiples servidores DHCP en su red (no es típico); vea esta página para más información.
dhcpcd y interfaces de red con systemd
dhcpcd.service
puede activarse sin especificar una interfaz. Esto puede, sin embargo, crear una condición en el arranque intentando aplicar un nombre predictivo de la interfaz de red con system-udev:
error changing net interface name wlan0 to wlp4s0: Device or resource busy"
Para evitarlo, habilita dhcpcd por interfaz que debería enlazar como se ha descrito en #Iniciar. La plantilla de abajo, sin embargo, no soporta la conexión en caliente de una conexión por cable y fallará si el cable de red no está conectado. Para tratar el fallo, vea #Tiempo de espera.
También es posible utilizar denyinterfaces
o allowinterfaces
en dhcpcd.conf(5) para parar dhcpcd vinculando a los nombres del kernel, por ejemplo
denyinterfaces wlan* eth*
Tiempo de espera
Si dhcpcd opera en una única interfaz y falla al obtener el arrendamiento (lease time) después de 30 segundos (por ejemplo cuando el servidor no está preparado o el cable no está conectado), saldrá con un error.
Para hacer que dhcpcd espere indefinidamente por una vez, edite la unidad y establece la opción timeout
a 0
:
/etc/systemd/system/dhcpcd@.service.d/timeout.conf
[Service] ExecStart= ExecStart=/usr/bin/dhcpcd -w -q -t 0 %I
Para hacer que espere indefinidamente, deja que la unidad se reinicie después de salir:
/etc/systemd/system/dhcpcd@.service.d/dhcpcdrestart.conf
[Service] Restart=always
Problemas conocidos
dhcpcd@.service causa un inicio lento
Por defecto dhcpcd@.service
espera hasta obtener una dirección IP antes de pasar a segundo plano vía parámetro -w
para dhcpcd. Si la unidad está habilitada, puede causar que en el arranque espere a obtener una dirección IP antes de continuar. Para arreglarlo, crea un archivo de inserción para la unidad con lo siguiente:
/etc/systemd/system/dhcpcd@.service.d/no-wait.conf
[Service] ExecStart= ExecStart=/usr/bin/dhcpcd -b -q %I
Vea también FS#49685.