Queria postar isso como uma história de aprender com meus erros, já que procurar em todos os lugares não tinha trazido nada por dias. Espero que o Google capte isso para a próxima alma desavisada.
Resumo: disparidades no MTU podem fazer a navegação web falhar (por timeout) em configurações de OpenVPN baseadas em UDP de maneiras estranhas.
Contexto:
Sabia rodar OpenVPN localmente por alguns anos sem problemas, mas recentemente comecei a ter dificuldades quando tive que trocar o modem do meu ISP de uma ponte transparente para uma configuração mais “normal”. De repente, a navegação na web quebrou, com clientes conectados expirando e recusando-se a carregar qualquer página na intranet ou na internet. Ping ainda funcionava, SSH ainda funcionava, tcpdump até mostrava que conexões HTTP entregavam respostas HTTP 200 OK até a minha interface interna. Tentei de tudo por dias, reconfigurando regras de firewall de maneiras cada vez mais estranhas e tentando criar rotas estáticas arcanas, supondo que a mudança no roteador fosse a causa.
Solução:
Pois bem, a mudança no roteador _foi_ a causa, mas não de um jeito que eu teria imaginado. Finalmente, descobri uma informação ótima neste site (OpenVPN MTU: Finding the Correct Settings - The Geek Pub), onde o autor mencionou que VPNs baseadas em UDP não têm como saber se pacotes maiores que o MTU permitidos na rede falharam de entregar. Em retrospectiva, faz todo sentido, mas dias de buscas no Google não tinham mencionado essa possibilidade. Minha conexão com a internet é DSL, conectada via PPP, e por isso meu MTU é um pouco menor que o “normal”. Literalmente, a única mudança necessária após descobrir meu MTU exato foi adicionar tun-mtu <meu tamanho menor> ao server.conf e reiniciar o serviço. A navegação na web voltou a funcionar instantaneamente.