[TUTORIAL] Getting the NE2000-ISA Adapter in Bridge Mode to Work With Proxmox

cfabbri

New Member
Apr 3, 2026
2
1
3
I recently had an oddball case where I needed to use an NE2000 network adapter, and the PCI adapter didn't show up in the operating system (Solaris 2.6). The AMD PCNet adapter was recognized but did not work correctly for some reason. When you try to add the ne2k_isa card using the regular parameters in the config file, you get the following error:
Device 'ne2k_isa' can't go on PCI bus

The Proxmox back-end assumes all network cards are PCI and tries to assign the device to the PCI bus with an PCI ID (which is reasonable since you probably shouldn't be running 30 year old OS's in a modern hypervisor). The NE2000-ISA adapter works with vanilla QEMU, so I knew there was some way I could automate this. This is what I came up with that works, and I thought I should share in case anyone needs it.

Note: I'm running a cluster, so I to put the helper scripts in an NFS share. If you're running only one node, you should be able to put these anywhere on the hypervisor. If you're running a PVE cluster and don't have an NFS share, this should work as long as the path and script are exactly the same on all nodes.

1. Create the VM (if you have not already). Do not create it with a network adapter.

2. If present, remove the adapter from the config file, either manually or using the GUI.

3. SSH or console into the hypervisor you have the VM on.

4. Create two unique scripts for the VM in a location the HV can reach. One will bring up the tap, and the other will take down the tap. In this example, I'm creating the scripts on my NFS share (/mnt/pve/nfs/private/), with the following naming scheme to keep things tidy (<VM ID>-ne2k-net-<up/down>.sh). My bridge interface to the outside network is vmbr0, so if yours is different, use your bridge name. Also, keep in mind that the tap interface names probably have to be unique, so if you have multiple VM's requiring this adapter, you may want to start with tap2000 and increment the interface (e.g. tap2001, tap2002, etc.):

100-ne2k-net-up.sh:
Code:
#!/bin/sh

ip tuntap add dev tap2000 mode tap
ip link set tap2000 master vmbr0
ip link set dev tap2000 up

100-ne2k-net-down.sh:
Code:
#!/bin/sh

ip link set dev tap2000 down
ip tuntap del dev tap2000 mode tap

5. Make the scripts executable:
Code:
chmod +x 100-ne2k-net-up.sh
chmod +x 100-ne2k-net-down.sh

6. Add the following to your args: field in the VM's configuration file (/etc/pve/qemu-server/<VM ID>.conf) changing the script path and tap ifname as necessary. Be sure to give it a unique MAC address:

Code:
args: -netdev 'type=tap,id=net0,ifname=tap2000,script=/mnt/pve/nfs/private/100-ne2k-net-up.sh,downscript=/mnt/pve/nfs/private/100-ne2k-net-down.sh' -device 'ne2k_isa,mac=BC:24:11:12:34:56,netdev=net0,id=net0,iobase=0x300,irq=4'

When you start the VM, you should have a working interface that can receive unicast, muticast and broadcast traffic. Keep in mind, you will not see the network interface in the Proxmox GUI.

I'm relatively new to Proxmox, so if there's something that I should absolutely not be doing or just have better way of doing this, please reply and let everyone know. It also goes without saything that this is absolutely a hack, not a supported configuration and can stop working at anytime with an update to either QEMU or Proxmox. I hope this helps someone who is trying to do this.
 
  • Like
Reactions: UdoB