Перейти к содержанию

Ошибка SSL при установке

Описание проблемы

При выполнении cobot setup или rosdep update может возникать ошибка SSL-рукопожатия при попытке загрузить индексы зависимостей ROS с серверов GitHub.

Возможные причины:

  • Сетевые ограничения (корпоративный брандмауэр, интернет-провайдер)
  • Блокировка GitHub на уровне маршрутизатора или провайдера
  • Проблемы с DNS-разрешением raw.githubusercontent.com
  • Ограниченный доступ к TLS-соединениям (Deep Packet Inspection)

Симптомы

[rosdep] Initializing rosdep...
ERROR: unable to process source [https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml]:
        <urlopen error _ssl.c:983: The handshake operation timed out>
ERROR: unable to process source [https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml]:
        <urlopen error _ssl.c:983: The handshake operation timed out>
ERROR: Not all sources were able to be updated.
/usr/bin/rosdep:6: DeprecationWarning: pkg_resources is deprecated as an API.
    from pkg_resources import load_entry_point
ERROR: unable to process source [https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml]:
        <urlopen error _ssl.c:983: The handshake operation timed out> (https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml)
ERROR: unable to process source [https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml]:
        <urlopen error _ssl.c:983: The handshake operation timed out> (https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml)
ERROR: Not all sources were able to be updated.
[[[
ERROR: unable to process source [https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml]:
        <urlopen error _ssl.c:983: The handshake operation timed out> (https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml)
ERROR: unable to process source [https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml]:
        <urlopen error _ssl.c:983: The handshake operation timed out> (https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml)

Решение: VPN через WireGuard

Рекомендуемый способ обойти сетевые ограничения — поднять WireGuard VPN-туннель. По настройке WireGuard-сервера обратитесь к официальной документации WireGuard или документации вашего облачного провайдера.

Ниже приведена настройка клиентской части на рабочей машине.


1. Установка WireGuard

sudo apt update && sudo apt install -y wireguard-tools

2. Конфигурация клиента

Создайте файл конфигурации:

sudo nano /etc/wireguard/wg0.conf

Добавьте следующее содержимое, подставив данные вашего сервера:

[Interface]
# Приватный ключ клиента (генерируется командой: wg genkey)
PrivateKey = <ВАШ_ПРИВАТНЫЙ_КЛЮЧ>
# IP-адрес клиента в VPN-сети
Address = 10.0.0.2/24
# DNS-серверы (опционально)
DNS = 8.8.8.8, 1.1.1.1

[Peer]
# Публичный ключ WireGuard-сервера
PublicKey = <ПУБЛИЧНЫЙ_КЛЮЧ_СЕРВЕРА>
# Адрес и UDP-порт сервера
Endpoint = <IP_СЕРВЕРА>:51820
# Маршрутизировать весь трафик через VPN
AllowedIPs = 0.0.0.0/0
# Keepalive для клиентов за NAT
PersistentKeepalive = 25

Генерация ключей

Если у вас ещё нет ключевой пары, сгенерируйте её:

# Приватный ключ
wg genkey | tee privatekey

# Публичный ключ (передайте администратору сервера)
cat privatekey | wg pubkey

Частичная маршрутизация

Если нужно направлять через VPN только трафик к GitHub, замените AllowedIPs:

AllowedIPs = 140.82.112.0/20, 185.199.108.0/22

Проблемы с MTU

Если соединение установлено, но есть потери пакетов — уменьшите MTU в секции [Interface]:

MTU = 1420


3. Управление туннелем

# Поднять туннель
sudo wg-quick up wg0

# Проверить статус и статистику соединения
sudo wg show

# Остановить туннель
sudo wg-quick down wg0

4. Автозапуск при загрузке системы

sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0

5. Проверка подключения

# Убедиться, что интерфейс поднят
ip addr show wg0

# Проверить маршруты
ip route show

# Пинг до VPN-сервера
ping 10.0.0.1

# Проверить внешний IP (должен совпадать с IP VPN-сервера)
curl -s ifconfig.me

После успешного подключения повторно запустите установку:

cobot setup

или только обновление rosdep:

rosdep update

6. Диагностика

Если туннель не поднимается, смотрите системные логи:

sudo journalctl -u wg-quick@wg0 -f

Убедитесь, что на сервере открыт UDP-порт 51820:

# Проверить на сервере
sudo ufw status
# или
sudo iptables -L -n | grep 51820