Quiero simular el siguiente escenario: dado que tengo 4 máquinas de servidor ubuntu A, B, C y D. Quiero reducir el ancho de banda de la red en un 20% entre la máquina A y la máquina C y el 10% entre A y B. Cómo Cómo hacer esto usando herramientas de simulación / regulación de red?
ubuntu
networking
tcp
linux-networking
bandwidth
Yehia Elshater
fuente
fuente
tc
lo hace cuando se usa con marcado iptables.Respuestas:
Para hacer esto, puede usar
tc
solo conu32
filtros o combinarlo con el marcado de iptables (quizás más sencillo si no desea aprender la sintaxis de filtros complejos). En la siguiente publicación detallaré la solución anterior.Simulando tu configuración
Como ejemplo, consideremos A, B, C y D ejecutando interfaces virtuales de 10 Mbit / s .
Básicamente quieres:
Para simular esto, crearé 4 espacios de nombres de red e interfaces virtuales de Ethernet conectadas a un puente.
Por supuesto, en su caso trabajará con NIC reales y el puente será su puerta de enlace o un conmutador dependiendo de su infraestructura.
Entonces, en mi simulación tendremos la siguiente configuración, en una red 10.0.0.0/24:
Primero, la fase de configuración para que pueda comprender de qué está hecha, omítala si no está familiarizado con ella, no es gran cosa. Sin embargo, debe saber que el comando
ip netns exec <namespace> <command>
permite ejecutar un comando en un espacio de nombres de red (es decir, en uno de los recuadros del sorteo anterior). Esto también se usará en la siguiente sección.Entonces, en este punto, tenemos la configuración descrita anteriormente.
Dando forma al tráfico
Es hora de entrar en el control del tráfico para obtener lo que desea. La
tc
herramienta le permite agregar disciplinas de colas:Viene con 3 nociones: qdisc , clases y filtros . Esas nociones se pueden usar para configurar una gestión compleja del flujo de paquetes y priorizar el tráfico en función de los criterios que desee.
En pocas palabras:
Todos estos generalmente funcionan como un árbol donde las hojas son qdiscs y las clases son nodos. La raíz de un árbol o subárbol se declarará como
<id>:
y los nodos hijos se declararán como<parent_id>:<children_id>
. Tenga en cuenta esta sintaxis.Para su caso, tomemos A y rendericemos el árbol con el que desea configurar
tc
:Explicación
1:
es la qdisc raíz adjunta al dispositivo vethA, se tomará explícitamente en cuantohtb
a Hierarchy Token Bucket (la qdisc predeterminada de un dispositivo espfifo
opfifo_fast
depende del sistema operativo). Es específicamente apropiado para la gestión de ancho de banda. Los paquetes que no coincidan con los filtros definidos en este nivel irán a1:30
clase.1:1
será unahtb
clase que limitará todo el tráfico del dispositivo a 10 Mbit / s.1:10
será unahtb
clase que limitará el tráfico de salida a 9 Mbit / s (90% de 10 Mbit / s).1:20
será unahtb
clase que limitará el tráfico de salida a 8 Mbit / s (80% de 10 Mbit / s).1:30
será unahtb
clase que limitará el tráfico a 10 Mbit / s (respaldo).:10, :20, :30
sonsfq
qdisc para la cola de equidad estocástica. En otras palabras, estos qdiscs garantizarán la equidad en la programación de la transmisión en función de los flujos.Todo esto se configura mediante los siguientes comandos:
Lo último que necesitamos es agregar filtros para que los paquetes IP con IP de destino sea igual a B irán a
1:10
clase y los paquetes IP con IP de destino sea igual a C irán a1:20
clase:Ahora que tiene la idea, deberá agregar
tc
reglas similares a B y C para que también se formen las transmisiones hacia A desde estos equipos.Pruebas
Ahora probémoslo. Para esto estoy acostumbrado a jugar personalmente
iperf
, simplemente consiste en un solo binario que puede ejecutarse como cliente o servidor y enviará automáticamente la mayor cantidad de tráfico posible entre ambos hosts.Entre A y B :
Obtenemos nuestro límite de ancho de banda de 9 Mbit / s .
Entre A y C:
Obtenemos nuestro límite de ancho de banda de 8 Mbit / s .
Entre A y D:
Aquí tenemos la interfaz virtual de velocidad máxima de 10 Mbit / s alcanzada.
Tenga en cuenta que la ráfaga de la primera medida de cada ejecución se puede manejar mejor en
htb
clases ajustando el parámetro adecuado.Limpiar
Para eliminar :
1:
:tc filter del dev vethA parent 1: prio 1 u32
.1:
:tc filter del dev vethA parent 1:
.1:20
y sus hijos:tc class del dev vethA parent 1:1 classid 1:20
.tc qdisc del dev vethA
.Para limpiar el conjunto de simulación:
fuente
Ubuntu tiene IPFW portado desde FreeBSD, e IPFW tiene DUMMYNET que permite administrar varios parámetros de red: ancho de banda, retraso, tasa de pérdida de paquetes, etc.
fuente
Lo mejor es usar las herramientas tc con el módulo netem ahora integrado (al menos en el servidor Ubuntu). Puede encontrar más información en este artículo en Stackoverflow .
fuente
El goteo funciona bien.
Esta discusión muestra algunas limitaciones: /unix/109973/how-to-change-speed-limit-of-running-trickle-instance
fuente