En corto
System → Advanced → Networking → Disable hardware checksum offload ✔ → Save → reinicia la VM. La GUI no avisa, pero el cambio no aplica a las interfaces vtnet hasta el reinicio.
Para probar sin reiniciar (se pierde al arrancar):
| |
En OPNsense: Interfaces → Settings → Hardware CRC → Disable hardware checksum offload, y el mismo reinicio.
Síntomas
La VM arranca, las interfaces están UP, el DHCP de la LAN reparte direcciones y aun así:
- Los equipos detrás del firewall no llegan a Internet, o la conexión se queda a medias (el ping pasa, TCP se cuelga).
- Desde el propio host de virtualización o desde otras VMs del mismo host no se llega a nada protegido por pfSense, ni a la GUI.
- Cambiar la NIC de la VM a
e1000lo arregla al momento, lo que confirma el diagnóstico.
Por qué pasa
El driver vtnet de FreeBSD, con el offload de checksums activado, entrega a la pila de red paquetes cuyo checksum nunca llegó a calcularse: entre VMs del mismo host, y entre el host y la VM, el tráfico no pasa por una NIC física que lo haga. FreeBSD ve checksums inválidos y descarta (bug 165059 de FreeBSD). Netgate lo documenta en VirtIO Driver Support.
pfSense intenta marcar la opción solo cuando detecta interfaces vtnet en la instalación. Si la NIC VirtIO se añadió después, si restauraste el config.xml de un firewall físico, o si migraste la VM desde otro hipervisor con otro tipo de NIC, la opción sigue apagada.
Procedimiento
System → Advanced → Networking, sección Network Interfaces:
- Disable hardware checksum offload: marcar.
- Disable hardware TCP segmentation offload y Disable hardware large receive offload: ya vienen marcadas por defecto; déjalas así.
Save.
Reboot desde Diagnostics → Reboot. Sin este paso, nada cambia en
vtnet.Comprueba:
1ifconfig vtnet0 | grep optionsNo deben aparecer
RXCSUMniTXCSUM(niTSO4,LRO).
Si sigue igual
- Todas las NICs de la VM tienen que ser del mismo estilo. Una
vtnetcon offload y otrae1000se comportan distinto; revisa cadaifconfig. - Offload en el host. Netgate señala que a veces también hay que apagar checksums y TSO en el hipervisor. En Proxmox/KVM, sobre la interfaz
tapde la VM:ethtool -K tap100i0 tx off(el número es el VMID yi0la NIC). Es raro necesitarlo; pruébalo el último. - Plan B: modelo de NIC
e1000en la VM. Menos rendimiento que VirtIO sin offload, pero sin este bug.
Trampas
- El reinicio no es opcional y la GUI no lo pide. Es la causa número uno de “lo marqué y sigue sin funcionar”.
- No es un problema de reglas. Con el offload activo, los paquetes se descartan antes de llegar a
pf; el log del firewall no muestra nada. e1000también en OPNsense como plan B; el ajuste equivalente está en Interfaces → Settings.- Multiqueue (
queues=Nen Proxmox) funciona bien convtnetuna vez desactivado el offload; no lo confundas con la causa.