Почему curl в WSL2 (Fedora и обновлённый Arch) выдаёт Recv failure: Connection reset by peer на https://sh.rustup.rs?
Описание проблемы
Я пытаюсь установить Rust через rustup в WSL2, но в некоторых дистрибутивах любой запрос curl к https://sh.rustup.rs падает с ошибкой TLS.
Команда:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
даёт:
curl: (35) Recv failure: Connection reset by peer
Окружение:
- Windows 11
- WSL2
- Дистрибутивы в WSL:
FedoraLinux-43(Fedora 43)archlinux(Arch Linux)
- Один и тот же роутер и провайдер, меняется только дистрибутив внутри WSL.
Поведение в Fedora WSL2
Вывод curl -4 -v https://sh.rustup.rs:
$ curl -4 -v https://sh.rustup.rs
* Host sh.rustup.rs:443 was resolved.
* IPv6: (none)
* IPv4: 18.165.122.120, 18.165.122.110, 18.165.122.61, 18.165.122.35
* Trying 18.165.122.120:443...
* ALPN: curl offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* CAfile: /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
* CApath: none
* Recv failure: Connection reset by peer
* TLS connect error: error:00000000:lib(0)::reason(0)
* OpenSSL SSL_connect: Connection reset by peer in connection to sh.rustup.rs:443
* closing connection #0
curl: (35) Recv failure: Connection reset by peer
IPv6 в WSL у меня не настроен, поэтому curl -6 ожидаемо падает с Network is unreachable (и так и в Fedora, и в Arch):
$ curl -6 -v https://sh.rustup.rs
...
* Immediate connect fail ... Network is unreachable
curl: (7) Failed to connect to sh.rustup.rs port 443: Could not connect to server
Пробовал явно ограничить HTTP/TLS:
$ curl -v --http1.1 --proto '=https' --tlsv1.2 https://sh.rustup.rs
...
* Trying 18.165.122.35:443...
* ALPN: curl offers http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
...
* Recv failure: Connection reset by peer
curl: (35) Recv failure: Connection reset by peer
Обратил внимание, что даже с --tlsv1.2 в логе всё равно показывается TLSv1.3 (OUT), TLS handshake.
Поведение в Arch WSL2
На чистом, только что установленном образе Arch команда:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
отрабатывает успешно: скрипт rustup скачивается, появляется меню установки и т.п.
Однако после обновления системы:
sudo pacman -Syu
# перезапуск WSL
та же команда в Arch начинает вести себя так же, как в Fedora — curl возвращает:
curl: (35) Recv failure: Connection reset by peer
То есть:
- Arch WSL2 до обновления пакетов →
curlнаhttps://sh.rustup.rsработает. - Arch WSL2 после
pacman -Syu→ та же ошибка(35), что и в Fedora WSL2. - IPv6 в обоих случаях не работает одинаково (
Network is unreachable), но по IPv4 на чистом Arch запрос проходил.
Что уже пробовал
- Разные флаги
curl:-4,-6--http1.1--proto '=https'--tlsv1.2,--tls-max 1.2
- Проверил, что Windows-браузер открывает
https://sh.rustup.rsбез проблем. - Проверил, что на чистом Arch WSL2 до обновления всё работает.
- После обновления Arch и в Fedora поведение одинаковое:
Recv failure: Connection reset by peerпри попытке TLS-рукопожатия. - На другом ПК Fedora WSL2 с тем же образом работает нормально, без
Recv failure. - Проблема только с
https://sh.rustup.rsиhttps://crates.io
Вопросы
- Почему после обновления пакетов в Arch WSL2 и в Fedora WSL2
curlнаhttps://sh.rustup.rsначинает падать сRecv failure: Connection reset by peer, хотя на чистом Arch до обновления всё работало? - Может ли это быть связано с обновлением
curl/OpenSSL и изменением TLS-handshake (TLS 1.3, crypto-policies и т.п.)? - Как можно исрпаивть проблему и в чём её причина?