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

Проблемы с остановкой SCP при копировании файлов через VPN

У меня есть ряд файлов, которые мне нужно копировать через 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-серверов и клиентов? Я также рекомендую посетить их списки адресов электронной почты, поскольку это кажется довольно неясным.

  1. узнать свой MTU пути

    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
    
  2. настройте этот MTU для вашего сетевого подключения

    ip link set eth0 mtu 1196
    

    (учтите, что это временно)