Rendimiento en Opnsense
#1
Opnsense es un sistema operativo completo que actúa como router-firewall y está basado en FreeBSD y al igual que ocurre con otros sistemas operativos al instalarlo está configurado con las opciones mínimas de cara al rendimiento así que lo mejor que se puede hacer es "tunearlo" para aumentar ese rendimiento. Este aumento de rendimiento que paso a explicar está basado tanto en la mejora del sistema como en el rendimiento de las conexiones de red.

En Opnsense nos vamos a Sistema - Ajustes - Miscelánea 

   

Activamos Usar PowerD y configuramos todos los parámetros en Máximo. Lo que se consigue con esto es que el procesador del sistema en el que esté instalado Opnsense esté siempre funcionando al máximo rendimiento. No confundir velocidad con uso, la actividad del procesador en Opnsense es mínima en la mayoría de las ocasiones y con este ajuste lo que se consigue es que en los períodos de actividad funcione a la máxima velocidad.

Ahora nos vamos a Sistema - Ajustes - Parámetros optimizables y al acceder nos encontramos una cantidad de ajustes ya establecidos. Vamos a modificar 3 de esos ajustes

   

Yo ya los tengo modificados así que a vosotros cada ajuste que voy a comentar veréis que tendrá un Valor distinto. Vamos a modificar el ajuste hw.ibrs_disable = 1 y para hacerlo le damos al símbolo del lápiz que nos encontramos a su derecha. 

   

Lo tenemos que dejar tal cómo se ve en la imagen que acabo de poner y guardamos los cambios.

Los siguientes parámetros están también ya configurados y los tenemos que modificar dejándolos de la siguiente manera:

vm.pmap.pti= 0

net.inet.tcp.tso= 0

Los siguientes ajustes que paso a explicar NO se encuentran en el listado de ajustes pre-establecidos sino que los tenemos que CREAR NUEVOS. 
El primero que vamos a crear nuevo es relativo a las tarjetas de red del sistema en que tengamos instalado Opnsense y sirve para tener siempre activas esas tarjetas de red al máximo rendimiento. Lo primero que tenemos que hacer es comprobar que tipo de tarjetas de red tenemos.

Para hacerlo nos vamos a Interfaces - Asignaciones

   

En la imagen se puede ver que mis tarjetas de red son del tipo igb ( Intel ).......la wg NO CUENTA porque es la de Wireguard y es virtual.

Sabiendo esto volvemos a Sistema - Ajustes - Parámetros optimizables y vamos a crear dos nuevos ajustes dándole al símbolo + que está a la derecha

   

Estos dos nuevos ajustes se corresponden a la Wan y a la Lan o al revés. Uno sería dev.igb.0.fc: 0 y lo tenemos que configurar igual que se ve en la siguiente imagen

   

ATENCION: Si nuestras tarjetas de red NO SON del tipo igb tenemos que sustituir igb en el parámetro dev.igb.0.fc por el correspondiente a vuestra tarjeta de red.

Guardados los cambios repetimos la misma operación creando un nuevo ajuste con el parámetro dev.igb.1.fc: 0

Si tuviéramos configurados más interfaces distintos a Wan y Lan tendríamos que crear más ajustes nuevos con, por ejemplo, el parámetro dev.igb.2.fc: 0

Los siguientes ajustes nuevos que tenemos que crear no requieren de explicación, tan sólo los tenemos que crear uno por uno nuevos con los siguientes parámetros:

kern.random.fortuna.minpoolsize = 128

net.inet.tcp.abc_l_var = 52

net.inet.tcp.minmss = 536

net.inet.tcp.mssdflt = 1240

net.inet.tcp.soreceive_stream = 1

net.isr.bindthreads = 1

net.isr.defaultqlimit = 2048

net.isr.dispatch = deferred

net.isr.maxthreads = -1

net.inet.rss.enabled = 1

net.pf.source_nodes_hashsize = 1048576

net.inet.ip.maxfragsperpacket: 0

net.inet.ip.maxfragpackets: 0

net.link.ifqmaxlen: 8192

net.inet.tcp.rfc1323: 1

net.inet.tcp.rfc3390: 1

net.inet.tcp.rfc3042: 1

Una vez creados todos estos parámetros en la parte superior derecha en el apartado de Opnsense en el que nos encontramos le tendremos que dar al botón Aplicar, una vez hecho eso REINICIAMOS OPNSENSE.
  Reply
#2
Buenas!

Primeramente enhorabuena porque he recurrido a tus posts en varias ocasiones para ayudarme a configurar mi FW, se nota que eres un crack!

Sólo tengo una duda referente e este post, en mi caso, tengo el siguiente escenario:

igb0: WAN (Levanto una PPOE sobre esa física)
igb1: LAN1 (paso una vlan tageada) La interfaz asignada en el FW es vlan0.13, no la propia interfaz GE física.
igb2: Sin asignar, forma parte del LAGG
igb3: Sin asignar, forma parte del LAGG
lagg0: LAN2 (paso seis vlan tageadas) Las interfaces asignadas en el FW son lagg0.XX según la vlan.

Voy a hacer lo que me dicta la razón tras leerte, y realizaré la siguiente configuración:

dev.igb.0.fc dev.igb.1.fc dev.igb.2.fc dev.igb.3.fc

Mi única dúda es, al tener un LAGG con LACP en esas 2 interfaces que forman la LAN2, afectará en algo al LAGG el cambiar estos valores en las interfaces físicas que lo componen?


Si no me quedo fuera del FW ahora tras hacerlo, ya te contaré entonces que ha funcionado jeje

Gracias y buena noche!

He sobrevivido Big Grin

Voy a realizar pruebas a ver si todo sigue funcionando igual y noto algo distinto, ya te contaré.


Gracias de nuevo.
  Reply
#3
Los agradecimientos se los deberias dar a mi amigo Ganekogorta que es el que me animo a la redaccion de estos tutoriales sobre Opnsense, dicho esto continuo......Interesante y acertada pregunta. El parametro al que te refieres exclusivamente se refiere a la gestion de la energia que hace FreeBSD que es la base de Opnsense y lo que hace es precisamente desactivar esa gestion de energia para que los interfaces de red esten al maximo en todo momento, y lo hace sobre los interfaces fisicos que haya, o dicho de otra manera, las conexiones de red fisicas que existan. Sabiendo esto los LAGGS o Vlans que existan no afectan para nada ya que el primero es una asociacion mediante software y el segundo es un interfaz virtual y el parametro que comentas afecta, como digo, a la gestion de energia del interfaz de red fisico que es lo que verdaderamente importa con el resultado de que afecta implicitamente a todo lo demas que acabo de comentar. Para terminar, el resto de los parametros de este post no tienen desperdicio asi que ya sabes.
  Reply
#4
Resumiendo: El parametro que comentas lo que hace es desactivar la gestion de energia de FreeBSD, y por tanto de Opnsense, sobre las conexiones de red fisicas que existan en el dispositivo utilizado para Opnsense, poniendolas a tope de rendimiento siempre hablando sobre la gestion de energia. Lo que se haga despues con ellas es irrelevante.
  Reply
#5
(17-06-2023, 03:00 AM)yeraycito Wrote: Resumiendo: El parametro que comentas lo que hace es desactivar la gestion de energia de FreeBSD, y por tanto de Opnsense, sobre las conexiones  de red fisicas que existan en el dispositivo utilizado para Opnsense, poniendolas a tope de rendimiento siempre hablando sobre la gestion de energia. Lo que se haga despues con ellas es irrelevante.

¡Mil gracias por tu respuesta!

Tras realizar toda la configuración, ayer me puse a revisar todo. Efectivamente tenía problemas de throughput, tras realizar todos los cambios he aumentado unos 200mb en el test de velocidad (también tenía el caché del Unbound DNS un poco mal configurado y me puse a dejarlo lo mejor posible).

Lo único que quería comentarte como curiosidad, es que tras aplicar todo, lo único que me comenzó a dar problemas fue lo siguiente:

- Zenarmor iba mas lento, tardaba más en cargar las páginas e incluso la parte de interfaces se quedaba cargando todo el rato.

- Si intentaba realizar un update check, se quedaba colgado dando error, con estos errores de timeout en el log:


2023-06-17T00:30:53 Error configd.py [a194cb7a-8b55-4d08-824f-7cba24c4a8cd] Script action failed with Command '/usr/local/opnsense/scripts/firmware/query.sh tiers ' returned non-zero exit status 1. at Traceback (most recent call last): File "/usr/local/opnsense/service/modules/actions/script_output.py", line 44, in execute subprocess.check_call(script_command, env=self.config_environment, shell=True, File "/usr/local/lib/python3.9/subprocess.py", line 373, in check_call raise CalledProcessError(retcode, cmd) subprocess.CalledProcessError: Command '/usr/local/opnsense/scripts/firmware/query.sh tiers ' returned non-zero exit status 1.

2023-06-17T00:30:32 Error configd.py [72955b5c-aadd-4ca8-b7d5-5b1b27ed017a] Script action stderr returned "b'pkg: https://pkg.opnsense.org/FreeBSD:13:amd6...t/meta.txz: Operation timed out\npkg: https://pkg.opnsense.org/FreeBSD:13:amd6...gesite.pkg: Operation timed out'"

Revisando, confirmé que ha sido este valor el que me ha causado esos problemas:

net.inet.rss.enabled = 1

He tenido que cambiarlo a 0 y tras reiniciar el FW, ya puedo volver a checkear las actualizaciones y Zenarmor funciona correctamente de nuevo.


Te cuento todo esto, ya que tras cambiarlo, he perdido unos 90mb en el test de velocidad aproximadamente (sigue yendo todo más fluido e incluso veo que he reducido la temperatura de los núcleos de la CPU, antes estaban al máximo todos) y se nota que aunque me diese esos fallos, era una configuración que mejoraba mi rendimiento de red.


En mi caso, tengo estas características de Hardware (Es un Protectli FW4B) :

CPU type Intel® Celeron® CPU J3160 @ 1.60GHz (4 cores, 4 threads)
State table size 0 % ( 238/805000 )
MBUF usage 2 % ( 13712/500174 )
Memory usage 41 % ( 3309/8058 MB ) { ARC size 1099 MB }
SWAP usage 0 % ( 0/8192 MB )
Disk usage
1% / [zfs] (2.3G/223G)
1% /boot/efi [msdosfs] (1.8M/260M)
0% /tmp [zfs] (720K/221G)
0% /zroot [zfs] (96K/221G)
0% /var/mail [zfs] (120K/221G)
0% /usr/home [zfs] (96K/221G)
0% /var/crash [zfs] (96K/221G)
0% /var/audit [zfs] (96K/221G)
0% /usr/ports [zfs] (96K/221G)
0% /var/log [zfs] (39M/221G)
0% /var/tmp [zfs] (104K/221G)
0% /usr/src [zfs] (96K/221G)
0% /usr/local/sensei/output/active/temp [ufs] (40K/496M)

Por lo poco que me dio tiempo a buscar, encontré la siguiente información:

Quote:La configuración
Code:
net.inet.rss.enabled
se refiere a la capacidad de dividir el procesamiento de paquetes de red en múltiples núcleos de CPU utilizando el esquema de recepción de paquetes RSS (Receive-Side Scaling). RSS es una técnica utilizada para mejorar el rendimiento de la red distribuyendo el procesamiento de paquetes entrantes entre varios núcleos de CPU, lo que permite aprovechar mejor el potencial de los sistemas multi-core.
Sin embargo, hay algunas consideraciones a tener en cuenta con respecto a esta configuración:
  1. Compatibilidad del hardware: No todos los adaptadores de red admiten RSS. Antes de habilitar
    Code:
    net.inet.rss.enabled
    , asegúrate de que tu hardware de red sea compatible con esta función. Consulta las especificaciones del fabricante o la documentación del hardware para verificar si admite RSS.
  2. Estabilidad del sistema: En algunos casos, habilitar RSS puede causar problemas de estabilidad en el sistema, especialmente si hay conflictos o incompatibilidades con el hardware o los controladores de red. Si experimentas cuelgues, bloqueos o comportamientos inesperados después de habilitar RSS, es posible que debas desactivar esta configuración para restaurar la estabilidad del sistema.
  3. Rendimiento de la red: Si bien RSS puede mejorar el rendimiento de la red al distribuir la carga de procesamiento entre varios núcleos de CPU, el beneficio real dependerá de factores como el tráfico de red, la carga del sistema y la configuración general de la red. En algunos casos, habilitar RSS puede tener un impacto mínimo o incluso negativo en el rendimiento de la red.
En resumen, habilitar
Code:
net.inet.rss.enabled
puede proporcionar beneficios de rendimiento en entornos de red específicos y con hardware compatible. Sin embargo, también puede causar problemas de estabilidad si no se implementa correctamente o si hay incompatibilidades con el hardware o los controladores de red. Se recomienda realizar pruebas exhaustivas y monitorear el rendimiento y la estabilidad del sistema después de habilitar RSS.



Por lo que, interpreto con todo esto, que no puedo debido seguramente a mi hardware, activar esta función en mi escenario.


Perdón por el testamento, pero quería expresarte mis conclusiones jaja

¡Gracias de nuevo y muy buen día!
  Reply
#6
Después de instalar y desinstalar Zenarmor varias veces a lo largo del tiempo no lo recomiendo y mis motivos son claros, disminuye consideráblemente el rendimiento de la red local, tiene un funcionamiento regulinchi con más problemas que soluciones sobretodo con algunas actualizaciones de Opnsense, al utilizar Netmap para su funcionamiento interfiere con Suricata, consume un montón de recursos y las opciones interesantes son de pago. En su lugar es mucho mejor instalar Adguard que carece de los problemas citados anteriórmente y hace la misma función que Zenarmor o mejor. Si desinstalas Zenarmor prueba a habilitar otra vez el rss.

La opción de habilitar rss se incluyó en el kernel de Opnsense en la versión 21.7.4 de noviembre de 2021 y consiste en una mejora de rendimiento de la red para hardware específico. En mi caso, tanto ese como todos los demás parámetros explicados en este post, los tengo habilitados y en funcionamiento sin ningún problema, como digo, no uso Zenarmor y si Adguard. Eso no quita que a ti en concreto no te funcione bien.

En cuanto a las temperaturas de tu mini-pc lo configures como lo configures un ventilador de PC conectado por USB hace maravillas....... si quieres que el aparato te dure, claro. Mi mini-pc tiene el mismo procesador que el tuyo y a una temperatura ambiente de 24 grados a lo máximo que llega algún núcleo son 35 grados.
  Reply
#7
hola , aunque he estado haciendo unas pruebas con adguardhome, veo carencias con respecto a zenarmor , por ejemplo no veo la capacidad de hacer políticas por grupo de ip en adguardhome , haces bloqueos pero generalmente con zenarmor lo puedes hacer fácilmente (opción paga) , la version free creo que solo permite 2 o 5 políticas .

ahora si me estoy equivocando con respecto a adguardhome, estoy abierto al conocimiento , por ejemplo estoy buscando la forma de restringir a un grupo de ip el porno, a otro el acceso a la redes sociales , y a otro la navegación x tiempo.

ahora con respecto a suricata no lo he provado aun en opnsense , pero si me has dejado un poco preocupado q baja el rendimiento con zenarmor , hace un año tuve la licencia home de zenarmor y me funcionaba bien , pero no le configure al equipo suricata xq mi equipo un Protectli (Intel® Celeron® CPU J3160 @ 1.60GHz (4 cores, 4 threads) no lo considere suficiente .

podrías ahondar mas como lo has hecho con adguardhome las diferentes políticas.
  Reply
#8
Claro, al final entorno IP es que se nota...
  Reply
#9
Hola
Si y se nota que está optimizado para ejecutarse en las nas de Qnap y en las ARM va muy fino, apenas consume recursos ?
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny, TS-453Be, TR-002 y QHora-301w) Ʀɐɯ0η
  Reply




Users browsing this thread: 1 Guest(s)