Как подключиться к нашей сети 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, в приложениях это включено по умолчанию.
Подключение: три шага
- Установить Tailscale: https://tailscale.com/download (App Store, Google Play, Microsoft Store или
curl -fsSL https://tailscale.com/install.sh | shна Linux). - Указать наш сервер и нажать «Войти» (команды по устройствам ниже). Откроется страница с текстом вида
headscale nodes register --user … --key mkey:…. - Прислать этот текст целиком Анатолию или Олегу в Telegram. Администратор выполнит регистрацию, через несколько секунд в приложении появится статус Connected и адрес
100.64.0.x.
Для серверов удобнее второй путь: администратор выдаёт pre-auth key, и сервер подключается сам (команды с --authkey ниже).
iPhone, iPad
- Tailscale → Settings → прокрутить вниз, несколько раз нажать на номер версии → «Use an alternate coordination server».
- Вписать
https://hs.212-2-234-164.sslip.io→ Log in. - Скопировать команду со страницы и отправить администратору.
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 <имя-машины>
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.ru→192.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.