[Guide] Resolve Realtek NIC Stability Issues on pfSense (2.4.4, 2.4.5, 2.5.0)

If you (for some reason) are running a pfSense machine with a Realtek NIC, you may have noticed it randomly shits the bed when under load.

Well, the default drivers in the FreeBSD kernel are older than dirt and god awful (if you mention this to them they get real confrontational), and Netgate won’t touch vendor driver distribution with a 10 foot pole. When the NIC is under load, it doesn’t respond to the software watchdog in time, and is reset. Happens with increasing frequency with a constant load, until it starts happening about 100 times a minute and the connection never comes back up.

Good news: you can load your own driver module that fixes this. I’ve uploaded 64-bit versions of 1.95 for pfSense 2.4.4, 2.4.5, and 2.5.0. If you have a different version and would like a precompiled module, let me know and I’ll build one for you.

I am assuming you are using the shell. You can also use the virtual shell in the UI (Diagnostics->Command Prompt) along with the file editor and do the same stuff.

realtekdrivers.zip (413.6 KB)

  1. Download, unzip, and copy the module that matches your FreeBSD version (uname -rs) to /boot/kernel. Download it to your desktop and use SCP to copy it, or download it to your pfSense machine via fetch/curl/etc. pfSense 2.4.4 is 11.2, 2.4.5 is 11.3, 2.5.0-devel is 12.0.
commands to do this on your pfSense box (click me):
  1. Download the archive to your current working directory: fetch -o realtek.zip https://forums.serverbuilds.net/uploads/short-url/h4GBN8hf75wt3RcOLC36wL1MRVJ.zip
  2. Extract: unzip realtek.zip
  3. Copy (2.4.4): cp realtekdrivers/11.2/1.95/if_re.ko /boot/kernel
    Copy (2.4.5): cp realtekdrivers/11.3/1.95/if_re.ko /boot/kernel
    Copy (2.5.0): cp realtekdrivers/12.0/1.95/if_re.ko /boot/kernel
  1. Change perms of the if_re.ko file:

    chown root:wheel /boot/kernel/if_re.ko
    chmod 0555 /boot/kernel/if_re.ko

  2. Edit /boot/loader.conf.local (may need to be created) and add the line if_re_load="YES" I think it only has Vi by default, which is extremely annoying if you’re not familiar with it, so you can pkg install nano to make this easy (you’d then nano /boot/loader.conf.local).

  3. Enter the command kldload if_re.ko and if there’s no output, it’s been loaded (verify with kldstat)

  4. Reboot your machine and note how your Realtek interfaces don’t constantly kill themselves under load.

3 Likes

2.4.5 was recently released, is there a module available for it? It’s FreeBSD version 11.3.

Probably not, I’ll build one at some point today. It’s likely the other 11.x module will work, generally the major version changes are what breaks em - I’m still gonna make one though.

Edit: Built and uploaded.

1 Like

For this step, the file does not exist previously on my pfSense install. Do I assume it needs to be created? Or would there be another existing file in it’s place?

1 Like

It will need to be created, as by default there is only the /boot/loader.conf file, and the .local file is a user override that won’t be replaced with updates. nano won’t care either way if it doesn’t exist when you start though. Updating the guide to specify that.

1 Like

Excellent, thanks for clarifying!

Hello,

Which version of the driver is it ?

Realtek released the 1.96 version which support the RTL8125B, would you mind compiling this version please ? It to be used with OPNsense.

Regards.

It’s 1.95, but I have the source for 1.96 and can compile it. Which version of OPNsense are you using?

if you could provide the driver 1.96.04 for OPNsense 20.7 would be great.