10GbE on a Budget: USB Adapters for Your Homelab

USB 10GbE for mini PC homelabs: the Realtek RTL8159, the 20 Gbps USB port it needs, Linux driver and firmware, Proxmox setup, and when PCIe or Thunderbolt is better.

A budget USB 10GbE adapter plugged into a mini PC next to a homelab switch with Ethernet cables
Affiliate disclosure: This article contains affiliate links. If you buy through them, I earn a small commission at no extra cost to you. I only link to hardware and services I actually use or have tested.

Gigabit Ethernet quietly throttles NFS mounts, VM migrations and backups in many homelabs. On mini PCs without a PCIe slot, USB is the only way to add faster networking. But be careful what you buy: many “fast” USB adapters are 2.5 or 5 GbE.

Know your chips

ChipSpeedLinux driver
Realtek RTL8156 / RTL8156B / RTL8156BG2.5 GbEr8152
Realtek RTL81575 GbEr8152 (support added in 2026)
Aquantia/Marvell AQC111U5 GbEaqc111
Realtek RTL815910 GbEr8152, mainline from Linux 7.2 (Phoronix)
Marvell AQC107/AQC113 (Thunderbolt adapters)10 GbEatlantic

For true 10GbE over USB, the RTL8159 is the chip to look for. Thunderbolt 10GbE adapters with Marvell chips are the other option on machines with Thunderbolt or USB4.

The port matters

The RTL8159 is designed for USB 3.2 Gen 2x2 (20 Gbps), Thunderbolt 3/4 or USB4. Plugged into an ordinary USB 3.2 Gen 2 (10 Gbps) port it still works, but can’t reach full 10GbE once protocol overhead is counted. In a test posted with the Linux driver patches, an RTL8159 on a 20 Gbps port reached about 8.96 Gbps with iperf3. Check which USB ports your mini PC actually has before buying.

Linux driver and firmware

uname -r                       # 7.2 or newer for mainline RTL8159 support
lsmod | grep r8152
dmesg | grep -i r8152
ip -br link                    # new interface, usually enx<mac>
ethtool enx<mac> | grep Speed  # check the negotiated link speed

The RTL8159 needs PHY firmware to link at 10G; according to the driver discussion, without it you only get 5G. On Debian and Proxmox the Realtek firmware comes from firmware-realtek (non-free-firmware). On kernels older than 7.2 you’d need Realtek’s out-of-tree driver, which you have to rebuild with every kernel update. Stick with a kernel that supports it natively.

Configuring a Static IP on Proxmox

On Proxmox, you’ll want to either bridge the USB adapter or assign it directly to a VM/container. For a host-level static IP, edit /etc/network/interfaces:

auto enx001122334455
iface enx001122334455 inet static
    address 10.0.10.5/24
    gateway 10.0.10.1

Then bring it up:

ifup enx001122334455

To create a Linux bridge on top of it for VM passthrough:

auto vmbr1
iface vmbr1 inet static
    address 10.0.10.5/24
    gateway 10.0.10.1
    bridge-ports enx001122334455
    bridge-stp off
    bridge-fd 0

Restart networking or reboot the node. VMs can now be assigned vmbr1 as a second NIC on your 10GbE segment.

Test throughput yourself

Before trusting it with real workloads, measure:

iperf3 -s                         # on the other machine
iperf3 -c 10.0.10.5 -t 30 -P 4    # on the USB adapter's host

Compare a single stream and several parallel streams, and watch CPU load on the mini PC: USB networking costs more CPU than a PCIe NIC. Check ethtool for the link speed if results look capped at 5 Gbps (firmware) or around 2.5 Gbps (wrong adapter).

Setting Up a Fast NFS Share

Once your 10GbE interface is up, here’s a minimal NFS server setup on the Proxmox/Ubuntu host to serve VM storage or bulk data:

sudo apt install nfs-kernel-server

# Create export directory
sudo mkdir -p /data/nfs-fast
sudo chown nobody:nogroup /data/nfs-fast

# Add to /etc/exports
echo '/data/nfs-fast 10.0.10.0/24(rw,sync,no_subtree_check,no_root_squash)' \
  | sudo tee -a /etc/exports

sudo exportfs -ra
sudo systemctl restart nfs-kernel-server

On the client side, mount with options tuned for high throughput:

sudo mount -t nfs -o rw,hard,rsize=1048576,wsize=1048576 \
  10.0.10.5:/data/nfs-fast /mnt/fast-nfs

For a persistent Docker-based NFS client that other containers can use, a compose snippet:

services:
  app:
    image: your-app:latest
    volumes:
      - nfs-data:/app/data

volumes:
  nfs-data:
    driver: local
    driver_opts:
      type: nfs
      o: "addr=10.0.10.5,rw,hard,rsize=1048576,wsize=1048576,nfsvers=4"
      device: ":/data/nfs-fast"

USB 10GbE vs PCIe: Honest Comparison

USB adapters aren’t the right tool for every node. Here’s where each makes sense:

Go USB when:

  • Your node is a mini PC or NUC with no PCIe slot (check it has a 20 Gbps USB, USB4 or Thunderbolt port)
  • You need temporary 10GbE for a backup run or migration
  • You’re testing whether 10GbE even helps your workload before committing to a PCIe upgrade
  • Budget is tight and you need multiple nodes upgraded at once

Go PCIe when:

  • The node is a full ATX/mATX server with an open slot
  • You need consistent sub-millisecond latency (USB adds CPU interrupt overhead)
  • You’re running SR-IOV or need the NIC directly attached to a VM via PCIe passthrough
  • The workload is storage-intensive 24/7 (USB adapters get warm under sustained load)

Used PCIe 10GbE cards (for example Intel X550 for RJ45, or Mellanox ConnectX cards for SFP+) are often cheap on the second-hand market. If you have the slot, use it.

Heat

10GbE adapters, USB or PCIe, run warm under sustained load. Give USB adapters some airflow rather than burying them behind a mini PC in a closed cabinet, especially for long transfers.

Related hardware (affiliate links. They help fund the site at no extra cost to you):

What’s Next

Frequently Asked Questions

Do USB 10GbE adapters work out of the box on Linux?
The common one, Realtek's RTL8159, is handled by the r8152 driver, with mainline support added in Linux 7.2; older kernels need Realtek's out-of-tree driver. It also needs PHY firmware for 10G link speed; without it, reports show only 5G links.
Can a USB adapter really do 10GbE?
Only on a fast enough port. The RTL8159 is designed for USB 3.2 Gen 2x2 (20 Gbps), Thunderbolt or USB4. A test on a 20 Gbps port reached about 9 Gbps with iperf3. On a 10 Gbps USB 3.2 Gen 2 port you won't reach full 10GbE.
Should I use a USB 10GbE adapter or a PCIe card?
PCIe if the machine has a slot: lower CPU overhead, no USB quirks, and passthrough options. USB or Thunderbolt adapters are for mini PCs and laptops without a slot.

Get notified when new articles and designs land:

No spam. Unsubscribe any time.

Sergej Voronko
Sergej Voronko
SAP Basis · Senior Operations Manager · Linux infrastructure engineer
About the author →

[discussion]

Comments are powered by Giscus — backed by GitHub Discussions. Sign in with GitHub to join the conversation.