Como eu melhoro a confiabilidade do OpenVPN em um link de alta latência?

11

Estamos executando uma VPN OpenVPN através de um link de satélite BGAN, onde os tempos de ping são de cerca de 3 segundos. Nós o usamos em uma configuração tun , e estamos rodando no Linux (CentOS). É principalmente o e-mail que será enviado pelo link, mas assim que o e-mail contiver anexos grandes, a VPN parece estar paralisada.

O "Eu posso pingar pelo túnel, mas qualquer trabalho real faz com que ele seja bloqueado. Este é um problema de MTU? " pergunta na FAQ do OpenVPN parece descrever meu problema exatamente, mas usar mssfix e fragment ainda não parece fazer muito para melhorar a situação.

Meu teste principal é copiar um arquivo de 2MB sobre a VPN com scp . Ele copiará cerca de 192kbytes e depois reportará um estado - parado - . Se eu esperar alguns segundos, ele começará a copiar novamente e, em seguida, parará novamente depois de mais alguns kbytes.

Essa paralisação ocorre se eu configurei ou não as opções fragment ou mssfix na configuração do OpenVPN (embora a configuração fragment 1000 tenha parecido reduzir o bloqueio, mas não eliminá-lo). O OpenVPN mtu-test relatou 1542 como o tamanho da MTU.

Pesquisei na Internet mais conselhos sobre como e quando usar mssfix e fragment , mas só encontro páginas que dizem o mesmo que a FAQ e não fornecem detalhes sobre como e quando usar quais parâmetros.

Minhas perguntas então são:

  • Quando uso mssfix e fragment ?
  • Eu uso mssfix e fragment em combinação?
  • Se mssfix e fragment forem a solução, quais são os parâmetros tun-mtu , link-mtu e mtu-disc para?

Além disso, tenho usado a ferramenta iperf para medir a largura de banda. Sem a VPN, ela mede constantemente na ordem de 210Kbits / seg.

Ao usar o iperf sobre a VPN ( $ iperf -c remoteserver -t60 -i5 ), ele iniciaria em 10Kbits / seg, depois aumentaria de forma constante até relatar 1.2Mbits / seg, e então ele pareceria travar, onde ele relata 0kbits / seg para um número de iterações (eu acho que o 1.2Mbits / sec pode ser por causa de algum buffer OpenVPN ou assim por diante)

iperf é a melhor maneira de medir a largura de banda?

Qualquer ajuda com esta situação será muito apreciada.

    
por iWerner 25.11.2009 / 15:06

4 respostas

5

1542 como um MTU? Nunca ouvi falar disso para um link WAN. Geralmente, MTU é a carga máxima, o tamanho do pacote ip menos o cabeçalho para IP (20 bytes) e ICMP (8 bytes). Isso significa MTU = 1500 para uma LAN Ethernet tradicional. Além disso, a maioria das VPNs introduz uma sobrecarga para o encapsulamento de pacotes. Uma VPN MTU típica é 1400.

Em redes modernas, é difícil concluir qual MTU será a qualquer momento, pois os caminhos de entrada e saída podem ser diferentes, e eles também podem mudar devido ao redirecionamento automático do caminho. Para uma rede como esta, pode ser mais eficaz definir o MTU baixo em seus hosts que estão em ambos os lados do link VPN, como 576.

MSS (tamanho máximo do segmento) é MTU menos os cabeçalhos IP + TCP (40 bytes). Isso geralmente é negociado pela pilha de rede e geralmente não tem os mesmos problemas de negociação que o MTU, a menos que o MTU esteja errado. (A negociação de MTU é geralmente prejudicada por roteadores bloqueados de ICMP ou buraco negro).

A primeira coisa que eu faria seria fazer uma captura de pacote de rede no final de envio e classificar a exibição por tamanho de quadro (talvez seja necessário adicionar essa coluna no Wireshark). Você deve verificar se não está enviando quadros que são grandes demais, o que você esperaria que fossem. Não é incomum que as placas de rede modernas enviem quadros grandes se opções como Large Send Offload ou Jumbo Frames estiverem ativadas. Eu já vi mais de 30.000 quadros de bytes quando essas opções estão ativadas.

    
por 25.11.2009 / 15:58
2

Apenas por curiosidade, você tentou baixar o MTU da interface de rede? Talvez o link do satélite atrapalhe muito a fragmentação. Como uma nota contra-intuitiva, você pode querer tentar abrir o openvpn sobre TCP para uma mudança. Eu sei que deve diminuir o desempenho, mas se você não tem controle sobre a fragmentação ao longo da linha, isso pode ajudá-lo.

    
por 25.11.2009 / 15:18
2

Quando você usa o TCP, aumente o tamanho da janela do TCP; isso ajudará com o "número de pacotes no ar".

Já faz um tempo desde que eu tive que jogar com essas coisas, mas aqui está um link google encontrado para mim.

Depois que eu releio sua pergunta, vejo que você está executando o BGAN - Eu daria uma boa olhada em isto (ou apenas google para:" BGAN spoofing ").

Quanto à medição da largura de banda, descobri que o iperf é bastante decente, desde que você esteja usando tamanhos razoáveis de pacotes.

    
por 25.11.2009 / 16:25
2

Eu acho que você pode estar latindo na árvore errada. Toda vez que eu tive problemas de MTU errados, o tráfego parou bem antes de 192 KB. Eu acho que é mais relacionado a alguns na janela "in flight packets", seja na janela TCP, ou talvez alguns buffers no próprio uplink do satélite.

Definitivamente, faça algumas capturas longas de pacotes (tanto "dentro" como "fora" da VPN) e veja se você está recebendo todos os ACK 's

    
por 25.11.2009 / 19:03

Tags