Finally learnt why my npf efforts had still failed on my Linode NetBSD even since switching to KVM (and in hindsight perhaps why I could never get it working on Xen): Because I use securelevel 1. Doh!

I now have the following in a /etc/modules.conf:

npf
bpfjit
sljit
npf_alg_icmp

Just having npf was not enough as I’d get the following without bpfjit.

npfctl: source /usr/src/sys/net/npf/npf_ctl.c line 231
npfctl: npfctl_config_send: Invalid argument

And bpfjit requires sljit (check modstat). And npf_alg_icmp is required for the Application Level Gateway stuff.

Bizarrely, though, npfctl reload will still moan about bpfjit even with it, but it seems to actually work ok.

I’ve also updated this npf post.


[EDIT 2018-02-18] I’m pretty sure that securelevel screws with the creation of the npflog0 interface. I never had a problem until the post-Meltdown era, but I suspect the multiple reboots, migrations and a rebuild I’ve tried removed this interface and then it wouldn’t recreate. You could probably boot without securelevel to get the interface created and then reboot with it enabled and it’d stick.