Туннель не подключается из-за IPv6
Если у хоста есть IPv6, клиент tuna может подключаться к нам по нему. Обычно это незаметно, но у некоторых хостов IPv4 и IPv6 принадлежат разным сетям, и по IPv6 туннель не может подключиться. Мы встречали такое на VPS.
Симптомы
Скорее всего, дело в IPv6, если у хоста есть IPv6 и:
- туннель постоянно переподключается или падает по таймауту при подключении к ноде;
- через туннель заметно выросла задержка.
Диагностика
Проверьте, с каких адресов хост выходит в интернет и в какой стране они числятся:
curl -4 https://ifconfig.co/country
curl -6 https://ifconfig.co/country
Если вторая команда вернула ответ, значит, у хоста есть IPv6. Если страны различаются, это почти наверняка ваш случай.
Подробный лог подключения покажет, к каким адресам идёт клиент и на чём обрывается соединение:
tuna http 8080 --log-level=debug
Общая проверка сети — команда tuna diagnose.
Решение
Задайте переменную окружения TUNA_FORCE_IPV4=1. С ней клиент подключается к API и к нодам только по IPv4, а если не работает системный DNS, использует запасные публичные DNS-серверы. Переменная есть в tuna-cli начиная с 0.31.0.
TUNA_FORCE_IPV4=1 tuna http 8080
Сервис systemd
Если туннель установлен сервисом, добавьте переменную в drop-in. Имя сервиса по умолчанию — tuna, своё имя задаётся флагом --name:
sudo systemctl edit tuna
[Service]
Environment=TUNA_FORCE_IPV4=1
sudo systemctl restart tuna
Docker
Передайте переменную флагом -e TUNA_FORCE_IPV4=1 в docker run или в environment в Docker Compose:
services:
tuna:
image: yuccastream/tuna:latest
command: http app:8080
environment:
TUNA_API_KEY: tak_***
TUNA_FORCE_IPV4: "1"
Не помогло — напишите в поддержку и приложите вывод tuna diagnose и лог с --log-level=debug.