Configurar un enrutador para descartar paquetes, introducir latencia, datos corruptos


13

Me preguntaba si alguien tenía alguna experiencia configurando un entorno diseñado a propósito para un bajo rendimiento al enviar / recibir solicitudes a través de una red. Estoy desarrollando una aplicación y me gustaría que sea robusta en redes con un rendimiento extremadamente bajo. ¿Alguien sabe si es posible configurar un enrutador para:

  1. descartar paquetes intermitentemente
  2. introducir de forma intermitente latencia en paquetes
  3. datos corruptos en paquetes (este no es necesario ya que requeriría abrir el paquete, cambiar los datos y actualizar la suma de comprobación ya que la capa TCP detectaría este tipo de problema)

Si no es posible en un enrutador, ¿sería posible configurar una computadora para que actúe como enrutador y hacer esto?

¡Muchas gracias!

Respuestas:


17

Si usa una caja Linux como enrutador, netfilter tiene varias formas de jugar con su tráfico de paquetes.

El randommódulo se puede usar para descartar paquetes al azar. Por ejemplo, esto:

iptables -A FORWARD -m random --average 10 -j DROP

hará que el enrutador descarte paquetes al azar a una tasa promedio del 10%.

También puede corromper paquetes aleatorios con el objetivo XOR, p. Ej.

iptables -A FORWARD -m random --average 1 -j XOR --key "junktoxortomypacket"

corromperá el 1% de los paquetes reenviados XORingándolos con una clave derivada de la cadena dada.


¡Esto suena genial! Gracias Steven! ¿Alguna vez has configurado esto? ¿Qué distribución de Linux?
Mark

He tenido éxito creando enrutadores para redes pequeñas usando Debian. Pero en realidad casi cualquier distribución de Linux con un kernel reciente debería funcionar bien, ya que netfilter está integrado en el kernel. En realidad nunca he intentado crear un enrutador "malo" como se describe aquí, pero podría ser un proyecto interesante para un domingo por la tarde flojo ...
Steven Monday

Si está utilizando iptables versión 1.3.5, el comando anterior puede producir un error con el mensaje "iptables v1.3.5: No se pudo cargar la coincidencia` random '". El siguiente comando funcionó para mí: iptables -A ADELANTE -m estadística --modo aleatorio --probabilidad 0.2 -j DROP
prashantsunkari

3

He utilizado con éxito WANem para simular las condiciones de red de una WAN entre Alemania e India. WANem se entrega como un CD de arranque o dispositivo virtual. Simplemente lo inicia, configura las propiedades de red deseadas y luego enruta su tráfico a través de él. Citando la descripción oficial:

WANem es un emulador de red de área amplia, destinado a proporcionar una experiencia real de una red de área amplia / Internet, durante el desarrollo / prueba de aplicaciones en un entorno LAN. Por lo general, los desarrolladores de aplicaciones desarrollan aplicaciones en una LAN, mientras que el propósito previsto para la misma podría ser que los clientes accedan a la misma a través de la WAN o incluso de Internet. WANem permite al equipo de desarrollo de aplicaciones configurar una puerta de enlace de aplicaciones transparente que puede usarse para simular características de WAN como retraso de red, pérdida de paquetes, corrupción de paquetes, desconexiones, reordenamiento de paquetes, fluctuaciones, etc. WANem puede usarse para simular área amplia Condiciones de red para el tráfico de datos / voz y se publica bajo la licencia GPL v2 ampliamente aceptada.


2

Establezca el puerto de enlace ascendente a 10 Mbps y medio dúplex si puede. Luego use un host en la red para hacer ping a los mocos. Eso debería neutralizarte decentemente: D


Establezca los tamaños de paquete en los pings a considerablemente más grande que el predeterminado, también. Esta puede ser una manera realmente efectiva y fácil de simular enlaces de red saturados / generalmente defectuosos, si puede paralizar la conexión específica como se indica al establecer deliberadamente su ancho de banda a un valor inferior al que tiene la máquina 'atacante'.
Andrew Barber el

También podría meterse con MTU, elegir un tamaño real de bicho raro :)
SpacemanSpiff
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.