Как попасть в домашнюю сеть из любой точки мира, не открывая порты на роутере
Человек в другом городе, а нужный файл остался на домашнем NAS. Камера во дворе, возможно, показывает что-то интересное, но посмотреть её можно только из дома. Первое, что приходит в голову, это зайти в настройки роутера и пробросить порт. Вот тут и начинаются сложности: у кого-то в роутере нет такой возможности, у кого-то нет «белого» IP-адреса, а у остальных сервис оказывается открыт всему интернету. Есть способ, при котором на роутере не открывается ни один порт, а соединение всё равно собирается. Разберемся как все устроено и в каких сетях может быть сбой. Отдельно посмотрим, почему сбой не всегда означает ошибку в настройке.
Как это вообще возможно
Tailscale строит частную сеть из собственных устройств («tailnet») на шифрованных туннелях. Устройства связываются напрямую, а не через центральный сервер. Чтобы пробиться сквозь NAT и межсетевые экраны, Tailscale применяет STUN, приёмы в духе ICE и пробивку UDP (hole punching): координирующая часть сервиса заставляет оба устройства отправить пакеты навстречу друг другу почти одновременно, и каждый NAT пропускает ответный трафик.
Любое соединение сначала идёт через ретранслятор DERP, а потом, если пробивка удалась, переходит на прямой UDP-путь. По данным самой компании, подавляющее большинство трафика идёт напрямую, а доля успешных прямых соединений в типичных условиях, по её внутренним метрикам, «заметно выше 90%». Это цифры вендора, а не независимого замера, так что их стоит воспринимать как ориентир.
Для задачи важно другое: все три типа соединения (прямое, через DERP и через собственный ретранслятор) шифруются сквозным образом. Разница между ними в скорости, а не в безопасности.
Что понадобится
- Аккаунт Tailscale. На странице тарифов бесплатный план Personal указан как «$0 до 6 пользователей» с неограниченным числом устройств, только для некоммерческого использования. Тарифы меняются, поэтому перед стартом их стоит проверить на сайте.
- Один постоянно включённый компьютер дома, который станет «маршрутизатором подсети» (subnet router). Подойдёт мини-ПК, Raspberry Pi или любая Linux-машина. Инструкция ниже написана для Linux.
- Клиент Tailscale на устройстве, с которого выполняется вход: ноутбук, телефон.
Зачем нужен этот маршрутизатор. На принтер и IP-камеру клиент Tailscale поставить не получится, а на NAS получится не всегда. Маршрутизатор подсети решает проблему: это устройство из tailnet, которое объявляет маршруты к домашней сети и передаёт туда трафик. Так открывается доступ ко всем устройствам этой сети, даже если на них ничего не установлено.
Настройка маршрутизатора подсети (Linux)
Ниже шаги из официальной документации Tailscale. Адрес подсети 192.168.1.0/24 взят для примера: подставляется своя (узнать её можно в настройках роутера или командой ip a).
- Установить Tailscale и войти. Команда установки есть на странице скачивания Tailscale для нужного дистрибутива.
- После установки выполняется sudo tailscale up, и открывается ссылка авторизации, которую выводит команда. Включить пересылку IP-пакетов.
Документация предлагает такие команды: echo 'net.ipv4.ip_forward = 1' | sudo tee -a
/etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a
/etc/sysctl.d/99-tailscale.conf
sudo sysctl -p
/etc/sysctl.d/99-tailscale.conf
Если каталога /etc/sysctl.d нет, те же строки добавляются в /etc/sysctl.conf. Если работает firewalld, из-за известной проблемы может понадобиться ещё команда firewall-cmd --permanent --add-masquerade.
- Объявить маршруты. Выполнить sudo tailscale set --advertise-routes=192.168.1.0/24. Если подсетей несколько, они перечисляются через запятую.
- Одобрить маршруты в консоли. В административной консоли Tailscale на странице Machines найти это устройство, раздел Subnets, и отметить нужные маршруты. Этот шаг можно пропустить при настроенном автоодобрении (autoApprovers).
- Проверить правила доступа. Одобрение маршрута и разрешение на трафик это разные вещи. Документация отдельно предупреждает, что в политике доступа должно быть правило, которое разрешает трафик в эту подсеть.
- Отключить истечение ключа на маршрутизаторе. Иначе потребуется периодически входить заново. Это важно: когда ключ маршрутизатора истекает, его маршруты остаются настроенными, но становятся недоступными. Выясняется это обычно вдали от дома.
- Подключить клиент. На Android, iOS, macOS, tvOS и Windows новые маршруты подхватываются автоматически. Linux-клиентам нужна команда sudo tailscale set --accept-routes.
NAS, принтер и камера
Когда маршрутизатор работает и клиент на ноутбуке или телефоне подключён, домашние устройства доступны по тем же локальным адресам, что и дома. Дальше всё как обычно:
- NAS. Веб-интерфейс открывается по локальному адресу, например http://192.168.1.20, а сетевая папка подключается по этому же адресу.
- Принтер. Добавляется по IP-адресу, как и дома. Работает ли автоматический поиск принтеров через маршрутизатор подсети, в документации не сказано, поэтому принтер лучше добавлять по адресу и проверить заранее.
- Собственная IP-камера. Если камера отдаёт поток по адресу в этой подсети, видеоприложение или плеер подключается к нему по этому адресу.
Каждое устройство стоит проверить до отъезда: лучше потратить пять минут дома, чем обнаружить в поездке, что принтер не находится. Документация Tailscale добавляет честную оговорку: установка клиента на каждое устройство предпочтительна с точки зрения безопасности, производительности и простоты настройки. Если на NAS клиент Tailscale ставится, его лучше поставить прямо туда.
Как убедиться, что всё работает
Вне домашней сети (например, на мобильном интернете) на клиенте выполняются две команды:
- tailscale status: показывает, как соединён каждый узел: «direct», «relay» (через DERP) или «peer-relay».
- tailscale ping имя-устройства: в ответе «via DERP(…)» означает ретранслятор, адрес с портом означает прямое соединение. Если в конце написано «direct connection not established», прямой путь не найден.
Первые пакеты ping часто идут через DERP: так и задумано, соединение начинается с ретранслятора и затем переключается. Стоит подождать несколько секунд и повторить.
CGNAT — когда «белого» IP нет
CGNAT (carrier-grade NAT) это NAT на стороне оператора: много абонентов делят один публичный адрес. Так устроены многие мобильные сети и часть домашних провайдеров. Обычное решение «пробросить порт на роутере» тут не работает по очевидной причине: пробрасывать не на что, публичный адрес принадлежит не абоненту.
Как понять, что подключение за CGNAT? Нужно сравнить адрес, который роутер показывает как внешний (WAN), с тем, что выдаёт любой сайт «мой IP». Если они разные или WAN-адрес попадает в диапазон 100.64.0.0/10, это почти наверняка CGNAT. Диапазон 100.64.0.0/10 выделен под нужды операторов, это общеизвестный факт. Описанная методика проверки принадлежит автору, это не цитата из документации Tailscale.
Теперь хорошая новость. Tailscale устроен так, что устройства сами выходят в сеть, поэтому домашний роутер за CGNAT не мешает работе tailnet. Для такого соединения белый адрес не нужен.
И плохая. По разбору инженеров Tailscale, CGNAT обычно строг: короткие тайм-ауты для портов и симметричное отображение (symmetric, или «hard» NAT, когда на каждое новое назначение выдаётся другой внешний порт). Два устройства, оба за hard NAT, почти всегда соединяются через ретранслятор. В той же статье приводится пример: два телефона в разных мобильных сетях часто идут через DERP. Документация по типам соединений говорит то же другими словами: если оба устройства за hard NAT, прямое соединение затруднено или невозможно.
На практике это значит: если дом за CGNAT, а подключение идёт из мобильной сети, соединение, скорее всего, пройдёт через DERP. Оно работает, но, как пишет документация, ретрансляторы DERP имеют ограниченное качество обслуживания, в целом медленнее, а максимальная скорость может быть ниже. Для открытия файла или просмотра камеры этого хватит, а перекачивать много гигабайт через DERP будет мучительно.
Что можно улучшить:
• Поставить собственный ретранслятор (peer relay) на устройство с хорошей связью. Он появился в октябре 2025 года, трафик через него шифруется так же, а в одном анекдотическом тесте автора блога Tailscale (Дели — Миннесота) скорость выросла с 2,2 до 27,5 Мбит/с. Это единичный случай, а не бенчмарк. Для работы такому узлу нужны проброшенный UDP-порт и разрешающее правило в политике доступа, то есть он должен быть доступен обоим устройствам. Если дом за CGNAT, то место для него, судя по этим требованиям, вне дома, например арендованный сервер (это вывод автора, а не рекомендация документации).
- Проверить IPv6: если у обоих устройств есть нативный IPv6, Tailscale предпочитает его, а значит NAT в соединении не участвует.
- Диагностика типа NAT: команда tailscale netcheck. Признак симметричного NAT в её выводе: MappingVariesByDestIP: true.
Отдельная путаница: Tailscale тоже назначает устройствам адреса из диапазона 100.64.0.0/10, того же, что используется для CGNAT. В документации выбор объясняется тем, что такие адреса не пересекаются с обычными частными сетями. Но там же предупреждают: конфликты возможны при одновременной работе с другими решениями удалённого доступа, которые используют то же адресное пространство.
Ограничения соединений в разных сетях
Из документации Tailscale: прямое соединение требует исходящего и обратного UDP-трафика. Поэтому прямой путь не получится, если:
- в сети заблокирован UDP;
- оба устройства за hard NAT;
- облачные NAT-шлюзы ведут себя как hard NAT;
- сеть меняется на ходу, и прямой путь деградирует до ретранслятора.
Трафик через DERP идёт по HTTPS (TCP 443), поэтому он проходит и там, где UDP закрыт, но с большей задержкой. Если соединение вдруг стало медленным, стоит посмотреть, не идёт ли оно через ретранслятор: документация называет это одной из самых частых причин проблем с производительностью. Проверять это нужно командами выше раньше, чем менять что-то ещё.
Что можно сделать дома. Документация советует включить на роутере NAT-PMP или UPnP, чтобы порты были предсказуемыми, и при необходимости открыть UDP 41641 для устройства. Здесь важно помнить, что цель этой статьи как раз в том, чтобы ничего не открывать, и для работы Tailscale это не обязательно: это только способ повысить шансы на прямое соединение. UPnP автоматически открывает порты по запросам программ в домашней сети, и это отдельный риск (комментарий автора, не из документации).
Доступность сервиса зависит от сети и провайдера
Сторонние сервисы работают по-разному в разных сетях, и универсального ответа здесь нет. Многие мобильные операторы и крупные провайдеры используют CGNAT, а в части сетей ограничен UDP. Поэтому перед отъездом схему стоит проверить в условиях, близких к будущим: подключить ноутбук или телефон к мобильному интернету и выполнить tailscale netcheck, tailscale status и tailscale ping. Эти команды покажут, доступны ли UDP и ближайший DERP и идёт ли соединение напрямую.
Безопасность — что стоит помнить
- Маршрутизатор подсети уважает политики доступа Tailscale. Доступ к подсети стоит давать только тем пользователям и устройствам, которым он действительно нужен.
- Шифрование Tailscale действует между узлами tailnet. Устройства за маршрутизатором клиента не запускают, и документация подводит к выводу, что участок между маршрутизатором и ними Tailscale не защищает (прямо это не сформулировано). Дома этот участок идёт по локальной сети.
- Камеру и NAS нужно обновлять и защищать паролями, как и раньше: доступ к подсети даёт доступ ко всем её устройствам, а не только к тем, ради которых всё затевалось.
- Бесплатный план Personal только для некоммерческого использования.
- Устройства за маршрутизатором не считаются в лимит устройств по плану.
Короткий чек-лист
- Домашняя подсеть известна, например 192.168.1.0/24.
- На домашнем Linux-компьютере включена пересылка IP, объявлены и одобрены маршруты.
- Истечение ключа маршрутизатора отключено.
- В политике есть правило доступа к подсети.
- Проверено извне: NAS, принтер и камера открываются по своим IP.
- tailscale status показывает, direct или relay. При relay скорость будет ниже, и это нормально для CGNAT.
Источник: playground.com





6 комментариев
Добавить комментарий
Добавить комментарий