
Я пытаюсь скопировать некоторые сертификаты на свой сервер с помощью scp
.
$ scp ./cert.* [email protected]:/tmp/
cert.crt 100% 2386 0.1KB/s 00:18
packet_write_wait: Connection to 192.168.0.42 port 22: Broken pipe
lost connection
Первый файл записывается на сервер, но не полностью, так как хэш-сумма не совпадает с исходным файлом.
Это происходит каждый раз, когда я пытаюсь открыть scp
эти файлы ( crt
, key
и p12
).
Протестировано с Ubuntu 16.10 ( OpenSSH_7.3p1 Ubuntu-1, OpenSSL 1.0.2g 1 Mar 2016
) и с Windows 10 ( WinSCP 5.9.4
). В обоих случаях копирование файлов не удалось.
Возможно, стоит упомянуть, что я подключен к серверу OpenVPN, чтобы добраться до целевого сервера (192.168.0.42), но это не должно быть проблемой.
Почему канал обрывается и как мне успешно скопировать файлы на сервер?
редактировать:Как и предполагалось в комментариях, это, скорее всего, связано с MTU, однако я пока не совсем уверен, как решить эту проблему.
решение1
Мне помогло снижение MTU соединения OpenVPN.
Из руководства OpenVPN:
--mssfix max Сообщить сеансам TCP, запущенным через туннель, что они должны ограничить размеры отправляемых пакетов, чтобы после того, как OpenVPN инкапсулирует их, размер результирующего пакета UDP, который OpenVPN отправляет своему партнеру, не превышал max байт. Значение по умолчанию — 1450.
Параметр max интерпретируется так же, как и параметр --link-mtu, т. е. размер пакета UDP после добавления накладных расходов на инкапсуляцию, но без учета самого заголовка UDP. Результирующий пакет будет больше максимум на 28 байт для IPv4 и на 48 байт для IPv6 (20/40 байт для заголовка IP и 8 байт для заголовка UDP). Значение по умолчанию 1450 позволяет передавать пакеты IPv4 по каналу с MTU 1473 или выше без фрагментации на уровне IP.
Параметр --mssfix имеет смысл только в том случае, если вы используете протокол UDP для одноранговой связи OpenVPN, т. е. --proto udp.
--mssfix и --fragment в идеале можно использовать вместе, где --mssfix попытается изначально исключить необходимость фрагментации пакетов TCP, а если большие пакеты все равно пройдут (от протоколов, отличных от TCP), --fragment выполнит их внутреннюю фрагментацию.
Оба параметра --fragment и --mssfix предназначены для обхода ситуаций, когда обнаружение Path MTU нарушено на сетевом пути между одноранговыми узлами OpenVPN.
Обычным симптомом такой поломки является успешное подключение OpenVPN, которое затем зависает во время активного использования.
Если --fragment и --mssfix используются вместе, --mssfix возьмет свой параметр max по умолчанию из опции --fragment max.
Таким образом, можно уменьшить максимальный размер пакета UDP до 1300 (хорошая первая попытка решения проблем соединения, связанных с MTU) с помощью следующих опций:
--tun-mtu 1500 --fragment 1300 --mssfix
Я добавил следующее в конфигурацию OpenVPN:
mssfix 1200
Я также предполагаю, что это значение может быть изменено для повышения производительности.