Назад | Перейти на главную страницу

Проблемы с SSH-соединением через туннель OpenVPN («Предыдущий сегмент TCP потерян»)

У меня есть VPN-туннель к серверу OpenVPN. VPN - это Sophos VPN, который использует OpenVPN под капотом. Я не знаю конфигурации сервера и не могу изменить конфигурацию сервера. Моя конечная точка туннеля настроена на Win 10 (OpenVPN 2.4.8), и ее конфигурация выглядит так:

ip-win32 dynamic
client
dev tun
proto tcp
verify-x509-name "[...]"
route remote_host 255.255.255.255 net_gateway
resolv-retry infinite
nobind
persist-key
persist-tun
dev-node "OpenVPN"
pull-filter ignore redirect-gateway
route 192.168.20.0 255.255.255.0 vpn_gateway 3
<ca>
[...]
</ca>
<cert>
[...]
</cert>
<key>
[...]
</key>
auth-user-pass
cipher AES-128-CBC
auth SHA256
comp-lzo no
route-delay 4
verb 3
reneg-sec 0
remote [...] 8443

Теперь у меня проблема, что SSH-соединение через туннель зависает в debug1: SSH2_MSG_KEXINIT sent (это WSL ssh):

$ ssh -vvvv 192.168.20.147
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n  7 Dec 2017
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: resolving "192.168.20.147" port 22
debug2: ssh_connect_direct: needpriv 0
debug1: Connecting to 192.168.20.147 [192.168.20.147] port 22.
debug1: Connection established.
[...]
debug1: Local version string SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.6p1 Ubuntu-4ubuntu0.3
debug1: match: OpenSSH_7.6p1 Ubuntu-4ubuntu0.3 pat OpenSSH* compat 0x04000000
debug2: fd 3 setting O_NONBLOCK
[...]
debug3: send packet: type 20
debug1: SSH2_MSG_KEXINIT sent

Я захватываю сеанс с помощью wirehark и вижу, что я получаю «Потерян предыдущий сегмент TCP»:

No.     Time        Source                Destination           Protocol Info
      4 2.933875    10.81.234.15          192.168.20.147        TCP      54013 > ssh [SYN] Seq=0 Win=64240 Len=0 MSS=1460 WS=8
      5 3.305435    192.168.20.147        10.81.234.15          TCP      ssh > 54013 [SYN, ACK] Seq=0 Ack=1 Win=64480 Len=0 MSS=1240 WS=9
      6 3.305511    10.81.234.15          192.168.20.147        TCP      54013 > ssh [ACK] Seq=1 Ack=1 Win=65536 Len=0
      7 3.317162    10.81.234.15          192.168.20.147        SSHv2    Client Protocol: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3\r
      8 3.335238    192.168.20.147        10.81.234.15          SSHv2    Server Protocol: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3\r
      9 3.339937    10.81.234.15          192.168.20.147        TCP      [TCP segment of a reassembled PDU]
     10 3.339948    10.81.234.15          192.168.20.147        SSHv2    Client: Key Exchange Init
     11 3.635978    192.168.20.147        10.81.234.15          TCP      ssh > 54013 [ACK] Seq=42 Ack=42 Win=64512 Len=0
     12 3.947955    192.168.20.147        10.81.234.15          TCP      [TCP Previous segment lost] ssh > 54013 [ACK] Seq=1122 Ack=1402 Win=64512 Len=0

Я думаю, это может быть связано с MTU, поэтому я поигрался с настройкой MTU на SSH-сервере и конечной точке клиента OpenVPN (различные значения от 1500 до <1000). Без изменений.

Я также пробовал использовать ping -f -l PKTSIZE 192.168.20.147 и самое интересное то, что ping выполняется успешно до PKTSIZE = 71, а для PKTSIZE> 71 я получаю сообщение «Request timed out».

Примечание. На другом компьютере с клиентом Sophos VPN Endpoint, но в той же сети, все работает должным образом.

Проблема устранилась после длительного сеанса отладки. Это довольно сложный вопрос.

Оказывается, клиент тоже сообщил Bad compression stub decompression header byte: 102 тут и там.

Мой клиент - OpenVPN 2.4.8, но сервер - OpenVPN 2.3.8. Кажется, есть ошибка со сжатием. Конфигурация клиента имеет comp-lzo no (как видно выше), но его необходимо изменить на comp-lzo yes.