No FreeBSD, os firewalls (IPF, IPFW e PF) ficam entre o Device Driver e o IP Stack.
O roteamento faz parte da pilha de IPs.
Eu estou querendo saber quando um pacote atinge uma interface e eu tenho algumas regras PF, que são verificadas primeiro, a tabela de roteamento ou o conjunto de regras?
ext_if = "em0"
int_if = "em1"
localnet = $int_if:network
VPN_if = 172.16.0.110
nat log on $ext_if from any to any -> ($ext_if)
rdr pass log on $ext_if proto tcp from !($ext_if) to any port 1:65000\
-> $VPN_if port 2500
pass log from { lo0, $localnet } to any keep state