У меня есть сервер OpenVPN, настроенный для создания туннелей через TCP-соединения с множеством других серверов в различных удаленных сетях. Все работает довольно надежно, кроме одного удаленного сервера. Для этого удаленного сервера примерно раз в день мы не можем подключиться через VPN с сервера VPN к веб-серверу, работающему на этом сервере. Примерно через 15 минут OpenVPN на удаленном сервере будет иметь это сообщение в журнале:
read TCPv4_CLIENT [NO-INFO]: Connection timed out (code=110)
Затем удаленный сервер перезапустит соединение OpenVPN, и оно заработает.
Мне удалось запустить tcpdump на удаленном сервере и сервере VPN, пока возникает эта проблема, и это выглядит так на удаленном сервере, когда я подключаюсь к веб-серверу на удаленном сервере с сервера 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
У меня нет под рукой следов с удаленного сервера, но на удаленном сервере я мог видеть входящие пакеты на eth0 и tun0 и исходящие пакеты на eth0 и tun0. Также я мог видеть пакеты проверки активности OpenVPN на удаленном сервере, когда возникает проблема.
Для меня это выглядит так, как будто начальный пакет из telnet отправляется на удаленный сервер, а ответный пакет возвращается, но этот ответный пакет никогда не помещается в tun0.
Поскольку это происходит только с одним из наших удаленных серверов, я предполагаю, что это какая-то проблема с сетевым подключением, но я понятия не имею, что именно. Может быть, это какие-то потерянные пакеты или что-то в этом роде, но когда я был на удаленном сервере, когда возникала эта проблема, сетевое соединение работало нормально, насколько я мог судить. Кроме того, мне бы очень хотелось, чтобы он мог быстрее обнаружить эту проблему и перезапустить соединение openvpn, когда это произойдет.
У меня в конфигурационных файлах установлен параметр keepalive 5 30, но похоже, что пакеты проверки активности OpenVPN на самом деле перемещаются между VPN-сервером и удаленным сервером, когда возникает эта проблема.
конфигурация клиента:
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
конфигурация сервера:
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