У меня есть ряд файлов, которые мне нужно копировать через SCP по VPN на удаленный сервер Linux каждую ночь. Файлы не большие, здесь речь идет о десятках мегабайт, но копия файла почти всегда останавливается через несколько секунд. Выполняя команду SCP с -vvv, я снова и снова вижу следующее в процессе попытки копирования:
debug2: channel 0: rcvd adjust 131072
debug2: channel 0: rcvd adjust 131072
debug2: channel 0: rcvd adjust 131072
Есть предположения? Я вижу, что этот вопрос задают в разных местах, но никогда не получают ответов. Любая помощь будет оценена.
Вы разрешаете ICMP через VPN? "TCP-соединение останавливается через несколько секунд" часто означает "Черная дыра PMTU".
Подобно ответу @Gerald на этой странице http://www.netheaven.com/pmtu.html дает хорошее объяснение MTU Discovery и варианты решения этой проблемы.
Также технический документ Cisco, в котором обсуждаются IP-фрагментация, обнаружение MTU и MSS, относящиеся к туннелям IPSec VPN, но в равной степени действителен для аналогичных ситуаций. http://www.cisco.com/en/US/tech/tk827/tk369/technologies_white_paper09186a00800d6979.shtml
У нас были похожие проблемы spurios с scp на некоторых серверах Linux (Debian, 2.6.24-etchnhalf).
Мы смогли избавиться от задержек, отключив TCP-переменную tcp_sack ("избирательные подтверждения tcp") на удаленных серверах:
sysctl -w net.ipv4.tcp_sack=0
В Debian tcp_sack по умолчанию включен. Если я прочитаю http://www.frozentux.net/ipsysctl-tutorial/chunkyhtml/tcpvariables.html, отключать эту опцию не имеет смысла, но в нашем случае это помогло.
Вы можете сделать это изменение постоянным, добавив строку net.ipv4.tcp_sack=0
в /etc/sysctl.conf (в других системах Linux YMMV).
У вас установлена последняя версия всех используемых вами ssh-серверов и клиентов? Я также рекомендую посетить их списки адресов электронной почты, поскольку это кажется довольно неясным.
ping -M do -s 1472 host.domain
PING host.domain (10.0.0.1) 1472(1500) bytes of data.
ping: sendmsg: Message too long
ping: local error: Message too long, mtu=1196
^C
ping -M do -s 1168 host.domain
PING host.domain (10.0.0.1) 1168(1196) bytes of data.
1176 bytes from 10.0.0.1: icmp_seq=1 ttl=60 time=283 ms
^C
настройте этот MTU для вашего сетевого подключения
ip link set eth0 mtu 1196
(учтите, что это временно)