Soluție pentru pierderea conexiunii în Proxmox cu Realtek RTL8111

Adevărul e că nu aduc nimic nou sub soare, fiind arhicunoscută „problema” a cărei soluție o voi descrie în continuare, aceasta afectând de mai bine de 15 ani toate sistemele de operare Debian și derivate, inclusiv Ubuntu și Linux Mint. Proxmox, după cum probabil știți având în vedere că citiți aceste rânduri, se trage tot din Debian, așadar nici cu acesta nu funcționează corect placa de rețea Realtek RTL8111.

kernel driver use: r8169

După cum poate fi observat în captura de ecran de mai sus, o verificare a driverelor în uz cu ajutorul comenzii lspci -v ne dezvăluie că placa de rețea RTL8111HSD-CG funcționează cu ajutorul modulului kernel r8169, despre care se știe că este problematic de ani buni.

01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)
        Subsystem: Dell RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
        Flags: bus master, fast devsel, latency 0, IRQ 16
        I/O ports at 3000 [size=256]
        Memory at bf104000 (64-bit, non-prefetchable) [size=4K]
        Memory at bf100000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: [40] Power Management version 3
        Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
        Capabilities: [70] Express Endpoint, MSI 01
        Capabilities: [b0] MSI-X: Enable+ Count=4 Masked-
        Capabilities: [100] Advanced Error Reporting
        Capabilities: [140] Virtual Channel
        Capabilities: [160] Device Serial Number 01-00-00-00-68-4c-e0-00
        Capabilities: [170] Latency Tolerance Reporting
        Capabilities: [178] L1 PM Substates
        Kernel driver in use: r8169
        Kernel modules: r8169

Problema se manifestă în special în momente de trafic intens, când descarci sau transferi fișiere de mari dimensiuni în unități de stocare de rețea sau cloud. Soluția temporară constă în repornirea sistemului, însă e doar o chestiune de timp ca acesta să piardă conexiunea cu exteriorul și să trebuiască repornit.

Eu am reîntâlnit-o recent în Proxmox, avându-l pe acesta instalat într-un Dell OptiPlex 3070 Micro. Din senin, în cel mai nepotrivit moment cu putință, de regulă când eram plecat sau în timpul serviciului, Dell-ul nu mai răspundea la ping și odată cu el picau și serviciile găzduite pe acesta, printre care unele foarte importante pentru noi, cum ar fi rețeaua VPN creată cu WireGuard și serverul multimedia Jellyfin. În log, se vedea așa:

Oct 04 23:04:09 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_chipcmd_cond == 1 (loop: 100, delay: 100).
Oct 04 23:04:09 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_ephyar_cond == 1 (loop: 100, delay: 10).
Oct 04 23:04:09 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_ephyar_cond == 1 (loop: 100, delay: 10).
Oct 04 23:04:09 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_ephyar_cond == 1 (loop: 100, delay: 10).
Oct 04 23:04:09 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_ephyar_cond == 1 (loop: 100, delay: 10).
Oct 04 23:04:09 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_ephyar_cond == 1 (loop: 100, delay: 10).
Oct 04 23:04:09 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_ephyar_cond == 1 (loop: 100, delay: 10).
Oct 04 23:04:09 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_eriar_cond == 1 (loop: 100, delay: 100).
Oct 04 23:04:09 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_eriar_cond == 1 (loop: 100, delay: 100).
Oct 04 23:04:09 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_eriar_cond == 1 (loop: 100, delay: 100).
Oct 04 23:05:50 opx kernel: net_ratelimit: 9 callbacks suppressed
Oct 04 23:05:50 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_chipcmd_cond == 1 (loop: 100, delay: 100).
Oct 04 23:05:50 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_ephyar_cond == 1 (loop: 100, delay: 10).
Oct 04 23:05:50 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_ephyar_cond == 1 (loop: 100, delay: 10).
Oct 04 23:05:50 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_ephyar_cond == 1 (loop: 100, delay: 10).
Oct 04 23:05:50 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_ephyar_cond == 1 (loop: 100, delay: 10).
Oct 04 23:05:50 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_ephyar_cond == 1 (loop: 100, delay: 10).
Oct 04 23:05:50 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_ephyar_cond == 1 (loop: 100, delay: 10).
Oct 04 23:05:50 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_eriar_cond == 1 (loop: 100, delay: 100).
Oct 04 23:05:50 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_eriar_cond == 1 (loop: 100, delay: 100).
Oct 04 23:05:51 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_eriar_cond == 1 (loop: 100, delay: 100).
Oct 04 23:07:36 opx kernel: net_ratelimit: 9 callbacks suppressed
Oct 04 23:07:36 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_chipcmd_cond == 1 (loop: 100, delay: 100).
Oct 04 23:07:36 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_ephyar_cond == 1 (loop: 100, delay: 10).
Oct 04 23:07:36 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_ephyar_cond == 1 (loop: 100, delay: 10).
Oct 04 23:07:36 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_ephyar_cond == 1 (loop: 100, delay: 10).
Oct 04 23:07:36 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_ephyar_cond == 1 (loop: 100, delay: 10).
Oct 04 23:07:36 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_ephyar_cond == 1 (loop: 100, delay: 10).
Oct 04 23:07:36 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_ephyar_cond == 1 (loop: 100, delay: 10).
Oct 04 23:07:36 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_eriar_cond == 1 (loop: 100, delay: 100).
Oct 04 23:07:36 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_eriar_cond == 1 (loop: 100, delay: 100).
Oct 04 23:07:37 opx kernel: r8169 0000:01:00.0 enp1s0: rtl_eriar_cond == 1 (loop: 100, delay: 100).

Am avut și noroc, Dell-ul aflându-se acum pe birou, fiind conectat în permanență la un monitor și o tastatură. În apartamentul anterior, unde îl aveam ascuns după NAS, la câțiva metri de monitor și într-o locație în care n-aveam nicio șansă să-i las conectate periferice, mi-ar fi fost mult mai greu să identific vinovatul și, mai mult ca sigur, aș fi căutat soluții mai radicale.

Cum se rezolvă

Pentru început va trebui sa actualizați Proxmox-ul, iar pentru asta va trebui să eliminați sursele Enterprise și adăugate cele gratuite și opționale. După modificarea ei, ar trebui ca lista să fie compusă din următoarele:

root@opx:~# grep -rhE ^deb /etc/apt/sources.list*
deb http://ftp.es.debian.org/debian bookworm main contrib
deb http://ftp.es.debian.org/debian bookworm-updates main contrib
deb http://ftp.es.debian.org/debian bookworm main non-free non-free-firmware
deb http://security.debian.org bookworm-security main contrib
deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription

După instalarea actualizărilor, dacă în Debian și derivate ar fi trebuit sa instalăm linux-headers, în Proxmox instalăm pachetul pve-headers. Adițional, instalăm și framework-ul dkms.

apt install pve-headers

apt install pve-headers

apt install dkms

Repornim Proxmox și instalăm modulul r8168:

apt install r8168-dkms

apt install r8168-dkms

O nouă repornire a Proxmox ne va garanta că modulul anterior nu a fost încărcat și că sistemul are acces la rețea prin intermediul celui recent instalat. Mai mult, pe durata instalării noului modul, dacă totul a funcționat corect, în /etc/modproble.d ar trebui să fi fost generat fișierul r8168-dkms.conf având următorul conținut:

root@opx:~# cat /etc/modprobe.d/r8168-dkms.conf
# settings for r8168-dkms

# map the specific PCI IDs instead of blacklisting the whole r8169 module
alias pci:v00001186d00004300sv00001186sd00004B10bc*sc*i* r8168
alias pci:v000010ECd00008168sv*sd*bc*sc*i* r8168

# if the aliases above do not work, uncomment the following line
# to blacklist the whole r8169 module
#blacklist r8169

Acel fișier îi va cere kernel-ului ca pentru placa de rețea Realtek RTL8111 trebuie să folosească întotdeauna modulul r8168. Verificând prin intermediul aceleiași comenzi, ar trebui să vedeți următoarele:

root@opx:~# lspci -v
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)
        Subsystem: Dell RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
        Flags: bus master, fast devsel, latency 0, IRQ 16
        I/O ports at 3000 [size=256]
        Memory at bf104000 (64-bit, non-prefetchable) [size=4K]
        Memory at bf100000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: [40] Power Management version 3
        Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
        Capabilities: [70] Express Endpoint, MSI 01
        Capabilities: [b0] MSI-X: Enable+ Count=4 Masked-
        Capabilities: [100] Advanced Error Reporting
        Capabilities: [140] Virtual Channel
        Capabilities: [160] Device Serial Number 01-00-00-00-68-4c-e0-00
        Capabilities: [170] Latency Tolerance Reporting
        Capabilities: [178] L1 PM Substates
        Kernel driver in use: r8168
        Kernel modules: r8168

Dacă nu este așa, eliminați modulul și reinstalați, cu siguranță ați omis unul dintre pașii esențiali.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Acest site folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.