

I did not run OPNSense, but I have a direct comparison for pfSense as VM on Proxmox VE vs pfSense on a ~400€ official pfSense physical appliance.
I do not feel any internet-speed or LAN-speed differences in the 2 setups, I did not measure it though. The change VM -> physical appliance was not planned.
Running a VM-firewall just got tiring fast, as I realized that Proxmox VE needs a lot more reboot-updates than pfsense does. And every time you reboot your pfSense-VM-Hypervisor, your internet’s gone for a short time. Yes, you’re not forced to reboot. I like to do it anyway, if it’s been advised by the people creating the software I use.
Though I gotta say, the pfSense webinterface is actually really snappy and fast when running on an x86 VM. Now that I have a Netgate 2100 physical pfSense appliance, the webinterface takes a looooong time to respond in comparison.
I guess the most important thing is to test it for yourself and to always keep an easy migration-path open, like exporting firewall-settings to a file so you can migrate easily, if the need arises.
[EDIT] - Like others, I also would advice heavily against using the the same hypervisor for your firewall and other VMs. Bare-Metal is the most “uncomplicated” in terms of extra workload just to have your firewall up and running, but if you want to virtualize your firewall, put that VM on its own hypervisor.


I’m using CheckMK to monitor my hypervisor, physical hardware like disks, CPU etc. and SNMP-capable hardware like my pfSense firewall via a CheckMK instance in docker. It either works in docker or on a few different linux based OS like ubuntu and debian (see CheckMK download page).
There’s a free and open source version (called raw edition, GitHub Link) which I am using. It comes with a lot of checks / plugins for monitoring stuff out of the box and if there’s something it doesn’t ship, you can easily create your own check in whatever language your server is capable of executing a binary of. Or you could look up if there’s a user-contributed plugin on the official CheckMK Exchange Platform.
The whole configuration of this is based on rules with a lot of predefined rules and sane defaults already set.
To have an example for your use-case: You can monitor docker-logfiles and let CheckMK warn you, if specific keywords are or are not in a logfile. You will then be able to view the offending lines in the monitoring UI.
Why do I use this?
my docker compose file
# docker-compose.yml services: monitoring: image: checkmk/check-mk-raw:2.4.0-latest container_name: monitoring restart: unless-stopped environment: - CMK_PASSWORD=changeme ports: # WEB UI port - "5000:5000" # agent communication port - "8000:8000" # used for SNMP - "162:162/udp" - "514:514/tcp" - "514:514/udp" volumes: - "./monitoring:/omd/sites" - /etc/localtime:/etc/localtime:ro env_file: - .env