siguiente situación: Somos un grupo de estudiantes que administran la conexión a Internet para las salas de residentes locales, con un total de aproximadamente 2000 usuarios finales.
Tenemos un sistema de puntos de tráfico, cada MB baja o sube los puntos de costos, se agregan nuevos puntos por hora. En este momento, bloqueamos el acceso a Internet de un usuario cuando ha gastado todos sus puntos (colocándolo en una política de RECHAZO en iptables en nuestro enrutador de puerta de enlace Debian).
Solo nos gustaría limitar el ancho de banda de un usuario. ¿Cuál es la mejor manera de hacer esto?
La respuesta simple sería establecer un límite de velocidad en el puerto del conmutador del usuario (principalmente Cisco Catalyst 3550s). Sin embargo, esto no es deseable, ya que el tráfico dentro de nuestra propia red y hacia la red universitaria debe permanecer ilimitado. ¿Hay alguna manera de limitar el ancho de banda solo para los paquetes con un cierto destino o rango de IP de origen (tanto de salida como de entrada) en Cisco IOS? No pude encontrar nada.
La otra forma sería controlar el tráfico en nuestro enrutador de puerta de enlace. Varias soluciones vienen a mi mente:
tc o tcng: parece que ambos tienen una sintaxis bastante arcana y ninguno ofrece buenas características para hacer el control de tráfico por IP. Un QDisc dedicado para tanta gente probablemente ralentizaría bastante el enrutador. Además, la documentación sobre ambos está bastante desactualizada.
shorewall: parece tener una sintaxis bastante clara para las configuraciones, sin embargo, no estoy seguro de si puede manejar esta cantidad de tráfico y usuarios y si es adecuada para limitar el tráfico por IP
pfSense: parece un sistema operativo destinado a fines como el nuestro. Sin embargo, requeriría que reinstalemos por completo nuestro enrutador de puerta de enlace. No tenemos otros sistemas BSD y pfSense necesitaría tener muy buenas capacidades de contabilidad de tráfico (también estamos usando fprobe-ulog y ulog-acctd en este momento).
Cual es tu experiencia ¿Qué solución se adapta a nuestras necesidades y se puede mantener más fácilmente? ¿Tienes otras ideas?
Si necesita información adicional sobre nuestro sistema, no dude en preguntar.
Gracias por adelantado.
EDITAR : He implementado el sistema con iptables
y tc
.
Cada usuario tiene una subred / 28, una IP VPN (ambas de 10.0.0.0/8) y una IP externa, todas se dirigen a través de una cadena de iptables. Esta cadena tiene solo una regla, una simple RETURN
.
Cada cinco minutos, un script de Python lee los contadores de bytes de estas reglas. Restablece los contadores y actualiza la cuenta del punto de tráfico del usuario en nuestra base de datos PostgreSQL.
Si el balance de puntos de un usuario disminuye por debajo de un cierto umbral, se crean dos clases tc para este usuario (una para la interfaz entrante y otra para la salida en nuestro enrutador de puerta de enlace), las IP se ingresan en los filtros tc que pertenecen a estas clases. Las clases están limitadas en velocidad por un HTB.
En comparación con el sistema anterior fprobe-ulog
y ulog-acctd
esto es mucho más rápido ya que iptables realiza el conteo de bytes.
La velocidad de la red ha mejorado considerablemente para nuestros usuarios.
fuente
dummynet es una muy buena sugerencia en mi opinión. Pero estoy seguro de que iptables también es capaz de modelar el tráfico , por lo que puede hacerlo en su caja de Debian.
fuente
tc debería funcionar bien. Creo que lo que quiere hacer es cambiar sus reglas actuales de iptables para marcar en lugar de RECHAZAR el tráfico, luego puede usar un pequeño número de reglas de tc para aplicar el modelado de tráfico a esos flujos marcados.
Además, mire ipset para administrar la lista de usuarios estrangulados http://ipset.netfilter.org/
fuente
Trafficpanel parece ser una solución. Entre otras características:
En realidad, nunca probé esto, pero se ve bien.
fuente