Temos dezenas de dispositivos incorporados instalados nos clientes, todos ligando para o nosso serviço OpenVPN. Isso funciona bem em geral, mas alguns de nossos clientes têm problemas graves no MTU do caminho. Nossa influência nos clientes para consertar suas redes é limitada, por isso precisamos do OpenVPN para lidar com isso. Em poucas palavras, minha pergunta é:
Como posso mitigar as MTUs de caminho baixo de alguns clientes em uma base por cliente, ou seja, sem usar configurações globais que acomodem o pior caso para todos os clientes
Observe que, no nosso pior caso, é muito ruim: o caminho MTU 576, solta todos os fragmentos, não se fragmenta, não respeita o DF-bit. Você vê por que eu preferiria não resolver esse problema globalmente.
A página de manual do OpenVPN oferece várias opções relacionadas ao MTU, principalmente --link-mtu, --tun-mtu, --fragment and --mssfix
. Mas também diz
--link-mtu [...] É melhor não definir esse parâmetro, a menos que você saiba o que está fazendo.
--tun-mtu [...] É melhor usar as opções --fragment e / ou --mssfix para lidar com problemas de dimensionamento do MTU.
Então comecei a experimentar --fragment
e --mssfix
logo percebi que pelo menos o primeiro deve ser configurado não apenas no lado do cliente, mas também no lado do servidor . Em seguida, olhei para a configuração por cliente do lado do servidor, --client-config-dir
mas diz
As seguintes opções são válidas em um contexto específico do cliente: --push, --push-reset, --iroute, --ifconfig-push e --config.
Nenhuma menção às opções de MTU!
Então, aqui estão minhas perguntas mais específicas:
- Por que exatamente são
link-mtu
etun-mtu
desencorajados? Quais são os possíveis problemas com essas opções? Observe que estou bastante confortável com o munging de cabeçalho IP de baixo nível. - Qual das opções
link-mtu tun-mtu fragment mssfix
precisa ser espelhada no lado do servidor para funcionar? - Em quais das opções
link-mtu tun-mtu fragment mssfix
podem ser usadasclient-config-dir
? - Caso todas as quatro opções precisem ser espelhadas no lado do servidor e não possam ser usadas internamente
client-config-dir
: Existem alternativas para combater o MTU de caminho baixo por cliente?
Notas:
- Partes de minhas perguntas já foram feitas há 5 anos aqui , mas elas realmente não foram respondidas naquela época, portanto, ouso duplicá-las.
- O servidor OpenVPN atualmente é 2.2.1 no Ubuntu 12.04. Estamos preparando uma atualização para 2.3.2 no Ubuntu 14.04
- Os clientes OpenVPN são 2.2.1 no Debian 7.6
- Estou feliz em determinar o caminho de MTU de um cliente manualmente
- Atualmente, não podemos testar muito do lado do servidor. Mas estamos construindo um banco de testes completo e separado, que deve estar pronto em breve.
Sou grato por qualquer conselho útil.
fonte
iptables
regras para reduzir o MSS em todos os pacotes SYN para ou a partir desse endereço IP do cliente.Respostas:
Resolvi o problema no lado do cliente adicionando a opção
mssfix 1300
ao arquivo de configuração.Na página do manual openvpn:
A ideia original da minha solução veio de personalvpn.org
fonte
mssfix
pode ser definido apenas no lado do cliente? Bem, isso é algo pelo menos. Ele não ajuda com pacotes UDP embora (que é por isso que eu estava interessado em outras opções, mas pelo menos as recomendadasfragment
precisa ser definido no lado do servidor também)Dada a falta de respostas, estou postando agora uma solução que não é muito elegante, mas simples: execute outra instância do OpenVPN no TCP para "maus clientes"
e abaixe o TCP MSS no cliente, por exemplo
Uma vantagem dessa solução é que cada cliente pode definir seu MSS individual.
É certo que é TCP-sobre-TCP, mas que deve funcionar bem o suficiente em muitos cenários .
Observe que ainda sou muito interessado em soluções que não exigem
proto tcp
e as marcarei como resposta válida se elas atenderem mais ou menos meus requisitos descritos.fonte