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

Как подключиться к нашей сети Headscale

Своя закрытая сеть getchips на базе Headscale: те же клиенты Tailscale, но свой сервер. Внутри видны все машины команды, серверы стендов и выход в интернет через российский адрес.

Что нужно знать за минуту

  • Сервер: https://hs.212-2-234-164.sslip.io. Панель администратора: https://hs.212-2-234-164.sslip.io/admin (вход по API-ключу, есть у Анатолия и Олега).
  • Клиент обычный Tailscale, только с указанием нашего сервера. Ничего дополнительно ставить не надо.
  • Машины по адресам 100.64.0.x (таблица ниже), MagicDNS выключен. Исключение: имена стендов *.bot.getchips.ru и база знаний kb.abvdevelop.com резолвятся внутри сети через split DNS (в Tailscale база доступна как kb.bot.getchips.ru).
  • Одно устройство, одна сеть. Телефон, Mac или Windows, подключённые к Headscale, выходят из рабочей сети Tailscale (abvdevelop.com). Обратно тоже одной кнопкой. На Linux-серверах можно жить в обеих сетях вторым демоном.
  • Все видят всех: ограничений между узлами нет, так задумано.

Кто уже в сети

Адрес Машина Чья Что там
100.64.0.1 site-stand infra стенд сайта getchips для бота (bot.getchips.ru), DNS стендов
100.64.0.2 vds-02 infra Telegram-бот и сессии Claude по задачам
100.64.0.3 ai-host infra сервер с GPU, все стенды (VM), маршрут в сеть стендов 192.168.122.0/24
100.64.0.4 asis2 infra сервер Headscale, DERP-релей, exit node, база знаний kb.abvdevelop.com
100.64.0.5 mac-studio infra Mac Studio Анатолия
100.64.0.6 macbook-pro infra MacBook Анатолия
100.64.0.7 master-ru oleg прод сайта RU
100.64.0.8 master-eu oleg прод сайта EU
100.64.0.10 database-eu oleg база EU
100.64.0.11 database-ru oleg база RU
100.64.0.12 prod-global-master oleg прод global
100.64.0.13 prod-global-database oleg база global

Через ai-host доступна сеть стендов 192.168.122.0/24 (например 192.168.122.132 — сайт стенда itm-11993, 192.168.122.133 — его ЕРП). На клиенте должно быть включено принятие маршрутов и DNS сети: на Linux sudo tailscale set --accept-routes --accept-dns=true, в приложениях это включено по умолчанию.

Подключение: три шага

  1. Установить Tailscale: https://tailscale.com/download (App Store, Google Play, Microsoft Store или curl -fsSL https://tailscale.com/install.sh | sh на Linux).
  2. Указать наш сервер и нажать «Войти» (команды по устройствам ниже). Откроется страница с текстом вида headscale nodes register --user … --key mkey:….
  3. Прислать этот текст целиком Анатолию или Олегу в Telegram. Администратор выполнит регистрацию, через несколько секунд в приложении появится статус Connected и адрес 100.64.0.x.

Для серверов удобнее второй путь: администратор выдаёт pre-auth key, и сервер подключается сам (команды с --authkey ниже).

iPhone, iPad

  1. Tailscale → Settings → прокрутить вниз, несколько раз нажать на номер версии → «Use an alternate coordination server».
  2. Вписать https://hs.212-2-234-164.sslip.io → Log in.
  3. Скопировать команду со страницы и отправить администратору.

Android

Tailscale → три точки справа вверху → «Use an alternate server» → адрес сервера → Log in → команду со страницы отправить администратору.

Mac

Приложение из App Store: меню Tailscale → Settings → несколько раз нажать на версию → «Use alternate coordination server» → адрес → Log in. Или в терминале:

tailscale logout
tailscale up --login-server https://hs.212-2-234-164.sslip.io --hostname <имя-машины>

Windows

tailscale login --login-server https://hs.212-2-234-164.sslip.io --hostname <имя-машины>
Терминал от администратора. Дальше страница с командой регистрации, как у Mac.

Linux-сервер без Tailscale

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up --login-server https://hs.212-2-234-164.sslip.io --authkey <КЛЮЧ> --hostname <имя-машины> --accept-routes

Linux-сервер, который уже в Tailscale (обе сети сразу)

Второй демон рядом с первым. Готовый юнит с настройками берётся с любого нашего узла, например с vds-02 (100.112.140.106 в старой сети):

scp -r ubuntu@100.112.140.106:/etc/systemd/system/tailscaled-hs.service* /tmp/
sudo cp -r /tmp/tailscaled-hs.service* /etc/systemd/system/
sudo systemctl daemon-reload && sudo systemctl enable --now tailscaled-hs
sudo tailscale --socket=/run/tailscale-hs/tailscaled.sock up \
  --login-server https://hs.212-2-234-164.sslip.io --authkey <КЛЮЧ> \
  --hostname <имя-машины> --accept-dns=false --netfilter-mode=off
sudo tailscale --socket=/run/tailscale-hs/tailscaled.sock status

Warning

Во втором демоне не должно быть tailscaled --cleanup, обязателен --netfilter-mode=off, drop-in'ы firewall.conf, order.conf, dns-route.conf должны стоять рядом с юнитом. Иначе отваливается первая, рабочая сеть.

Что можно делать в сети

  • Ходить на машины по адресам из таблицы: ssh user@100.64.0.7.
  • Стенды разработки: имена *.bot.getchips.ru резолвятся внутри сети, стенды доступны через маршрут ai-host. Проверка: nslookup itm-11993.bot.getchips.ru192.168.122.132.
  • Сертификат стендов самоподписанный, один раз на устройство ставится корень: http://ca.bot.getchips.ru/root.crt. Windows: открыть файл → «Установить сертификат» → «Локальный компьютер» → «Доверенные корневые центры сертификации», перезапустить браузер. Linux: sudo cp root.crt /usr/local/share/ca-certificates/stand-ca.crt && sudo update-ca-certificates, Chrome на Linux: Настройки → Безопасность → Управление сертификатами → Центры сертификации → Импорт. Mac: security add-trusted-cert -r trustRoot -k ~/Library/Keychains/login.keychain-db root.crt. iPhone: открыть адрес в Safari, установить профиль, включить доверие в Настройки → Основные → Об этом устройстве → Доверие сертификатам. Без этого браузер пишет «не защищено», а формы входа отвечают «Неправильный логин или пароль». Тот же корень нужен для базы знаний kb.abvdevelop.com.
  • Выход в интернет через российский адрес: в приложении выбрать Exit node → asis2. На Linux: sudo tailscale set --exit-node=100.64.0.4, выключить sudo tailscale set --exit-node=.

Подключиться к боту, который ведёт задачу

У каждого дев-стенда есть свой пользователь на vds-02 (100.64.0.2), под которым живёт сессия Claude в контексте задачи. Разработчик один раз присылает администратору свой публичный ssh-ключ (cat ~/.ssh/id_ed25519.pub; если ключа нет: ssh-keygen -t ed25519). Администратор добавляет его в постоянный список, и ключ действует на всех текущих и будущих стендах задач. После этого:

ssh itm-11993@100.64.0.2          # сразу открывается сессия Claude задачи; Ctrl+A D — выйти, не закрывая
ssh itm-11993@100.64.0.2 bash     # обычная оболочка: папка задачи, свой claude, ssh на VM стенда
В сессии видно всё, что делает бот, можно писать ему прямо там. Адреса стенда и учётки лежат в ~/ИНСТРУКЦИЯ.md у этого пользователя.

Если не подключается

  • Браузер пишет DNS_PROBE_FINISHED_NXDOMAIN на адресе стенда: устройство не принимает DNS нашей сети. Linux: sudo tailscale set --accept-dns=true --accept-routes; в приложениях проверить «Use Tailscale DNS settings» и «Use Tailscale subnets», выключить и включить подключение. Проверка: nslookup itm-11993.bot.getchips.ru.
  • Имя резолвится, но страница не открывается (таймаут): не принят маршрут к сети стендов, см. пункт выше.
  • «Не защищено» и формы входа отвечают «Неправильный логин или пароль»: не установлен корневой сертификат стендов, см. выше.
  • Проверить сервер: https://hs.212-2-234-164.sslip.io/health должен ответить {"status":"pass"}.
  • Connected, но соседи не отвечают: администратор смотрит в панели, что оба узла Online. Между домашними и мобильными сетями трафик идёт через наш релей, tailscale netcheck должен показывать регион «own».
  • Хочу обратно в рабочий Tailscale: в тех же настройках сбросить сервер на стандартный и войти заново.

Администратору

  • Панель /admin: Machines → запросы; Settings → Pre-Auth Keys → Generate auth key (пользователь infra для наших машин, oleg для машин Олега).
  • Интерактивная регистрация на asis2: docker exec headscale headscale nodes register --user infra --key mkey:…
  • headscale nodes list, headscale nodes delete -i <ID>, маршруты headscale nodes list-routes, одобрить headscale nodes approve-routes -i <ID> -r <сеть>.
  • Подробности и аварийные процедуры: Администрирование Headscale, /srv/headscale/README.md на asis2.