OPNsense on Proxmox: Build a Dedicated Home Firewall

OPNsense on Proxmox: Build a Dedicated Home Firewall

· 12 min read
homelab-monitoring

Your ISP gives you a modem/router combo and calls it a firewall. It is not. You cannot inspect its logs, write per-device rules, enable DNS filtering, or run IDS/IPS. All your home traffic passes through a box you do not own, cannot extend, and mostly cannot see inside.

This guide fixes that. By the end, OPNsense will sit between your ISP and every device in your home — on an Intel N100 MiniPC drawing about 6W idle, running on top of Proxmox.

Target audience: Homelab users comfortable with Linux CLI and basic networking.

Environment: MiniPC T9 Plus (Intel N100, 2x Realtek RTL8111/8168 GbE NICs), Proxmox VE 9.1.6, OPNsense 26.1.2, FPT Vietnam fiber (PPPoE).


The Problem With My ISP Router

FPT Vietnam (and most ISPs) provide an optical fiber connection with a modem/ONT and a combined router AX3000CV2. An 880 MHz dual-core CPU is fine for routing/NAT but weak for:

  • IDS/IPS (Suricata)
  • Advanced firewall rules
  • VLAN segmentation
  • DNS filtering
  • Traffic monitoring
  • VPN encryption

Realistic Role for This Router

Good forNot good for
ISP modem / ONTHomelab firewall
Wi-Fi access pointNetwork segmentation
Simple home routerSecurity monitoring

Before: Every Packet Goes Through a Black Box

Diagram

After: OPNsense in the Path

Diagram

Now every packet flows through a firewall you control. You can log it, block it, inspect it, and alert on it.


Hardware: MiniPC T9 Plus (Intel N100)

The N100 is an ideal edge firewall platform:

SpecValue
CPUIntel N100 (4 cores, Alder Lake-N)
TDP~6W
RAM16GB DDR5 (model-dependent)
Storage256GB NVMe (plenty for Proxmox + OPNsense)
NICs2x Realtek RTL8111/8168 (GbE)

Two physical NICs mean one dedicated WAN port and one dedicated LAN port — exactly what a firewall needs. GbE is sufficient; FPT’s optical plans top out around 1Gbps.


Why Proxmox Instead of Bare-Metal OPNsense

This is the most important section in the guide. If you try to install OPNsense directly on the T9 Plus, you will hit a wall.

RTL8111/8168 May Have Issues on Bare-Metal FreeBSD

OPNsense is built on FreeBSD. While FreeBSD has an re driver for RTL8111/8168, certain revisions of these NICs can behave unreliably — dropped packets, link flapping, or failure to initialize. On the T9 Plus specifically, bare-metal OPNsense had NIC stability issues.

The fix: install Proxmox (Linux) first. Proxmox handles the RTL8111/8168 NICs natively via the r8169 driver, bridges the physical NICs at the Linux layer, and presents VirtIO network devices to the OPNsense VM. FreeBSD has excellent VirtIO support. Problem bypassed entirely.

To confirm your NIC model in Proxmox shell:

lspci | grep Ethernet

Expected output on the T9 Plus:

01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8211/8411 PCI Express Gigabit Ethernet Controller (rev 15)
04:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8211/8411 PCI Express Gigabit Ethernet Controller (rev 15)

Network Design

Before touching any config, understand how traffic flows through the stack:

  • Proxmox bridges nic0vmbr0 (LAN)
  • Proxmox bridges nic1vmbr1 (WAN)
  • OPNsense VM gets two VirtIO NICs attached to those bridges
Diagram

Step 1: Install Proxmox and Configure Bridges

Install Proxmox VE from the official ISO onto the N100. Before creating the OPNsense VM, verify the network devices in System -> Network.

Proxmox network configuration showing nic0, nic1, vmbr0, and vmbr1 bridges

nic0 and nic1 are the physical NICs. Create a Linux Bridge for each - vmbr0 and vmbr1 - and make sure both are marked Active and Autostart.

Verify the bridge configuration in /etc/network/interfaces:

auto lo
iface lo inet loopback

auto nic0
iface nic0 inet manual

auto nic1
iface nic1 inet manual

auto vmbr0
iface vmbr0 inet static
	address 10.10.1.2/24
	gateway 10.10.1.1
	bridge-ports nic0
	bridge-stp off
	bridge-fd 0

auto vmbr1
iface vmbr1 inet manual
	bridge-ports nic1
	bridge-stp off
	bridge-fd 0
ip link show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: nic0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master vmbr0 state UP mode DEFAULT group default qlen 1000
    link/ether 68:1d:ef:3a:4f:83 brd ff:ff:ff:ff:ff:ff
    altname enx681def3a4f83
3: nic1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master vmbr1 state UP mode DEFAULT group default qlen 1000
    link/ether 68:1d:ef:3a:4f:84 brd ff:ff:ff:ff:ff:ff
    altname enx681def3a4f84
4: wlp3s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 40:9c:a7:4d:12:70 brd ff:ff:ff:ff:ff:ff
    altname wlx409ca74d1270
5: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 68:1d:ef:3a:4f:83 brd ff:ff:ff:ff:ff:ff
6: vmbr1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 68:1d:ef:3a:4f:84 brd ff:ff:ff:ff:ff:ff
7: tap100i0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel master vmbr0 state UNKNOWN mode DEFAULT group default qlen 1000
    link/ether 7a:d9:99:9d:c0:94 brd ff:ff:ff:ff:ff:ff
8: tap100i1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel master vmbr1 state UNKNOWN mode DEFAULT group default qlen 1000
    link/ether 06:87:57:63:56:75 brd ff:ff:ff:ff:ff:ff

Step 2: Create the OPNsense VM

Download OPNsense ISO

From the OPNsense download page, grab the amd64 DVD image (.iso). Extract it, and upload it to Proxmox local storage via Datacenter → Storage → ISO Images → Upload.

VM Settings

Create a new VM with these specs:

SettingValue
OSFreeBSD 14 (64-bit)
vCPUs2
RAM8GB (2GB minimum)
Disk80GB
SCSI controllerVirtIO SCSI
Network Device (net0)virtio / bridge=vmbr0 (LAN)
Network Device (net1)virtio / bridge=vmbr1 (WAN)

The NIC model matters — pick VirtIO for both, not e1000 or RTL8139.

Proxmox OPNsense VM configuration showing hardware configurations and two network devices: net0 (VirtIO, bridge=vmbr0) and net1 (VirtIO, bridge=vmbr1)

Boot the VM from the ISO and run through the OPNsense installer. Accept defaults for disk layout. Installation takes 2–3 minutes.


Step 3: Initial OPNsense Configuration

After the installer finishes, reboot and eject the ISO. OPNsense boots to a console prompt.

Assign Interfaces

At the first-boot prompt, assign interfaces:

Do you want to configure VLANs now? → n
Enter the WAN interface name or 'a' for auto-detection: vtnet1
Enter the LAN interface name or 'a' for auto-detection: vtnet0

OPNsense maps vtnet1 to WAN (via vmbr1/nic1) and vtnet0 to LAN (via vmbr0/nic0). Confirm.

Set LAN IP

From the console menu, select 2) Set interface(s) IP address, then LAN. Set:

  • IP: 10.10.1.3
  • Subnet: 24
  • Enable DHCP server on LAN: yes
  • DHCP pool start: 10.10.1.60
  • DHCP pool end: 10.10.1.250

The DHCP range starts at .60 to reserve 10.10.1.1-59 for static assignments - useful for services and VMs that need a fixed address.

Configure WAN (PPPoE for FPT)

FPT Vietnam uses PPPoE, not DHCP. From the web UI (after connecting a PC to the LAN port on the T9 Plus):

  1. Navigate to https://10.10.1.3 and log in (default: root / opnsense)
    • Change the default admin credentials immediately after your first login
  2. Go to Interfaces → WAN
  3. Set IPv4 Configuration Type to PPPoE
  4. Enter your FPT username and password (provided by FPT)
  5. Grab the Mac address of the AX3000CV2 and set it to the Mac address field
    • FPT may require the original router’s MAC address to authorize the PPPoE session
  6. Save and apply
OPNsense dashboard showing configurations in Interfaces - WAN OPNsense dashboard showing configurations in Interfaces - LAN

FPT uses PPPoE — not plain DHCP. If you leave WAN on DHCP, you will not get an IP and will have no internet. Double-check your PPPoE credentials from your FPT contract or support ticket.


Step 4: Enable DHCP and Connect Devices

With the DHCP server running on LAN (10.10.1.60–250), connect your switch to the T9 Plus LAN port. Devices plugging into the switch will get IPs from OPNsense.

Verify a client gets an address:

ipconfig getifaddr en0
10.10.1.190

Step 5: Set up Firewall rules

By default, OPNsense blocks all traffic. You need explicit rules to allow LAN devices to reach the internet and to let WAN responses flow back.

LAN rules - allow outbound traffic from LAN subnet (10.10.1.0/24) to any destination:

OPNsense Firewall dashboard showing rules for LAN OPNsense Firewall dashboard showing rules for WAN OPNsense Firewall dashboard showing rules for Network Address Translation

Step 6: Configure the Gateways

OPNsense needs a gateway to know where to send traffic leaving your network, ensure the WAN gateway has Upstream checked - this tells OPNsense to use it as the default route to the internet.

OPNsense Gateway dashboard showing settings for WAN Gateway IPv4 OPNsense Gateway dashboard showing settings for WAN Gateway IPv6

With the firewall rules and gateway in place, traffic should now flow end-to-end. Verify on the dashboard you should see active WAN and LAN interfaces with traffic counters:

OPNsense Lobby dashboard showing WAN/LAN traffic

Step 7: Validate Traffic Flows Through OPNsense

From a LAN device, confirm internet works and traffic routes correctly:

# Basic connectivity
ping -c 4 8.8.8.8

# Confirm routing path goes through OPNsense
traceroute 8.8.8.8

traceroute to 8.8.8.8 (8.8.8.8), 64 hops max, 40 byte packets
 1  opnsense.internal (10.10.1.3)  7.842 ms  3.190 ms  3.541 ms
 2  fpt ip (x.x.x.189)  4.877 ms  6.078 ms  4.887 ms
 3  fpt ip (x.x.x.89)  8.873 ms  7.824 ms *

In OPNsense, go to Firewall → Log Files → Live View and watch packets appear as you browse. This confirms OPNsense is in the path.

Also verify the WAN IP is a real FPT public IP: Interfaces → Overview → WAN should show an IP in FPT’s range (not 10.10.x.x).


Gotchas and Common Mistakes

ProblemCauseFix
NICs unreliable during OPNsense installRTL8111/8168 re driver issues on FreeBSDUse Proxmox + VirtIO NICs
No internet after WAN setupFPT uses PPPoE, not DHCPSet WAN to PPPoE with correct credentials
Wrong WAN/LAN assignmentVirtIO MAC order mattersCheck interface MACs in Proxmox vs OPNsense console
Proxmox management lostBridge config errorConsole access via Proxmox web shell, check /etc/network/interfaces
NIC names differKernel enumeration orderRun ip link show to confirm names before editing bridge config

What’s Next

OPNsense is running. Now extend it.

Next: OPNsense Fundametals

The companion post OPNsense Exploring: Fundamentals dives deeper into OPNsense’s core features - firewall rules, aliases, NAT, and DNS configuration.

If you want visibility into the Proxmox host running OPNsense — CPU, RAM, storage, and alerts — the Monitoring Proxmox with Grafana Stack guide covers a full Prometheus + Grafana setup in an LXC container, with Telegram alerts and zero agents on the host.


References