Aumentar el rendimiento del nas
#1
Antes de empezar me gustaría dar las gracias a mi hijo mayor por sus conocimientos del terminal de linux ( del que no tengo ni idea debido a que tuve hace relatívamente poco tiempo la feliz idea de abandonar windows y pasarme a linux ) y al amigo Ganekogorta por aguantar mis consultas privadas y asesorarme en asuntos técnicos que por mis pobres conocimientos no alcanzo a conseguir. 

En este tutorial voy a intentar explicar de la forma más sencilla posible cómo con muy pocos pasos podemos acelerar el rendimiento en internet y en la red privada nuestro nas.
 
Empezamos:

Todos los sistemas operativos, sean los que sean, vienen configurados con las configuraciónes mínimas por defecto para que funcionen bien en todos los entornos y bajo las manos mas torpes. Si queremos sacarles el máximo rendimiento nos toca tocar y modificar ajustes para conseguirlos. El caso de los nas de Qnap es un caso un poco especial. Los nas de Qnap utilizan Linux y por lo que he podido descubrir parece que utilizan una versión de Ubuntu modificada. Modificada por decir algo. Distribuciones Linux hay un montón pero sea la que sea, al ser de código libre, permite una gran cantidad de modificaciones que sabiendo uno lo que hace, puede hacer. El linux que utiliza Qnap en sus nas está modificado y muy protegido a la hora de hacer esas modificaciones pero voy a explicar en este caso cómo hacerlas. Como digo, los sistemas operativos están configurados al mínimo y en este caso vamos a tocar ajustes del kernel de linux de nuestro nas de tal manera que el rendimiento en cuanto a conexiones de red va a aumentar consideráblemente. Para ello voy a modificar cierto archivo del nas y le voy a poner unos parámetros para conseguir esto. Si os da miedo hacerlo no hay problema porque todo el proceso es fácilmente reversible.

A tener en cuenta: 

1 - Todos los parámetros y el archivo que voy a modificar son válidos para cualquier linux así que si alguno usa una distribución linux puede fácilmente utilizarlos para su sistema

2 - Los parámetros que voy a introducir son el resultado de muchas búsquedas en internet y algunos de ellos ( muy pocos ) son especiales para el nas debido a que éste utiliza una versión relatívamente antigua a fecha de hoy 4.xxx del kernel de Linux yendo éste actualmente por la versión 5.10 y a punto de sacar la 5.11.

3 - Los parámetros son áltamente configurables y modificables NO en su término pero si en su valor. Por ejemplo y refiriéndome al punto anterior el parámetro net.core.somaxconn = 4096 es válido para el kernel que utiliza actuálmente nuestro nas. Si quisiéramos usarlo en un linux con un kernel más moderno podemos sustituir el valor 4096 por 8192.

4 - Los parámetros que pongo son los que después de mucho investigar son los que sacan más rendimiento al nas. Por supuesto, sois libres de poner o no poner los que queráis.

Para este tutorial he usado un ordenador linux con manjaro y con el software Filezilla pero creo que se podrá hacer desde un ordenador con windows con Winscp. Digo "creo" porque el archivo que voy a modificar está protegido por lo que he comentado antes y una opción en Filezilla me ha permitido acceder. Si esa opción, que ahora voy a explicar, existe en Winscp no hay problema.

TUTORIAL:

1 - Accedemos a nuestro nas y vamos a Panel de control - Telnet/SSH y lo activamos

   

2 - En nuestro ordenador ejecutamos Filezilla o Winscp. Como he dicho antes en Winscp no lo he probado pero en Filezilla, una vez ejecutado, y ANTES de conectarnos al nas tenemos que activar la opción de Forzar mostrar archivos ocultos en el programa.

   

3 - Una vez hecho esto nos conectamos al nas con usuario/contraseña para acceder a sus archivos internos. Una vez hecho esto el programa Filezilla nos abre 2 ventanas izquierda/derecha. En la izquierda están los archivos del ordenador en el que estamos ejecutando en el programa y en la parte derecha están los archivos de nuestro nas. Nos fijamos en la parte derecha. Tenemos que ir a esta ruta:    /share/CACHEDEV1_DATA/.qpkg/HD_Station/etc
A tener en cuenta: Dependiendo del modelo de nas el apartado de la ruta CACHEDEV1_DATA puede variar. Os toca buscar en vuestro nas el correspondiente. Una vez accedido a ese directorio vemos esto:

   

4 - Vemos que hay un archivo llamado sysctl.conf. Lo primero que vamos a hacer es descargarlo. Para hacerlo le damos con el botón derecho del ratón:

   

5 - Una vez descargado lo guardamos bien guardado por si en un futuro no nos gustan los cambios y lo queremos restaurar. Ese archivo descargado en nuestro ordenador lo podemos editar con un editor de archivos de texto. Al abrirlo nos aparece esto ( el archivo es un poco más largo pero os pongo la parte de arriba ):

   

6 - Lo vamos a editar añadiendo los parámetros que comenté al principio del post. Quedará tal que así:

   

Como es una captura os pongo a continuación los parámetros introducidos para que los podais copiar/pegar:

# Increase Linux autotuning TCP buffer limits
# Set max to 16MB for 1GE and 32M (33554432) or 54M (56623104) for 10GE
# Don't set tcp_mem itself! Let the kernel scale it based on RAM.
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.rmem_default = 1048576
net.core.wmem_default = 1048576
net.core.optmem_max = 65536
net.ipv4.tcp_rmem = 4096 1048576 2097152
net.ipv4.tcp_wmem = 4096 65536 16777216

# Make room for more TIME_WAIT sockets due to more clients,
# and allow them to be reused if we run out of sockets
# Also increase the max packet backlog
net.ipv4.tcp_fastopen = 3
net.core.somaxconn = 4096
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 2000000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_keepalive_intvl = 10
net.ipv4.tcp_keepalive_probes = 6
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_rfc1337 = 1

# Disable TCP slow start on idle connections
net.ipv4.tcp_slow_start_after_idle = 0

# If your servers talk UDP, also up these limits
net.ipv4.udp_rmem_min = 8192
net.ipv4.udp_wmem_min = 8192

Una curiosidad: Los parámetros que se ven en el archivo original son relativos a seguridad. Si os fijais se componen de 2 partes. Un texto en inglés que explica para qué sirven y a continuación un parámetro que lo ejecuta. Todos esos parámetros los tengo vistos en cortafuegos. Lo curioso del caso es que esos parámetros del archivo vienen precedidos por éste símbolo # ( almohadilla ), por ejemplo, éste:  #net.ipv4.conf.default.rp_filter=1
Ese símbolo # lo que hace es que no estén activos. Si quisiéramos activarlos tan sólo tendríamos que eliminar ese símbolo # dejando el parámetro así:  net.ipv4.conf.default.rp_filter=1
Habría que preguntar a Qnap porque tiene desactivados ajustes de seguridad en los nas.

7 - Una vez editados los parámetros en el archivo sysctl.conf en nuestro ordenador guardamos los cambios. A continuación, si hemos hecho una copia de seguridad de ese archivo en nuestro ordenador podemos ELIMINAR TRANQUILAMENTE el archivo sysctl.conf de nuestro nas a través de Filezilla. Una vez eliminado traspasamos con Filezilla el archivo sysctl.conf modificado en el ordenador a la carpeta del nas dónde estaba el archivo eliminado.

   

8 - Cerramos Filezilla y REINICAMOS EL NAS

9 - FIN

Resumiendo: Haciendo ésto mejoramos sustanciálmente la conexión de red del nas. Al descargar y guardar el archivo sysctl.conf original siempre tendremos la opción de restaurarlo fácilmente si no nos gustan los cambios.

A tener en cuenta: Una vez introducido en el nas el archivo sysctl.conf modificado éste sobrevive a los reinicios del nas.
  Responder
#2
Thumbs Up 
Grandisimo aporte
  Responder
#3
Hola
El merito hay que dárselo al César. Como la idea inicial fue tuya y aunque la completes con "ladrillos" de otros, sigue siendo tuya Wink

He leído el hilo y aunque no he tenido tiempo de aplicarlo en alguna de las nas, tengo una duda.

Si te fijas, indicas que el archivo "sysctl.conf" está dentro de una carpeta de HDStation. Eso me hace sospechar que sólo van a poder usarlo los que tengan esa aplicación. 
Se me hace raro que no esté en la carpeta estándar /etc del tuneado" linux de Qnap.  Huh

Como curiosidad, acabo de hacer una búsqueda en una de mis nas y, lógicamente, me salen un montón de archivos sysctl.conf por todos los contenedores que tengo.
Y veo un hilo en el foro oficial de Qnap, alguno se encontró con el mismo problema que me planteaste del borrado de archivo tras el reinicio.

Lo dicho, un gran trabajo ya que acabas de abrir la caja de Pandora en lo referente a optimizaciones en la nas. Smile
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny y TS-453Be) Ʀɐɯ0η
  Responder
#4
Como he comentado al principio del post los parámetros que añadimos sirven para aumentar la velocidad y el rendimiento del nas. Como dije en el archivo sysctl.conf original ya viene configurado con unos parámetros relativos a seguridad. Estos parámetros se refieren al protocolo ICMP. Este protocolo ICMP tiene varias subclases, una de ellas es el Ping. El ping se utiliza mayormente para saber si una página web en internet ( la que sea ) está activa o no y lo mismo para saber si cualquier dispositivo con conexión a internet ( en nuestro caso el nas ) está encendido o apagado. Este último procedimiento se realiza a traves de la ip, en este caso, como digo, sería la ip de nuestro nas. Un atacante lo primero que suele hacer es pings automatizados a direcciones ips para saber que dispositivos están encendidos para a continuación poder atacar. Por tanto, una buena medida de seguridad es DESACTIVAR EL PROTOCOLO ICMP EN EL NAS. Para hacerlo añadiremos unos parámetros distintos a los anteriores que son éstos:

net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.icmp_echo_ignore_all = 1
net.ipv6.icmp.echo_ignore_all = 1


Como vereis algunos ya existen en el archivo sysctl.conf original ( pero están desactivados ). Al poner estos nuevos parámetros ya los tenemos activados, junto a otros nuevos.

(14-02-2021, 03:05 PM)Ganekogorta escribió: Hola
El merito hay que dárselo al César. Como la idea inicial fue tuya y aunque la completes con "ladrillos" de otros, sigue siendo tuya Wink

He leído el hilo y aunque no he tenido tiempo de aplicarlo en alguna de las nas, tengo una duda.

Si te fijas, indicas que el archivo "sysctl.conf" está dentro de una carpeta de HDStation. Eso me hace sospechar que sólo van a poder usarlo los que tengan esa aplicación. 
Se me hace raro que no esté en la carpeta estándar /etc del tuneado" linux de Qnap.  Huh

Como curiosidad, acabo de hacer una búsqueda en una de mis nas y, lógicamente, me salen un montón de archivos sysctl.conf por todos los contenedores que tengo.
Y veo un hilo en el foro oficial de Qnap, alguno se encontró con el mismo problema que me planteaste del borrado de archivo tras el reinicio.

Lo dicho, un gran trabajo ya que acabas de abrir la caja de Pandora en lo referente a optimizaciones en la nas. Smile

Gracias. Por si te sirve de algo encontré el archivo sysctl.conf realizando una búsqueda en todo mi nas a través de Putty con el comando find y el único que me apareció fue ese.
  Responder
#5
De cara al futuro pero que se puede hacer ya en ciertas distribuciones Linux. Cuando estuve investigando este tema descubrí el TCP BBR. TCP BBR es un algoritmo de control desarrollado por Google muy reciéntemente y que lo utiliza actuálmente en, por ejemplo, youtube. Para activarlo se modifica el archivo sysctl.conf que cito en el post. Este algoritmo está pensado especiálmente para optimizar el rendimiento servidor - cliente, por tanto vendría ideal para el nas. Como curiosidad linux, y nuestro nas, utiliza actualmente un algoritmo llamado cubic. Como digo al poder activarlo desde sysctl.conf miré a ver si se podía hacer con éste resultado:

1 - Si accedemos con Putty a nuestro nas y ponemos el siguiente parámetro nos dice los algoritmos de control disponibles    
     
      sysctl net.ipv4.tcp_available_congestion_control

El resultado es que BBR está disponible, aparte de Cubic que es el que está utilizando. El problema está en que aunque esté disponible no está operativo debido a que para que funcione tenemos que tener un kernel igual o superior a la versión 4.9.
Nuestros nas, a dia de hoy y dependiendo del modelo están utilizando los kernels 4.14.24 y 4.2.8 por tanto inferiores a la versión necesaria. La lista con los kernels del nas se puede ver aquí:  https://www.qnap.com/es-es/release-notes/kernel

Resumiendo: Los que tengais un linux moderno podeis editar el archivo sysctl.conf para utilizar TCP BBR poniendo los siguientes parámetros:

En el caso de Ubuntu y derivados (podemos también poner los parámetros descritos en este post ) ( el archivo sysctl.conf está dentro de la carpeta etc ):

net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

En el caso de Arch y derivados el proceso cambia un poco. Tenemos que ir a la carpeta etc/systcl.d y crear un archivo con el nombre 99-sysctl.conf. En ese archivo ponemos esto y si queremos los parámetros descritos en el post:

net.core.default_qdisc = cake
net.ipv4.tcp_congestion_control = bbr

Una vez hecho esto podemos ver si lo hemos hecho bien con este comando ( despúes de reinicar el ordenador ):

En un terminal ponemos:             sysctl net.ipv4.tcp_congestion_control

Como digo esto se puede aplicar ya en linux con kernel iguales o superiores a la versión 4.9. En los nas nos tocará esperar.
  Responder
#6
(15-02-2021, 03:00 PM)yeraycito escribió: De cara al futuro pero que se puede hacer ya en ciertas distribuciones Linux. Cuando estuve investigando este tema descubrí el TCP BBR. TCP BBR es un algoritmo de control desarrollado por Google muy reciéntemente y que lo utiliza actuálmente en, por ejemplo, youtube. Para activarlo se modifica el archivo sysctl.conf que cito en el post. Este algoritmo está pensado especiálmente para optimizar el rendimiento servidor - cliente, por tanto vendría ideal para el nas. Como curiosidad linux, y nuestro nas, utiliza actualmente un algoritmo llamado cubic. Como digo al poder activarlo desde sysctl.conf miré a ver si se podía hacer con éste resultado:

1 - Si accedemos con Putty a nuestro nas y ponemos el siguiente parámetro nos dice los algoritmos de control disponibles    
     
      sysctl net.ipv4.tcp_available_congestion_control

El resultado es que BBR está disponible, aparte de Cubic que es el que está utilizando. El problema está en que aunque esté disponible no está operativo debido a que para que funcione tenemos que tener un kernel igual o superior a la versión 4.9.
Nuestros nas, a dia de hoy y dependiendo del modelo están utilizando los kernels 4.14.24 y 4.2.8 por tanto inferiores a la versión necesaria. La lista con los kernels del nas se puede ver aquí:  https://www.qnap.com/es-es/release-notes/kernel

Resumiendo: Los que tengais un linux moderno podeis editar el archivo sysctl.conf para utilizar TCP BBR poniendo los siguientes parámetros:

En el caso de Ubuntu y derivados:

net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

En el caso de Arch y derivados:

net.core.default_qdisc = cake
net.ipv4.tcp_congestion_control = bbr

Una vez hecho esto podemos ver si lo hemos hecho bien con este comando ( despúes de reinicar el ordenador ):

sysctl net.ipv4.tcp_congestion_control

Como digo esto se puede aplicar ya en linux con kernel iguales o superiores a la versión 4.9. En los nas nos tocará esperar.


Voy a probarlo en el ubuntu donde tengo Nextcloud.


El otro día el Qtalk de nextcloud me soreprendió con 11 personas conectadas en videoconferencia con una calidad superior a skype y mucho mayor a Google meet
pero algunos momentos de inextabilidad.

a ver si noto una mejora.

Muchas gracias por el aporte
  Responder
#7
Por si te sirve de ayuda:     

https://www.linuxbabe.com/ubuntu/enable-...bbr-ubuntu
  Responder
#8
Continuando con el  " curso didáctico gratuito sobre optimizaciones de red e internet "  hoy toca hablar de http ( prometo que éste capítulo será el último, no quiero ser pesado ). Http es un procotolo basado en TCP que es el que hace que funcione internet desde que ésta se inventó. La primera versión fue la 0.9 en 1991, después vino la versión 1.0 en 1996 y por último la versión 1.1 en 1999. Desde entonces no se ha tocado. Bueno, un poco si. En 2015 salió a la luz la versión http/2 que debido a su reciente implantación no ha tenido mucho éxito, entre otras cosas porque se abandonó por una nueva versión llamada http/3 que a su vez ha sido sustituida muy rápidamente por otra " nueva, nueva " versión llamada HTTP/3 con QUIC. Cada una de éstas nuevas versiones del protocolo http promete mayores velocidades que las anteriores. Esta última versión http/3 con Quic parece que es la definitiva porque aparte de como digo, es más rápida que las anteriores cambia sustanciálmente el método con que lo hace. Y es así porque se abandona TCP y se opta por QUIC que es un protocolo basado en UDP. Otra característica que utilica http/3 es que todas las conexiones utilizan TLS 1.3 por defecto. Como dije al principio es el mayor cambio desde los orígenes de internet y afecta a todo, servidores ( nginx, apache ) , routers, webs, etc, etc.

Como sabeis Cloudflare es actuálmente uno de los gigantes de internet, tanto es así, que si Cloudflare tose Internet se resfría. Actuálmente, en la parte de internet que Cloudflare controla, éste tenía activado http/2. Pues bien, la semana pasada ha activado http/3 quic:

   

Como se ve la versión http/2 está desactivada y de hecho no se puede activar.

¿Y todo este discurso para qué? Si quereis presumir en un futuro delante de vuestros nietos/nietas de haber sido de los primeros en utilizarlo podeis hacerlo a nivel de navegador de internet ( teneis que tener las últimas versiones del navegador que useis ). Para activarlo:

Navegadores basados en Chromium ( Microsoft Edge, Chrome, Brave, etc ):

 - En la barra de direcciónes del navegador poneis     chrome://flags    y le dais a Enter

   

 - Vereís una página con un buscador. En ese buscador poneis    quic    y activais el servicio. La siguiente captura es del navegador Brave pero es válida para todos los navegadores citados.

   

En el caso de Firefox escribimos en la barra de direcciones    about:config     y le damos a Enter. 

Nos sale otro buscador en el que ponemos   network.http.http3.enabled    y le damos a buscar. Nos sale esto:

   

A la derecha de false vemos un icono que al darle cambia false por true con lo cual ya lo tenemos activado:

   

Para terminar, un artículo supercompleto sobre todo esto lo podeis encontrar aquí:

https://www.xataka.com/basics/http-3-que...net-rapido
  Responder
#9
Todos los parámetros explicados al inicio del post son para acelerar las conexiones de red del nas pero una vez puestos es difícil saber si tenemos una mejora sustancial en el rendimiento o no y si la tenemos de cuanto es. Así que he hecho una prueba bastante interesante. En mi ordenador tengo una carpeta llamada BIBLIOTECA que tiene una cantidad enorme de subcarpetas y archivos. Para que veais el tamaño os pongo una captura:

   

Esa misma carpeta BIBLIOTECA la tengo en el nas. Una vez por semana añado libros nuevos en la carpeta BIBLIOTECA del ordenador y hago una sincronización en una dirección ( ordenador - nas ) a la carpeta BIBLIOTECA del nas mediante el protocolo NFS y con el programa Rsync. ( la prueba sería igual de válida mediante SMB y otro programa de sincronización en Windows ). Una sincronización consiste en comprobar todas y cada una de las carpetas, subcarpetas y archivos del origen con las del destino para detectar las diferencias. Una vez comprobado ésto el software envía y copia los archivos nuevos del origen al destino. Para la prueba he añadido la misma cantidad de libros nuevos ( 60 ) en la carpeta BIBLIOTECA del ordenador ( la semana pasada añadí el mismo número de libros ) y he realizado la sincronización con el nas para comprobar la diferencia de rendimiento antes - después de modificar el archivo sysctl.conf. Como se ve en la captura anterior de la carpeta BIBLIOTECA, Rsync tiene que comprobar una cantidad inmensa de archivos y por tanto, tarda bastante tiempo. 

Resultados:

1 - Semana pasada ( sin tocar el archivo sysctl.conf )
      Tiempo empleado en la sincronización: 1 hora 15 minutos

2 - Hoy ( archivo sysctl.conf modificado )
      Tiempo empleado en la sincronización: 50 minutos

Esto es relativo al tiempo. En cuanto a velocidad una vez que rsync detecta y decide transferir un archivo nuevo del ordenador al nas:

   

Como se ve la mejora de rendimiento es sustancial. La prueba está hecha como digo con una sincronización ordenador - nas pero cómo los parámetros introducidos en el archivo sysctl.conf son relativos a conexiones de red la mejora de rendimiento afectará a cualquier programa que utilice la conexión de red del nas.

Para terminar, una curiosidad. El archivo sysctl.conf de mi nas está, como indico al principio del post, dentro de una carpeta llamada HD_Station.
Hoy he entrado en mi nas y tenía una actualización del programa Multimedia Console. La he descargado y actualizado. Hecho esto, he accedido al nas mediante ssh con el programa Filezilla y el archivo sysctl.conf modificado sigue estando ahí. Así que todo bien.
  Responder
#10
Hola

Estaba haciendo un script incluido en un QPKG para que hiciese el cambio del archivo sysctl.conf (en una ruta no definida).
Pero para mi sorpresa, en un TS-469Pro, no existe tal archivo

Aparece si instalo Hybrid Desktop Station.
Estoy rebuscando y haciendo pruebas, a ver si es aplicable a los modelos de qnap sin esa app.

Sigo sin entender el motivo de la dependencia con Hybrid Desktop Station, cuando debería ser algo general para la nas.
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny y TS-453Be) Ʀɐɯ0η
  Responder




Usuarios navegando en este tema: 1 invitado(s)