Negociação TLS trava

2

Eu tenho uma configuração que funcionou muito bem nos últimos anos, mas que parou de funcionar há alguns dias. Na minha sala de estar, eu tenho uma máquina "bare metal", com algumas VMs nela. Uma das VMs é responsável pelos meus emails (dovecot, postfix), um é responsável pelo servidor HTTP / S (nginx). Cada um desses dois faz uma conexão OpenVPN a um droplet na Digital Ocean. O droplet tem regras de firewall (iptables) que encaminham os pacotes para o cliente OpenVPN responsável pelo pacote: se ele está vindo para a porta 80, encaminhe para a VM interna que possui nginx. Se for um pacote relacionado a email, encaminhe-o para a VM de email.

Desde alguns dias atrás, qualquer coisa relacionada ao TLS parou de funcionar (veja as edições). As transações SMTP apenas travariam durante a fase STARTTLS, as conexões HTTPS travariam durante a negociação TLS. Qualquer outra coisa funciona bem: conexões HTTP simples são atendidas (consulte as edições) e, se eu desabilitar o TLS no postfix, os emails entrarão bem.

Além disso, se eu estiver na mesma rede e adicionar o nome do host em /etc/hosts ao IP interno da VM, receberei HTTPS e STARTTLS para funcionar bem. Ele simplesmente não funciona se a conexão estiver vindo do "lado de fora" (isto é: do túnel).

Se eu alterar a conexão à Internet do "bare metal" para usar a conexão de dados móveis do meu telefone, ele também funcionará como esperado.

Em suma, parece para mim que meu roteador e / ou meu ISP esteja desempenhando um papel fundamental nessa equação, mas eu simplesmente não consigo aceitá-lo , porque o tráfego para / da VM passa via OpenVPN (criptografado). Se eu já aprendi alguma coisa, a explicação mais simples é geralmente a correta, e a única explicação que estou encontrando não é nada simples, por isso, estou interessado em outras possíveis causas para esse problema.

O que tentei até agora:

  • Outra VM no bare metal, com outro sistema operacional: não funciona
  • Raspberry Pi na minha rede interna como cliente OpenVPN com nginx: não funciona
  • Outra gota como cliente OpenVPN com nginx: funciona
  • Uma VM no meu laptop como cliente OpenVPN com nginx: não funciona
  • Meu laptop está conectado à internet através da conexão de dados móveis do meu telefone, além do cenário acima: funciona
  • Um servidor OpenVPN em um provedor diferente (Amazon EC2): não funciona

Logs que podem ajudar:

TCP despeje a partir da VM interna

TCP despeja do servidor OpenVPN (Droplet)

Regras de firewall no droplet

Conexão bem sucedida da internet pública para a VM interna, através do Droplet, na porta 80

Exemplo de conexão que trava ao conectar-se da Internet pública à VM interna, através do Droplet, na porta 443

Conexão bem sucedida da rede interna na porta 443

Editar:

Log do Wireshark para a VM

Log do Wireshark para o servidor OpenVPN

Editar 2:

Eu testei um pouco mais e criei um novo vhost no nginx com um certificado autoassinado. Parece que a troca de dados entre o servidor OpenVPN e a VM foi mais longe, mas não foi concluída:

Log do Wireshark para a VM

Log do Wireshark para o servidor OpenVPN

Editar 3:

Parece que no final, não é sobre o TLS. É uma "coincidência" que aconteceu sempre que o TLS estava envolvido, mas estou convencido de que é sobre o tamanho do pacote: removendo o "redirecionamento forçado" no nginx que encaminha todas as conexões HTTP para HTTPS, vejo que o problema também acontece Conexões HTTP quando a carga útil é maior que alguns KBs.

Eu também testei a desconexão do roteador / modem da conexão de fibra do meu provedor e fiz com que ele usasse o tethering USB, do meu telefone, para verificar se o problema estava no roteador / modem e funcionava. Então, parece que o problema agora está isolado.

    
por jpkrohling 02.11.2015 / 20:30

0 respostas

Tags