Problema
En entornos de virtualización basados en Proxmox es frecuente conectar adaptadores de red USB de alta velocidad para ampliar la capacidad de ancho de banda sin abrir el chasis. Los modelos que usan el chipset Realtek RTL8159 (también conocidos como r8152) aparecen en el mercado como una opción económica para 10 GbE. Sin embargo, la mayoría de los kernels que incluye Proxmox no reconocen el hardware y no crean una interfaz en ip link. El síntoma típico es la ausencia de cualquier dispositivo enx* o eth* asociado al dongle, a pesar de que el bus USB lo detecta (lsusb muestra el ID 0bda:815a). El problema no es exclusivo de una versión concreta; cualquier nodo que ejecute un kernel sin el mapeo del ID de dispositivo sufrirá el mismo bloqueo.
Causa
El driver genérico r8152 que viene con el kernel Linux está preparado para varios chipsets Realtek, pero la tabla de IDs no incluye el identificador 0bda:815a usado por los adaptadores RTL8159/RTL8156B. Cuando el kernel intenta cargar r8152.ko no encuentra coincidencia y, como consecuencia, no registra ninguna interfaz de red. La causa raíz suele ser una de estas:
- Kernel desactualizado respecto al driver – Proxmox mantiene su propio árbol de headers y a veces se queda atrás de los últimos commits del driver upstream.
- Módulo empaquetado por Proxmox – El paquete
realtek-r8152-dkmsque a veces se incluye en repositorios de terceros no está alineado con la versión del kernel PVE. - Actualizaciones automáticas del kernel – Después de una actualización, el módulo previamente compilado desaparece y el nuevo kernel vuelve a carecer del ID necesario.
En todos los casos, la solución pasa por proporcionar al kernel un módulo que sí reconozca el ID del dispositivo y que se recompila automáticamente cada vez que el kernel cambie.
Solución
La estrategia genérica consiste en compilar el driver oficial de Realtek desde su repositorio, instalarlo mediante DKMS y asegurarse de que el módulo personalizado tenga prioridad sobre cualquier versión incluida por Proxmox. Este enfoque funciona tanto en nodos recién instalados como en clusters con actualizaciones programadas.
Paso 1 – Preparar el entorno de compilación
Instale las herramientas de desarrollo y los headers exactos del kernel activo:
apt update
apt install -y build-essential dkms proxmox-headers-$(uname -r)
Paso 2 – Obtener el código fuente del driver
Descargue la versión oficial (v2.22.1 o superior) desde el sitio de Realtek o un espejo verificado y descomprímala en un directorio de trabajo:
mkdir -p ~/src && cd ~/src
tar xf /ruta/al/archivo/r8152-v2.22.1.tar.gz
Paso 3 – Compilar el módulo contra el kernel actual
cd r8152-v2.22.1
make KERNELDIR=/lib/modules/$(uname -r)/build
Al final debe aparecer r8152.ko en el directorio.
Paso 4 – Preparar el árbol DKMS
mkdir -p /usr/src/r8152-v2.22.1
cp -r * /usr/src/r8152-v2.22.1/
Cree el archivo de configuración dkms.conf:
cat > /usr/src/r8152-v2.22.1/dkms.conf <<'EOF'
PACKAGE_NAME="r8152"
PACKAGE_VERSION="v2.22.1"
BUILT_MODULE_NAME[0]="r8152"
DEST_MODULE_LOCATION[0]="/updates/dkms"
AUTOINSTALL="yes"
EOF
Paso 5 – Registrar, compilar e instalar vía DKMS
dkms add -m r8152 -v v2.22.1
dkms build -m r8152 -v v2.22.1
dkms install -m r8152 -v v2.22.1
DKMS guardará la compilación y la volverá a ejecutar automáticamente cuando el kernel cambie.
Paso 6 – Priorizar el módulo y actualizar initramfs
Proxmox incluye un módulo r8152 sin el ID necesario. Forzamos la carga del módulo DKMS y regeneramos la imagen de arranque:
echo "r8152" > /etc/modules-load.d/r8152.conf
update-initramfs -u -k all
Paso 7 – Limpiar versiones antiguas (opcional)
Si existían instalaciones previas de realtek-r8152 bajo otro nombre, elimínelas para evitar conflictos:
dkms remove -m realtek-r8152 -v 2.21.4 --all
Paso 8 – Reiniciar y validar
reboot
Al volver, ip link debe listar una interfaz enx… cuyo nombre corresponde a la MAC del dongle.
Cuándo aplicar esta solución
- Síntomas:
lsusbmuestra el adaptador, peroip linkno muestra ninguna interfaz;dmesgcontiene líneas como “r8152: unknown device 0bda:815a”. - Entorno: Proxmox VE (cualquier versión que use kernels personalizados) en servidores o estaciones de trabajo homelab.
- Exclusiones: Si el adaptador ya funciona con el driver incluido en el kernel (por ejemplo, versiones más nuevas de Proxmox que ya incorporan el ID), no es necesario recompilar. También, si el nodo está bajo Secure Boot sin MOK enrolado, la firma del módulo DKMS puede fallar; en ese caso desactive Secure Boot o siga el proceso de enrolamiento.
Código
apt update && apt install -y build-essential dkms proxmox-headers-$(uname -r)
mkdir -p ~/src && cd ~/src
tar xf /ruta/al/archivo/r8152-v2.22.1.tar.gz
cd r8152-v2.22.1
make KERNELDIR=/lib/modules/$(uname -r)/build
mkdir -p /usr/src/r8152-v2.22.1
cp -r * /usr/src/r8152-v2.22.1/
cat > /usr/src/r8152-v2.22.1/dkms.conf <<'EOF'
PACKAGE_NAME="r8152"
PACKAGE_VERSION="v2.22.1"
BUILT_MODULE_NAME[0]="r8152"
DEST_MODULE_LOCATION[0]="/updates/dkms"
AUTOINSTALL="yes"
EOF
dkms add -m r8152 -v v2.22.1
dkms build -m r8152 -v v2.22.1
dkms install -m r8152 -v v2.22.1
echo "r8152" > /etc/modules-load.d/r8152.conf
update-initramfs -u -k all
dkms remove -m realtek-r8152 -v 2.21.4 --all || true
reboot
Verificación
-
Comprobar módulo cargado
lsmod | grep r8152Debería aparecer
r8152con la versiónv2.22.1. -
Confirmar que la interfaz existe
ip link show | grep enxEl nombre será algo como
enxf44dad0a4ce3. -
Validar el driver activo
ethtool -i enxf44dad0a4ce3La salida debe contener
driver: r8152yversion: v2.22.1. -
Prueba de rendimiento (opcional)
iperf3 -s # en el nodo receptor iperf3 -c <IP_del_nodo> -P 4 -t 30Se esperan tasas entre 7 Gbps y 7.7 Gbps en enlaces USB‑3.2 Gen 2×1.
Notas adicionales
- Pahole warning: Durante la compilación es normal ver una advertencia sobre la versión de
pahole. No impide la generación del módulo, pero si desea eliminarla instale la versión exacta que usó el kernel (apt install paholecon la versión adecuada). - Secure Boot: Si el nodo tiene Secure Boot activado, DKMS firmará el módulo con la clave MOK del sistema. En caso de error, ejecute
mokutil --import /var/lib/dkms/r8152/v2.22.1/…/signing_key.privy siga el proceso de enrolamiento al reiniciar. - Actualizaciones de Proxmox: Cada vez que el kernel cambie, DKMS recompilará automáticamente el driver. No es necesario volver a ejecutar los pasos de compilación, solo asegúrese de que
dkms statusmuestre “installed” para la nueva versión del kernel. - Compatibilidad con RTL8156B: El mismo driver cubre también el chipset RTL8156B (2.5 GbE). Si el adaptador es de esa familia, los mismos pasos aplican sin cambios.