Configurando um roteador para descartar pacotes, introduzir latência, dados corrompidos


13

Fiquei me perguntando se alguém tinha alguma experiência em configurar um ambiente projetado propositadamente para baixo desempenho ao enviar / receber solicitações pela rede. Estou desenvolvendo um aplicativo e gostaria de torná-lo robusto em redes com desempenho extremamente ruim. Alguém sabe se é possível configurar um roteador para:

  1. descartar pacotes intermitentemente
  2. introduzir latência intermitentemente em pacotes
  3. dados corrompidos em pacotes (este não é necessário, pois seria necessário abrir o pacote, alterar os dados e atualizar a soma de verificação, pois a camada TCP detectaria esse tipo de problema)

Se não for possível em um roteador, seria possível configurar um computador para atuar como roteador e fazer isso?

Muito Obrigado!

Respostas:


17

Se você usa uma caixa Linux como roteador, o netfilter possui várias maneiras de mexer com o tráfego de pacotes.

O randommódulo pode ser usado para descartar pacotes aleatoriamente. Por exemplo, isto:

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

fará com que o roteador descarte pacotes aleatoriamente a uma taxa média de 10%.

Você também pode corromper pacotes aleatórios com o destino XOR, por exemplo

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

corromperá 1% dos pacotes encaminhados ao XORing com uma chave derivada da sequência especificada.


Isso parece incrível! Obrigado Steven! Você já configurou isso? Que distribuição Linux?
Mark

Eu tive sucesso ao criar roteadores para redes pequenas usando o Debian. Mas realmente qualquer distro do Linux com um kernel recente deve se sair bem, já que o netfilter está embutido no kernel. Na verdade, nunca tentei criar um roteador "ruim", como descrito aqui, mas pode ser um projeto interessante para uma tarde preguiçosa de domingo ...
Steven Monday

Se você estiver usando o iptables versão 1.3.5, o comando acima poderá ocorrer com a mensagem "iptables v1.3.5: Não foi possível carregar a correspondência` aleatória '". Abaixo comando funcionou para mim - iptables -A FRENTE -m estatística --mode --probability aleatório 0,2 -j DROP
prashantsunkari

3

Utilizei com sucesso a WANem para simular as condições de rede de uma WAN entre a Alemanha e a Índia. O WANem é enviado como um CD ou dispositivo virtual inicializável. Você apenas inicializa, configura as propriedades de rede desejadas e, em seguida, direciona seu tráfego através dele. Citando a descrição oficial:

O WANem é um emulador de rede de área ampla, destinado a fornecer uma experiência real de uma rede de área ampla / Internet, durante o desenvolvimento / teste de aplicativos em um ambiente de LAN. Normalmente, os desenvolvedores de aplicativos desenvolvem aplicativos em uma LAN enquanto o objetivo pretendido para o mesmo poderia ser, os clientes acessando o mesmo pela WAN ou até pela Internet. Assim, o WANem permite que a equipe de desenvolvimento de aplicativos configure um gateway de aplicativo transparente que possa ser usado para simular características da WAN, como atraso de rede, perda de pacotes, corrupção de pacotes, desconexões, reordenação de pacotes, jitter, etc. WANem pode ser usado para simular Wide Area Condições de rede para tráfego de dados / voz e é liberado sob a licença GPL v2 amplamente aceitável.


2

Defina a porta de ligação ascendente para 10 Mbps e half duplex, se puder. Em seguida, use um host na rede para fazer ping nele. Isso deve neutralizá-lo decentemente: D


Defina também os tamanhos dos pacotes nos pings para consideravelmente maiores que o padrão. Essa pode ser uma maneira realmente eficaz e fácil de simular links de rede saturados / geralmente ruins - se você puder prejudicar a conexão específica, conforme observado, definindo propositadamente sua largura de banda para menor do que a máquina 'atacante'.
Andrew Barber

Você também pode mexer com a MTU, assim, escolher um tamanho verdadeiro excêntrico :)
SpaceManSpiff
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.