A conexão TCP através do IPSec (Linux / Strongswan) pára após exceder o PMTU

5

Os backups (via Bacula) de um dos meus servidores (“A”) conectados via IPSec (Strongswan no teste Debian) a um daemon de armazenamento (“B”) não terminam 95% das vezes que eles são executados. O que aparentemente acontece é:

  1. O Bacula abre uma conexão TCP com o IP da VPN do daemon de armazenamento. (A → B)
  2. Como a configuração do kernel net.ipv4.ip_no_pmtu_disc=0 é definida por padrão, o bit IP Don't Fragment é definido no pacote de texto simples.
  3. Ao rotear o pacote para o túnel IPSec, o bit DF da carga é copiado para o cabeçalho IP do pacote ESP.
  4. Depois de algum tempo (geralmente cerca de 20 minutos) e até vários gigabytes de dados enviados, um pacote um pouco maior que os pacotes ESP antes é enviado. (A → B)
  5. Como a interface do daemon de armazenamento tem uma MTU menor que a do host de envio, um roteador envia um erro de tipo 3 do ICMP, código 4 (Fragmentação necessária e não fragmentar foi definido) para o host. (algum roteador → A)
  6. A conexão pára, por algum motivo o host A inunda ~ 100 ACKs duplicados vazios para B (dentro de ~ 20 ms).

(Os pacotes ICMP estão chegando ao host A e não há regras de iptables no lugar que bloqueiam o ICMP.)

Possíveis razões pelas quais isso acontece, posso pensar em:

  • Bug do kernel (Debian 3.13.7-1)
  • A implementação IPSec do Linux ignora intencionalmente a mensagem PMTU como medida de segurança, uma vez que está desprotegida e afetaria uma SA existente. (parece ser comportamento válido de acordo com RFC 4301 8.2.1 )
  • Precisa fazer algo com o PMTU Aging ( RFC 4301 8.2.2 )

Qual é a melhor maneira de corrigir isso, sem desabilitar globalmente a descoberta da PMTU ou diminuir a MTU da interface? Talvez limpar o bit DF de alguma forma como o FreeBSD faz com ipsec.dfbit = 0 ?

    
por al. 10.07.2014 / 21:08

2 respostas

2

Você pode tentar criar uma regra em iptables para definir o TCP MSS para o tráfego destinado a VPN a um valor mais baixo. Mas sem uma captura de pacotes, é difícil adivinhar o que está acontecendo.

    
por 13.07.2014 / 05:33
0

Se a descoberta de PMTU em um cenário de VPN falhar, isso geralmente é um problema com os endereços IP públicos dos gateways ou roteadores intermediários ou mensagens ICMP filtradas. O MSS clamping é apenas uma solução feia.

    
por 28.07.2014 / 23:12