El tema de velocidad, 3Mb entre 20 equipos... no tiene solución.
En cuanto a las caídas, para saber si lo que te falla es la red local o la conexión a internet, puedes hacer lo siguiente:
Abre una consola de comandos (Busca la aplicación "Símbolo del sistema" en programas), y escribes:
ipconfig
Saldrá un montón de información, lo que te interesa es saber la IP de la "puerta de enlace predeterminada", normalmente será 192.168.1.1 o 192.168.0.1.
A continuación, escribes sustituyendo el 192.168.1.1 por la puerta de enlace que te muestra el ipconfig:
ping -t 192.168.1.1
Ahora verás en pantalla una línea cada segundo con una prueba de conexión desde el equipo hasta el router (o módem como lo llamas tu).
No cierres esta ventana, y abre una nueva. En la nueva ventana escribes:
ping -t google.com
En esta segunda pantalla, verás una prueba de conexión a Internet.
Los valores de la respuesta de las dos ventanas son los siguientes: Si pone "Respuesta desde x.x.x.x: bytes=x tiempo=xms TTL=x", significa que la conexión funciona, y que el otro equipo ha tardado la cantidad de milisegundos indicada en el texto "tiempo=". Si el mensaje pone "Host de destino inaccesible." o "Tiempo de espera agotado para esta solicitud", o en general cualquier respuesta que no sea la primera, es que no hay conexión con el otro lado.
Si la conexión funciona en la segunda ventana (conexión a google.com), todo debería funcionar bien (red local e Internet). Si la conexión falla en la segunda pero no en la primera, es que la red local funciona pero tienes problemas con la conexión a Internet. Si la conexión falla en la primera ventana (conexión al módem/router), tienes un problema con la red local.
La idea es que dejes en un equipo (o en varios) estas pruebas funcionando, y sigues trabajando. Cuando veas que hay algún problema, mira rápidamente las ventanas y anota los resultados.