Eu tenho um servidor OpenVPN que está configurado para fazer túneis através de conexões TCP com um monte de outros servidores em várias redes remotas. Tudo funciona de forma bastante confiável, exceto por um dos servidores remotos. Para esse servidor remoto, aproximadamente uma vez por dia, não podemos nos conectar pela VPN do servidor VPN a um servidor da Web em execução nesse servidor. Após cerca de 15 minutos, o OpenVPN no servidor remoto terá esta mensagem no log:
read TCPv4_CLIENT [NO-INFO]: Connection timed out (code=110)
E então o servidor remoto irá reiniciar a conexão do OpenVPN e funciona.
Eu consegui executar o tcpdump no servidor remoto e no servidor VPN enquanto esse problema está ocorrendo e se parece com isso no servidor remoto quando faço telnet para o servidor da web no servidor remoto do servidor VPN.
tun0:
17:23:35.965732 IP vpn-server > remote-server.http: Flags [S], seq 1905371748, win 29200, options [mss 1460,sackOK,TS val 234388092 ecr 0,nop,wscale 7], length 0
eth0:
17:23:51.981758 IP vpn-server.51194 > remote-server.55840: Flags [P.], seq 1035:1138, ack 1, win 28288, options [nop,nop,TS val 234392096 ecr 529325214,nop,nop,sack 1 {1016:14557}], length 103
17:23:52.024782 IP remote-server.55840 > vpn-server.51194: Flags [.], ack 1138, win 1002, options [nop,nop,TS val 529365753 ecr 234392096], length 0
Eu não tenho os rastreamentos do servidor remoto à mão, mas no servidor remoto eu pude ver os pacotes de entrada em eth0 e tun0 e os pacotes de saída em eth0 e tun0. Também pude ver os pacotes keep-alive do OpenVPN no servidor remoto quando o problema está acontecendo.
Então, para mim, parece que o pacote inicial do telnet está sendo enviado para o servidor remoto e um pacote de resposta volta, mas esse pacote de resposta nunca é colocado no tun0.
Como isso só acontece com um de nossos servidores remotos, estou assumindo que há algum problema com a conexão de rede, mas não tenho ideia do que. Talvez sejam alguns pacotes perdidos ou algo assim, mas quando eu estive no servidor remoto quando esse problema está acontecendo, a conexão de rede estava funcionando bem, tanto quanto eu poderia dizer. Além disso, eu realmente gostaria que pudesse detectar esse problema mais rapidamente e reiniciar a conexão openvpn quando isso acontecer.
Eu tenho "keepalive 5 30" definido nos arquivos de configuração, mas parece que os pacotes keep-alive do OpenVPN estão indo e voltando entre o servidor VPN e o servidor remoto quando esse problema acontece.
configuração do cliente:
client
dev tun
proto tcp
remote remote-server 51194
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
ca ca-cert.pem
cert client-cert.pem
key client-key.pem
ns-cert-type server
comp-lzo
verb 3
script-security 2
keepalive 5 30
configuração do servidor:
ca ca-cert.pem
cert server-cert.pem
client-config-dir clients
comp-lzo
dev tun
dh dh1024.pem
ifconfig-pool-persist ipp.txt
group nogroup
key server-key.pem
max-clients 100
persist-key
persist-tun
ping 10
port 51194
proto tcp
push "route 10.0.0.0 255.255.0.0"
server 10.242.0.0 255.255.0.0
status openvpn-status.log
topology subnet
user nobody
verb 4
Tags openvpn