¿Solución a cuello de botella en interfaz ethernet?

¿Quieres tener un Servidor o una Nube propia? Este es tu sitio!
Responder
Sadrarin
Pi Alpha
Pi Alpha
Mensajes: 30
Registrado: 28 Jul 2017, 22:12
Agradecido: 0
Agradecimiento recibido: 0

Buenas, tengo una rpi3 como servidor DLNA, Samba, Apache, Nextcloud, Transmission y Amule.

El problema es que tengo bien configuradas las conexiones por cable y por wifi (la integrada y un usb-wifi), pero casi todo el tráfico pasa por el cable y las interfaces wifi no tienen apenas tráfico.

Cuando alguien está descargando algún fichero compartido a través de Nextcloud (Apache), el resto de servicios (DLNA, Samba, etc) sufren una bajada de rendimiento muy grande, ya que siguen usando la conexión por cable y se crea un cuello de botella.

¿Hay alguna manera de que Raspbian aproveche las tres interfaces para evitar el cuello de botella?.

Gracias por adelantado.
Avatar de Usuario
egrueda
Pi God
Pi God
Mensajes: 3426
Registrado: 10 Feb 2017, 19:31
Agradecido: 7 veces
Agradecimiento recibido: 269 veces

Si... pero no.
Si tienes dos redes wifi, puedes crear un bonding, si las dos interfaces son compatibles.
https://servidordebian.org/es/jessie/co ... rk/bonding
No obstante, el cuello de botella lo tienes entre el USB y el SoC, que al final es lo que limita la velocidad de transferencia.
En teoría, ganarás algo de velocidad (de ancho de banda), pero no lograrás el máximo teórico

Preguntas: ¿tienes conectada la raspi por cable y por wifi a la misma red? ¿A través de qué red acceden los usuarios?
¿Todos los servicios escuchan en la misma interfaz? ¿en todas? ¿O tienes unos servicios en wifi y otros en cable? (guiño, guiño)
Sadrarin
Pi Alpha
Pi Alpha
Mensajes: 30
Registrado: 28 Jul 2017, 22:12
Agradecido: 0
Agradecimiento recibido: 0

La verdad es que la rpi empezó a ser un servidor DLNA y cliente de descargas, pero me picó la curiosidad y le instalé Apache y Nextcloud. Ahora la uso para compartir archivos con amigos y familiares.

Las tres interfaces están conectadas a la misma red local, el wifi lo tengo para conectarme por ssh y gestionar Nextcloud. Realmente la wifi integrada casi no la uso, la tengo de reserva por si falla el usb-wifi.

Como tengo 30Mbits de subida, teóricamente, si alguien descarga algún archivo a través de internet, aún quedarían 70Mbits teóricos para el resto de las aplicaciones. Pero soy incapaz de ver una película por DLNA de forma fluida, o examinar la red por Samba sin tener que esperar un mundo cada vez que cambio de carpeta.

Como cada interfaz tiene su ip fija configurada, estoy pensando en redirigir los puertos del router a la ip del wifi, pero no es lo que más me interesa por si falla el usb-wifi.

Ya conocía el problema del cuello de botella usb/ethernet, pero esperaba tener algo más de fluidez.

Un saludo y gracias.
Sadrarin
Pi Alpha
Pi Alpha
Mensajes: 30
Registrado: 28 Jul 2017, 22:12
Agradecido: 0
Agradecimiento recibido: 0

A ver si alguien me puede explicar como indicarle a Apache que interfaz debe escuchar, aún así tengo un poltergeist que no me lo explico:

Tengo la rpi3 por cable con la ip 192.168.0.16, y por wifi con la ip 192.168.0.18. Si redirigido los puertos 80 y 443 del router a la ip del wifi, no tengo conexión desde el exterior (timeout). Desde la red local, a la ip del wifi (192.168.0.18), me conecto sin problemas.

Tengo instalado Netdata para monitorizar la rpi3, y me he conectado por sftp a la ip del wifi para pasar un archivo grande (1,5GB). Miré el Netdata por curiosidad, y me indicaba que la interfaz eth0 (el cable) está recibiendo una media de 80-90Mb/s mientras que la wifi está a 0.

¿Es posible que ssh cambie el tráfico al cable?
¿Por qué no tengo conexión desde el exterior si los puertos están bien redirigidos y por red local si?

Espero que podais echarme un cable, porque estoy un poco perdido (lo normal en un novato) :xd :xd

P.D: Si algún admin considera que es mejor abrir otro hilo, que me lo indique, gracias.
Avatar de Usuario
egrueda
Pi God
Pi God
Mensajes: 3426
Registrado: 10 Feb 2017, 19:31
Agradecido: 7 veces
Agradecimiento recibido: 269 veces

Para ilustrar, ejecuta este comando y comparte la salida:

Código: Seleccionar todo

sudo route -n
Sadrarin
Pi Alpha
Pi Alpha
Mensajes: 30
Registrado: 28 Jul 2017, 22:12
Agradecido: 0
Agradecimiento recibido: 0

Te paso la salida del comando:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 202 0 0 eth0
0.0.0.0 192.168.0.1 0.0.0.0 UG 303 0 0 wlan0
0.0.0.0 192.168.0.1 0.0.0.0 UG 304 0 0 wlan1
192.168.0.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 303 0 0 wlan0
192.168.0.0 0.0.0.0 255.255.255.0 U 304 0 0 wlan1
Saludos.
Avatar de Usuario
egrueda
Pi God
Pi God
Mensajes: 3426
Registrado: 10 Feb 2017, 19:31
Agradecido: 7 veces
Agradecimiento recibido: 269 veces

Gracias, es justo lo que esperaba encontrar.
Como ves, tienes tres gateways predeterminadas, es decir, tres rutas "0.0.0.0", una para cada interfaz.
Y con la red local ocurre lo mismo.
Las tres interfaces ofrecen una ruta, tanto para la red local (192.168.0.0) como para salir a internet (0.0.0.0)
Entonces, si la raspberry tiene que enviar un paquete, digamos a tu ordenador dentro de la red local, ¿cómo decide linux a traés de qué interfaz enviar los datos?
Para ello, consulta la tabla de rutas que me acabas de enviar y busca, en tu caso, las tres últimas líneas

Código: Seleccionar todo

Destination   Gateway      Genmask         Flags  Metric   Ref    Use     Iface
192.168.0.0   0.0.0.0      255.255.255.0   U      202      0      0       eth0
192.168.0.0   0.0.0.0      255.255.255.0   U      303      0      0       wlan0
192.168.0.0   0.0.0.0      255.255.255.0   U      304      0      0       wlan1
¿Cuál de las tres usará, si las tres coinciden con el destino y son válidas? Pues en este caso usará la que tenga una métrica (Metric) más baja o más "barata", es decir, eth0. Y si tuviesen la misma métrica, el sistema usaría la primera regla que coincida con el destino, esto es, en base a la posición en la lista.

Este en realidad es un problema habitual cuando asignas varias interfaces en la misma red, que te genera rutas duplicadas (o en este caso, triplicadas)

Lo ideal en estos casos es tener redes separadas, por ejemplo 192.168.0.0 para cable y 192.168.1.0 para wifi, y así todos los equipos de la red tendían claro cómo comunicarse con cada una de las interfaces. Además, podrías tener servicios que escuchen en una interfaz o en la otra, y el NAT funcionaría. Eso sí, habría que ver si el router lo soporta y/o si te quieres complicar tanto la vida :-)
Sadrarin
Pi Alpha
Pi Alpha
Mensajes: 30
Registrado: 28 Jul 2017, 22:12
Agradecido: 0
Agradecimiento recibido: 0

Gracias por la explicación, va a ser que no me voy a complicar mucho la vida. Lo voy a dejar así por ahora.

Lo que no me explico es por qué no me va la conexión desde el exterior al servidor Apache si mapeo los puertos a la ip del wifi.
Avatar de Usuario
egrueda
Pi God
Pi God
Mensajes: 3426
Registrado: 10 Feb 2017, 19:31
Agradecido: 7 veces
Agradecimiento recibido: 269 veces

Sadrarin escribió:Lo que no me explico es por qué no me va la conexión desde el exterior al servidor Apache si mapeo los puertos a la ip del wifi.
Si funciona cuando mapeas eth0 y no funciona con wlan, sin duda es el NAT del router, porque entra por una interfaz y alarma por la otra, por tanto el NAT entrante funciona y en NAT saliente no.
Sadrarin
Pi Alpha
Pi Alpha
Mensajes: 30
Registrado: 28 Jul 2017, 22:12
Agradecido: 0
Agradecimiento recibido: 0

Muchas gracias egrueda, como mis conocimientos de NAT y linux son más bien pocos, por ahora lo dejo como está y ya veremos más adelante si me animo a poner a punto el servidor.

Muchas gracias de nuevo, un saludo.
Responder