Часть 06. Tailscale — VPN-мост до домашнего сервера
Часть 06. Tailscale — VPN-мост до домашнего сервера
«Есть места, куда можно попасть только по секретному ходу. В нашем случае секретный ход — это WireGuard, а ключ от него выдаёт Tailscale. Построим туннель между Хельсинки и домом.» — Воланд
Глава 1. Что такое Tailscale и зачем он нужен
Tailscale — это mesh VPN на основе протокола WireGuard. В переводе на человеческий: программа, которая соединяет ваши устройства в единую частную сеть, будто они стоят рядом и подключены к одному роутеру.
Как это работает:
- WireGuard — современный VPN-протокол, встроенный прямо в ядро Linux. Не нагружает процессор, не требует сложной конфигурации.
- Mesh-архитектура — каждое устройство соединяется с каждым напрямую (peer-to-peer). Нет центрального сервера, который решает, кому куда идти.
- CGNAT-адреса — каждое устройство получает IP из диапазона
100.x.x.x. Этот диапазон зарезервирован для операторов связи (Carrier-Grade NAT), но Tailscale использует его для своей сети.
Зачем нам это на VDS:
| Задача | Без Tailscale | С Tailscale |
|---|---|---|
| Резервное копирование блога на домашний сервер | Нужен публичный IP дома или DynDNS + открытые порты | scp по 100.х.х.х — никаких открытых портов |
| Доступ к домашним сервисам с VDS | Только если настроен VPN-сервер дома | Просто ping 100.х.х.х |
| Мониторинг домашнего сервера с VDS | Сложно, нужен туннель | SSH по Tailscale — как локальный |
Бегемот, разворачивая чертёж:
«Представьте: два дома. Один — в Хельсинки на облаке, другой — ваш, родной, где-то в Подмосковье. Между ними — интернет, файерволы провайдеров, NAT, угрозы. Tailscale прорывает туннель — прямо из гостиной в серверную. Соседи по этажу ничего не заметят.»
Глава 2. Установка Tailscale на VDS (srv02-Helsinki)
Начнём с удалённого сервера. Tailscale устанавливается через официальный скрипт установки:
curl -fsSL https://tailscale.com/install.sh | sudo sh
Разберём эту команду по частям:
curl— утилита для скачивания данных из интернета-f(fail) — не скачивать мусор при HTTP-ошибке (404, 500 и т.д.)-s(silent) — не показывать прогресс-бар-S(show errors) — показывать ошибки, если они есть (без этого-sвсё скрывает)-L(location) — следовать за редиректами (если URL перенаправляет)https://tailscale.com/install.sh— официальный установочный скрипт|— символ пайпа (конвейера): выводcurlпередаётся дальшеsudo sh— запустить полученный скрипт от имени root
Tailscale распознаёт операционную систему (Ubuntu 24.04 LTS), добавляет официальный APT-репозиторий и устанавливает пакет.
Ожидаемый вывод:
# Installing Tailscale ...
# Installing ...
Tailscale is installed.
...
tailscale-1.98.9-amd64.deb installed
После установки проверяем версию:
tailscale version
Ожидаемый вывод:
1.98.9
tailscale commit: 4fb758c39ae5b208b974af14ba6bc896a250394c
long version: 1.98.9-t4fb758c39-g200941d74
other commit: 200941d74860e4e5843de3d7d22ef7191fcac6ef
go version: go1.26.5
Установка завершена. Tailscale пока не активен — только установлен.
Коровьев, протирая монокль:
«Ключ вставлен в замок, но пока не повёрнут. Установить Tailscale — всё равно что положить лопату рядом с ямой. Копать будем в следующей главе.»
Глава 3. Подключение VDS к Tailscale-сети
Tailscale — это не просто программа, а облачная служба. Чтобы сервер попал в вашу частную сеть, его нужно авторизовать — «представить» хозяину.
Для авторизации используется одноразовый ключ (auth key), который генерируется в веб-консоли. Либо, если запустить без ключа, Tailscale покажет ссылку — откроете в браузере и авторизуетесь вручную.
Вариант A — с ключом (удобно для сервера):
sudo tailscale up --auth-key tskey-auth-xxxxxxxxx
Где tskey-auth-xxxxxxxxx — ключ, созданный на странице https://login.tailscale.com/admin/settings/keys.
Вариант B — интерактивная авторизация (подходит, если есть доступ к браузеру):
sudo tailscale up
Ожидаемый вывод:
To authenticate, visit:
https://login.tailscale.com/a/XXXXXXXXX
Открываете ссылку в браузере на своём компьютере, входите в аккаунт Tailscale (через Google, GitHub или другого провайдера), подтверждаете подключение сервера.
После успешной авторизации терминал покажет:
Success.
Теперь сервер в вашей Tailscale-сети. Проверяем его IP:
tailscale ip -4
Ожидаемый вывод:
100.XX.XX.XX
Этот адрес закреплён за сервером навсегда (пока вы не удалите устройство из консоли). Можно пинговать, слать файлы, подключаться по SSH.
Важно: tailscale up автоматически создаёт systemd-сервис, который запускает Tailscale при старте системы. Ничего дополнительно включать не нужно.
Проверим статус:
sudo systemctl status tailscaled --no-pager | head -10
Ожидаемый вывод:
● tailscaled.service - Tailscale Daemon
Loaded: loaded (/lib/systemd/system/tailscaled.service; enabled; preset: enabled)
Active: active (running) since ...
Строка enabled и active (running) — Tailscale будет запускаться автоматически.
Воланд, затягиваясь папиросой:
«Сервер представился, ключ принят, дверь открыта. Отныне у этого дома есть второй адрес — незаметный, но постоянный. Как тайная квартира в неприметном переулке.»
Глава 4. Настройка домашнего сервера (myserver)
Если домашний сервер уже в Tailscale — эту главу можно пропустить. Если нет — повторяем те же шаги, что и для VDS.
Подключаемся к домашнему серверу по SSH и устанавливаем Tailscale:
curl -fsSL https://tailscale.com/install.sh | sudo sh
Ожидаемый вывод:
tailscale-1.98.9-amd64.deb installed
Подключаемся к той же Tailscale-сети (аккаунт должен быть тот же):
sudo tailscale up
Авторизуемся по ссылке в браузере.
Проверяем IP домашнего сервера:
tailscale ip -4
Ожидаемый вывод:
100.XX.XX.XX
Записываем этот адрес. Он понадобится для резервного копирования и доступа к домашним сервисам.
Если домашний сервер уже был в Tailscale — просто проверяем статус:
tailscale status
Ожидаемый вывод:
100.92.60.38 srv02-helsinki user@ linux -
100.113.180.60 myserver user@ linux idle, tx 2244 rx 11996
Оба сервера видят друг друга — соединение установлено. Столбец idle означает, что серверы на связи, но активного трафика нет.
Бегемот, усаживаясь поудобнее:
«Два дома — два ключа. Туннель прорыт с обеих сторон. Теперь из Хельсинки можно крикнуть через подземный ход: «Эй, myserver, ты меня слышишь?» — и услышать ответ.»
Глава 5. Что скрывается за tailscale up — детальный разбор
Команда sudo tailscale up делает гораздо больше, чем кажется на первый взгляд. Разберём пошагово:
-
Создание WireGuard-ключей. Tailscale генерирует пару ключей (приватный и публичный) для протокола WireGuard. Приватный ключ никогда не покидает сервер — хранится в
/var/lib/tailscale/. -
Регистрация в координаторе. Сервер отправляет публичный ключ на серверы Tailscale (координатор). Координатор проверяет, авторизовано ли устройство (одноразовый ключ или ручное подтверждение), и записывает его в вашу сеть.
-
Получение IP и маршрутов. Tailscale назначает серверу IP из диапазона
100.x.x.xи сообщает, какие ещё устройства есть в сети, с их публичными ключами. -
Создание интерфейса
tailscale0. В системе появляется новый сетевой интерфейс. Проверить можно командой:
ip addr show tailscale0
Ожидаемый вывод:
3: tailscale0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc fq_codel state UNKNOWN group default qlen 500
link/none
inet 100.XX.XX.XX/32 scope global tailscale0
valid_lft forever preferred_lft forever
-
Установка peer-to-peer соединений. Tailscale находит другие устройства в сети через координатор, но трафик между ними идёт напрямую, минуя серверы Tailscale (за исключением случаев, когда прямое соединение невозможно — тогда трафик идёт через релейные серверы Tailscale, это называется DERP).
-
Шифрование. Весь трафик между устройствами шифруется WireGuard. Ключи шифрования ротируются каждые несколько часов.
Проверка прямого соединения с домашним сервером:
tailscale ping 100.113.180.60
Ожидаемый вывод:
pong from myserver (100.113.180.60) via DERP(somecity) in 45ms
pong from myserver (100.113.180.60) via DERP(somecity) in 42ms
pong from myserver (100.113.180.60) via DERP(somecity) in 44ms
Если в выводе via DERP — соединение идёт через релейный сервер (это нормально для первого раза). Если via <IP>: — прямое peer-to-peer.
Коровьев, накручивая ус:
«Координатор — как справочная служба. «Где живёт гражданин Myserver?» — «По адресу 100.113.180.60, подъезд WireGuard, квартира tailscale0.» А дальше вы уже сами — рукопожатие, ключи, шифрование. Никто не подслушает.»
Глава 6. Проверка связности: VDS → домашний сервер
Теперь убедимся, что туннель работает и серверы общаются.
С VDS (srv02-Helsinki) запускаем ping до домашнего сервера:
ping -c 4 100.113.180.60
Разберём флаги:
ping— утилита для проверки сетевой доступности-c 4(count) — отправить 4 пакета и остановиться
Ожидаемый вывод:
PING 100.113.180.60 (100.113.180.60) 56(84) bytes of data.
64 bytes from 100.113.180.60: icmp_seq=1 ttl=64 time=12.3 ms
64 bytes from 100.113.180.60: icmp_seq=2 ttl=64 time=11.8 ms
64 bytes from 100.113.180.60: icmp_seq=3 ttl=64 time=12.1 ms
64 bytes from 100.113.180.60: icmp_seq=4 ttl=64 time=12.0 ms
--- 100.113.180.60 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 11.8/12.05/12.3/0.19 ms
Цифры:
time=12.3 ms— время прохождения пакета туда и обратно. 12 миллисекунд между Хельсинки и домом — отлично.0% packet loss— ни один пакет не потерян. Туннель стабилен.ttl=64— Time To Live: пакет прошёл ровно один маршрутизатор (сам сервер).
Копирование файла через Tailscale (проверка, что TCP тоже работает): создадим тестовый файл и скопируем его на домашний сервер:
echo "Привет из Хельсинки!" > /tmp/test.txt
scp /tmp/test.txt user01@100.113.180.60:/tmp/
Ожидаемый вывод:
test.txt 100% 28 0.1KB/s 00:00
Tailscale никак не ограничивает скорость — она зависит только от каналов интернета с обеих сторон.
Воланд, разглядывая пинг:
«Двенадцать миллисекунд. Пакет летит из Хельсинки в Подмосковье быстрее, чем официант несёт кофе. Никаких открытых портов, никаких публичных IP — просто два шепота в туннеле.»
Глава 7. Tailscale SSH (опционально, на сервере не включено)
Tailscale предлагает собственную замену OpenSSH. Вместо того чтобы полагаться на SSH-ключи или пароли, Tailscale SSH использует аутентификацию самого Tailscale: кто прошёл авторизацию в вашей Tailscale-сети — тот может подключиться по SSH, предъявив свой профиль.
На данном сервере эта функция не включена — используется стандартный OpenSSH (настроенный в части 02). Но если захотите попробовать, вот как это делается.
Включение на сервере:
sudo tailscale up --ssh
Ожидаемый вывод:
Success.
Теперь с любого устройства в вашей Tailscale-сети можно подключиться к серверу без ключей и паролей:
ssh user01@100.XX.XX.XX
Tailscale сам проверит, что вы — это вы. Если захотите отключить:
sudo tailscale up --ssh=false
Бегемот, примеряя шляпу-невидимку:
«Tailscale SSH — это пропуск без билетёра. Никаких ключей, никаких паролей. Хозяин сети — он и есть пропуск. Но наш дом пока использует старый добрый замок (OpenSSH). Если захотите — смените на кодовый замок Tailscale.»
Глава 8. Tailscale и UFW — как они дружат
Tailscale использует виртуальный сетевой интерфейс tailscale0. Трафик внутри Tailscale-сети не проходит через обычные сетевые правила UFW, потому что:
- Пакет приходит на физический интерфейс (eth0) — он зашифрован WireGuard
- Демон
tailscaledрасшифровывает его и передаёт на виртуальный интерфейсtailscale0 - Приложение получает пакет уже с Tailscale-адреса
UFW видит только то, что приходит на eth0, — зашифрованный трафик на порт UDP 41641 (порт Tailscale). Если порт 41641 вдруг закроется — Tailscale перестанет работать.
Проверяем, что UFW не блокирует порт Tailscale:
sudo ufw status | grep 41641
Ожидаемый вывод: пусто (порт не указан, значит не заблокирован).
Но на всякий случай можно разрешить Tailscale-подсеть явно (это не повредит):
sudo ufw allow from 100.64.0.0/10
Ожидаемый вывод:
Rule added
Подсеть 100.64.0.0/10 — это весь диапазон CGNAT, который использует Tailscale. Если какой-то внутренний трафик всё же пойдёт через UFW — он будет пропущен.
Коровьев, разводя руками:
«Tailscale — как призрак. Сквозь стены (UFW) проходит, не задевая их. Но лучше не испытывать судьбу — открыть для него калитку.»
Финал части: Резюме Воланда
| Параметр | Статус |
|---|---|
| Tailscale установлен на VDS | ✅ |
| VDS подключён к Tailscale-сети | ✅ |
| Tailscale IP получен | ✅ |
| Tailscale установлен на домашнем сервере | ✅ |
| Домашний сервер подключён к Tailscale-сети | ✅ |
| Прямая связь между VDS и домашним сервером | ✅ |
| Ping ~12 мс, 0% потерь | ✅ |
| Копирование файлов через Tailscale (SCP) | ✅ |
| Tailscale в автозагрузке (systemd) | ✅ |
| Tailscale SSH (опционально) | ⬜ |
Воланд подводит итог шестой части:
«Туннель прорыт от Хельсинки до самого дома. Два сервера стали соседями по лестничной клетке CGNAT. Пакеты летят за 12 миллисекунд, файлы копируются без паролей, а внешний мир даже не догадывается о существовании этого прохода. Пора ставить веб-сервер — публичное лицо нашего предприятия.»
Комментарии
Комментарии пока не подключены.