Почему 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

Вопросы

  1. Почему после обновления пакетов в Arch WSL2 и в Fedora WSL2 curl на https://sh.rustup.rs начинает падать с Recv failure: Connection reset by peer, хотя на чистом Arch до обновления всё работало?
  2. Может ли это быть связано с обновлением curl/OpenSSL и изменением TLS-handshake (TLS 1.3, crypto-policies и т.п.)?
  3. Как можно исрпаивть проблему и в чём её причина?

Ответы (0 шт):