SSD Nodes Learn Hosting plans →
Руководства Matt ConnorАвтор: Matt Connor

Как настроить VPS как exit node в Tailscale

Пошаговое руководство по превращению VPS в exit node для Tailscale. Вы узнаете, как включить IP forwarding, настроить advertise-exit-node и избежать проблем с DNS и IPv6.

Что делает exit node в Tailscale

Exit node в Tailscale — это устройство в вашей tailnet, которое перенаправляет весь интернет-трафик других ваших устройств. VPS (виртуальный выделенный сервер) отлично подходит для этой роли, так как имеет постоянный публичный IP-адрес и работает непрерывно. Настройка состоит из пяти шагов: установка Tailscale на сервер, анонсирование exit node, включение IP forwarding, одобрение маршрута в панели управления и выбор узла на вашем ноутбуке. Четвертый шаг выполняется переключателем в веб-интерфейсе, а не командой, и именно на нем чаще всего возникают задержки.

После включения ноутбук шифрует каждый пакет и отправляет его на VPS. VPS применяет source NAT (трансляцию сетевых адресов) и передаёт пакет дальше со своего публичного IP-адреса. Веб-сайты видят VPS. Wi-Fi в кафе видит один зашифрованный UDP-поток к VPS и больше ничего. Без exit node Tailscale передаёт трафик только между вашими устройствами, а веб-сайты по-прежнему видят ваш реальный адрес. Именно это определяет, можно ли вообще считать Tailscale VPN.

Tailscale использует WireGuard для передачи данных, а также координационный сервер, который распределяет ключи и помогает устройствам находить друг друга через NAT. Благодаря этому серверу не требуется ручное копирование ключей. Чтобы ознакомиться с подробным сравнением, прочитайте сравнение Tailscale и обычного WireGuard. Если вы предпочитаете полностью контролировать все компоненты туннеля, разверните обычный VPN на базе WireGuard на своем VPS самостоятельно.

Приведенные ниже шаги предполагают, что Tailscale уже установлен на вашем ноутбуке и оба устройства авторизованы в одной и той же tailnet. Tailnet — это ваша частная сеть Tailscale, и если администратор не отключил в ней IPv4, каждое устройство получает стабильный адрес внутри 100.64.0.0/10.

Установка Tailscale на ваш VPS

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up

Скрипт установки выбирает репозиторий пакетов для вашего дистрибутива и устанавливает демон tailscaled. Затем tailscale up выводит URL для аутентификации. Откройте его в браузере и войдите под той же учетной записью, которую использует ваш ноутбук, так как VPS, подключенный к другой tailnet, не сможет обслуживать ваш ноутбук.

tailscale status
tailscale ip -4

tailscale status теперь должен отображать обе машины. tailscale ip -4 выводит адрес VPS в tailnet, который вы позже передадите клиенту.

Для создания туннеля Tailscale требуется устройство TUN. На VPS с виртуализацией KVM это устройство присутствует. На тарифах с контейнерной виртуализацией, использующих общее ядро хоста, /dev/net/tun иногда отсутствует, и tailscaled не может создать интерфейс tailscale0. Запустите ls -l /dev/net/tun, прежде чем продолжать.

Включите IP forwarding, иначе VPS будет отбрасывать все пакеты

Машина на базе Linux отбрасывает любой пакет, который не адресован ей самой, поскольку значение net.ipv4.ip_forward по умолчанию равно 0. Выходной узел (exit node) примет ваш трафик, расшифрует его, а затем отбросит. Запишите этот параметр в файл, чтобы он сохранялся после перезагрузки.

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

tee -a добавляет данные в конец файла, поэтому повторный запуск этих строк запишет оба параметра дважды. Результат по-прежнему будет работать, но cat /etc/sysctl.d/99-tailscale.conf будет выглядеть странно. Проверяйте текущее значение вместо того, чтобы доверять файлу:

sysctl net.ipv4.ip_forward

Команда должна вывести net.ipv4.ip_forward = 1. Если вы пропустите этот шаг и воспользуетесь tailscale up --advertise-exit-node, клиент сообщит вам следующее:

Warning: IP forwarding is disabled, subnet routing/exit nodes will not work.

tailscale set --advertise-exit-node не выполняет эту проверку, поэтому отсутствие сообщений от set не является доказательством того, что пересылка включена. Проверяйте значение sysctl самостоятельно.

Вам не нужно вручную создавать правило маскарадинга (masquerade). tailscaled устанавливает собственные цепочки правил межсетевого экрана с именами ts-input, ts-forward и ts-postrouting, а правило NAT для трафика выходного узла находится в ts-postrouting. Просмотрите их с помощью sudo iptables-save | grep ts- или sudo nft list ruleset, если используется nftables.

Объявление VPS в качестве выходного узла

sudo tailscale set --advertise-exit-node

tailscale set изменяет одну настройку, не затрагивая остальные. tailscale up --advertise-exit-node также объявляет узел, но имеет побочный эффект: up воспринимает флаги в командной строке как полный набор нестандартных параметров, поэтому последующий вызов sudo tailscale up без аргументов завершается с ошибкой и выводит сообщение:

changing settings via 'tailscale up' requires mentioning all
non-default flags. To proceed, either re-run your command with --reset or
use the command below to explicitly mention the current value of
all non-default settings:

Используйте set для внесения постоянных изменений, чтобы избежать появления этого сообщения.

Объявление — это лишь предложение. Теперь VPS сообщает координационному серверу о готовности стать выходным узлом. Ни один клиент пока не может его использовать.

Активация exit node в консоли администратора Tailscale

Этот этап не требует выполнения команд. Откройте страницу Machines в консоли администратора, найдите ваш VPS, нажмите на меню из трех точек в конце строки, выберите Edit route settings и активируйте опцию Use as exit node.

Пока этот переключатель выключен, сервер управления удерживает предложение и не передает его другим узлам. Команда tailscale exit-node list на вашем ноутбуке ничего не покажет, а трафик продолжит идти по стандартному маршруту. Сообщения об ошибках на устройствах отсутствуют. Exit node просто не появляется в списке.

Вы можете автоматически одобрять exit node с помощью записи в файле политик tailnet:

"autoApprovers": {
  "exitNode": ["tag:exit"],
}

Устройство, запущенное с флагом --advertise-tags=tag:exit, будет одобрено автоматически, если тег tag:exit указан в разделе tagOwners того же файла политик. Использование тегов меняет владельца: устройство с тегом принадлежит tailnet, а не вашей учетной записи, что меняет применяемые к нему правила доступа. Для одного VPS использование переключателя в консоли — более простой вариант.

Выбор выходного узла на ноутбуке

На клиенте Linux:

tailscale exit-node list
sudo tailscale set --exit-node=vps.your-tailnet.ts.net

exit-node list выводит список одобренных выходных узлов в вашей tailnet с их адресами. Пустой список означает, что этап одобрения не был выполнен. В macOS, Windows, iOS и Android этот же выбор доступен в меню Exit Node в приложении Tailscale.

Проверьте настройки с клиента, а не с сервера:

curl -4 https://ifconfig.me

Выполните эту команду один раз до выбора выходного узла и один раз после. Адрес должен измениться с вашего локального на публичный IP-адрес VPS. Чтобы прекратить использование выходного узла:

sudo tailscale set --exit-node=

Еще один флаг важен при первом запуске. Когда выбран выходной узел, клиент направляет весь трафик в туннель, включая пакеты, адресованные в 192.168.1.50, из-за чего ваш принтер и сетевое хранилище перестают отвечать. Чтобы оставить локальную сеть в локальной маршрутизации:

sudo tailscale set --exit-node=<name> --exit-node-allow-lan-access=true

Почему при включении exit node меняются настройки DNS

По умолчанию устройство, использующее exit node, также применяет эту exit node в качестве DNS-резолвера для всех доменов. Это переопределяет глобальные и раздельные (split) DNS-серверы, настроенные для вашей tailnet. Такое поведение является намеренным. Если бы запросы продолжали отправляться локальному резолверу, роутер в кафе видел бы имена всех посещаемых вами сайтов, даже если сам трафик был бы зашифрован. Имена и пакеты должны выходить из одной точки.

Одно из следствий этого затрагивает пользователей внутренних резолверов: nameserver вашей tailnet, от которого вы зависите, перестает использоваться при включенной exit node. Чтобы вернуть его, включите опцию Use with exit node для этого nameserver на странице DNS в панели администратора.

Имена MagicDNS продолжают работать, так как клиент Tailscale отвечает на них локально через 100.100.100.100 до того, как запрос попадет на exit node. Проверьте это с помощью dig @100.100.100.100 your-vps.your-tailnet.ts.net или на клиенте с systemd-resolved через resolvectl status, где интерфейс Tailscale указывает 100.100.100.100 в качестве своего DNS-сервера.

Если вы отключите обработку DNS в Tailscale с помощью --accept-dns=false, клиент сохранит резолвер, полученный из локальной сети. Трафик будет передаваться через туннель, а запросы — нет, что приводит к той же утечке DNS, которая характерна для самодельных туннелей WireGuard. Не меняйте --accept-dns без особой необходимости.

IPv6 через выходной узел

Выходной узел анонсирует маршруты по умолчанию, 0.0.0.0/0 и ::/0. Если у VPS нет работающего IPv6-пути в интернет, IPv6-пакеты доходят по туннелю и на этом останавливаются. Протестируйте VPS, прежде чем доверять ему:

ip -6 addr show
curl -6 https://ifconfig.me

Запрос, который не может установить соединение, означает, что у VPS нет работающего IPv6-пути наружу. Если вместо этого curl сообщает "Could not resolve host", проблема заключается в разрешении имен, а не в IPv6, поэтому исправьте DNS на VPS и запустите тест снова. Веб-сайты с поддержкой dual stack обычно всё равно загружаются, так как клиенты, реализующие алгоритм Happy Eyeballs (включая curl), параллельно начинают попытку подключения по IPv4, если IPv6-соединение не установилось после короткой задержки, и используют то, которое ответит первым. По умолчанию curl ждет 200 миллисекунд, поэтому ожидание добавляет задержку при установке новых соединений, а не ошибку. Ресурсы, доступные только по IPv6, останутся недоступными.

Вторая часть — это пересылка трафика. net.ipv4.ip_forward = 1 при значении net.ipv6.conf.all.forwarding, равном 0, обеспечивает работающий IPv4-путь и «черную дыру» для IPv6, что для пользователя выглядит как «некоторые сайты работают медленно», а не как ошибка, которую можно диагностировать. Обе строки должны присутствовать в файле sysctl.

Нужно ли VPS также анонсировать маршруты подсетей?

Exit node передает весь интернет-трафик. Маршрут подсети передает один частный диапазон, который находится за машиной, анонсирующей этот маршрут. Это отдельные функции с отдельными разрешениями, и одна машина может выполнять обе. Ни одна из них не открывает доступ к сервису, запущенному на самой VPS, поэтому, если вам на самом деле нужен HTTPS URL для приложения на этом сервере, используйте функции serve и funnel.

sudo tailscale set --advertise-routes=10.0.0.0/24

Анонсируйте подсеть, когда VPS находится в одной частной сети с другими серверами, к которым вы хотите обращаться по их частным адресам. Одобрите это в той же панели Edit route settings, используя отдельный переключатель. Клиенты на Linux будут игнорировать анонсированный маршрут, пока вы не выполните --accept-routes; это одно из различий, которые полностью описаны в руководстве по настройке маршрутизатора подсети.

Тщательно выбирайте диапазон. Как только маршрут одобрен, ноутбук, который его принимает (Windows, macOS, iOS и Android делают это по умолчанию, Linux — после --accept-routes), может направлять трафик для этого диапазона в туннель. Одобрите 192.168.1.0/24 с VPS, и ноутбук в домашней сети, использующий тот же диапазон, может потерять доступ к этим адресам через туннель, а устройства на вашем столе перестанут отвечать. Используйте диапазон, который выбрали вы, а не тот, который выбрал для вас домашний роутер.

Ускорение exit node с помощью UDP GRO forwarding

Tailscale версии 1.54 и выше на ядре Linux 6.2 и новее поддерживает технологию receive offload, которая повышает пропускную способность для пересылаемого трафика. GRO (generic receive offload) объединяет входящие пакеты до того, как ядро начнет обрабатывать их по отдельности. По состоянию на октябрь 2026 года это действие по-прежнему выполняется на exit node вручную.

sudo apt install -y ethtool
NETDEV=$(ip -o route get 8.8.8.8 | cut -f 5 -d " ")
sudo ethtool -K $NETDEV rx-udp-gro-forwarding on rx-gro-list off

ip -o route get 8.8.8.8 показывает интерфейс, через который осуществляется реальный выход в интернет, поэтому вам не придется выбирать между eth0, ens3 и enp1s0. Проверьте результат с помощью ethtool -k $NETDEV | grep udp-gro-forwarding, значение должно измениться на on. GRO помогает только в том случае, если канал связи исправен, поэтому если после настройки скорость exit node остается низкой, протестируйте сам канал так же, как вы делали бы это для обычного WireGuard туннеля, который работает медленнее, чем физический канал.

Настройка сбрасывается после перезагрузки. Если система использует networkd-dispatcher, автоматизируйте процесс:

printf '#!/bin/sh\n\nethtool -K %s rx-udp-gro-forwarding on rx-gro-list off \n' "$(ip -o route get 8.8.8.8 | cut -f 5 -d " ")" | sudo tee /etc/networkd-dispatcher/routable.d/50-tailscale
sudo chmod 755 /etc/networkd-dispatcher/routable.d/50-tailscale

Сначала убедитесь, что /etc/networkd-dispatcher/routable.d/ существует. Если файла нет, значит, в системе не используется networkd-dispatcher. В этом случае аналогичную задачу выполнит небольшой systemd-юнит, который будет запускать команду ethtool при загрузке.

Что политика допустимого использования (AUP) провайдера означает для exit-трафика

Каждый пакет, который клиент отправляет через exit node, выходит в сеть с публичным IP-адресом вашего VPS, поэтому ответственность за него несет ваш аккаунт. Жалобы на злоупотребления, такие как уведомления об авторских правах или сообщения о сканировании портов, будут приходить на ваш адрес. Ознакомьтесь с AUP (политикой допустимого использования) вашего провайдера, прежде чем направлять через сервер трафик всей семьи или команды, и не открывайте доступ к exit node людям, в которых вы не уверены.

Учитывается только исходящий трафик. Каждый байт, проходящий через exit node, пересекает VPS дважды: входит с одной стороны и выходит с другой. В большинстве тарифных планов VPS тарифицируется только исходящая часть. По состоянию на октябрь 2026 года SSD Nodes указывает лимиты для всех KVM-планов как исходящий трафик (от 4TB до 48TB в месяц), а документация Vultr гласит, что входящий трафик не тарифицируется. При скачивании файла тарифицируемым участком является путь от VPS через туннель к вашему ноутбуку. При загрузке файла — путь от VPS в интернет. В любом случае все, что вы пропускаете через exit node, расходует лимит один раз. Видеопоток, просмотренный через exit node, потребляет больше трафика, чем кажется на первый взгляд. Проверьте условия вашего тарифа, так как хостинг-провайдеры, учитывающие трафик в обоих направлениях, посчитают этот поток дважды.

Диапазоны IP-адресов дата-центров также имеют свою репутацию. Некоторые сайты чаще показывают пользователям таких сетей CAPTCHA, а некоторые стриминговые сервисы блокируют их полностью. Никакие изменения в конфигурации не исправят это, так как это свойство блока адресов, принадлежащего вашему провайдеру.

Почему трафик по-прежнему уходит через локальное соединение

Выходной узел анонсирован, но не одобрен. tailscale exit-node list на клиенте не выводит ничего, и ни на одной из машин нет записей об ошибках в логах. Перейдите на страницу Machines и включите опцию Use as exit node.

Клиент не выбрал узел. Одобрение делает узел доступным для tailnet. Выбор узла — это отдельное действие на каждом устройстве. Запустите sudo tailscale set --exit-node=<name> повторно, а затем снова проверьте curl -4 https://ifconfig.me.

Пересылка (forwarding) отключена. Симптом специфичен: tailscale ping <vps> выполняется успешно, туннель явно поднят, но все внешние адреса недоступны по таймауту. sysctl net.ipv4.ip_forward показывает 0. Исправьте файл sysctl, затем выполните sudo sysctl -p /etc/sysctl.d/99-tailscale.conf.

Межсетевой экран отбрасывает пересылаемые пакеты. tailscaled добавляет собственную цепочку ts-forward, и на чистом VPS этого достаточно. На сервере, где уже запущен ufw или Docker, политика FORWARD может быть установлена в DROP, а правила могут иметь приоритет выше, чем у Tailscale. Не пытайтесь угадать причину: запустите sudo iptables -L FORWARD -n -v в момент, когда клиент пытается загрузить страницу, и следите за тем, какие счетчики увеличиваются. На системе с ufw стандартным решением является DEFAULT_FORWARD_POLICY="ACCEPT" в файле /etc/default/ufw с последующим sudo ufw reload. Также проверьте сетевой экран в панели управления вашего провайдера, так как это отдельный уровень контроля, не зависящий от настроек внутри сервера.

Соединение работает, но медленно. Запустите tailscale netcheck на обеих машинах. Если утилита сообщает, что UDP заблокирован, устройства не могут установить прямой путь и переключаются на ретранслятор DERP, что увеличивает задержку для каждого соединения. Разрешение входящего UDP-трафика на порт 41641 для VPS в сетевом экране провайдера обычно восстанавливает прямое соединение.

Когда стоит отказаться от координационного сервера Tailscale

Все описанное выше зависит от размещенного Tailscale координационного сервера, который отвечает за обмен ключами и подтверждение прав доступа. Ваш трафик передается напрямую между ноутбуком и VPS или через ретрансляторы DERP от Tailscale, если прямое соединение установить невозможно. Координационный сервер не передает ваш трафик, но определяет, кто может присоединиться к tailnet и к каким ресурсам имеет доступ каждое устройство. Цена редко является причиной для перехода, так как бесплатный тарифный план включает шесть пользователей с неограниченным количеством собственных устройств, поэтому оценивайте саму зависимость, а не стоимость. Ситуация меняется при появлении седьмого пользователя. Поскольку Tailscale взимает плату за пользователя, а не за устройство, рассчитайте сколько на самом деле платят домохозяйство или команда из пяти человек, прежде чем принимать решение на основе затрат. Честная оценка рисков означает понимание того, к чему может получить доступ злоумышленник в случае компрометации координационного сервера или кражи учетной записи, что подробно описано в модели доверия Tailscale. Если вы хотите устранить эту зависимость, запустите Headscale в качестве собственного сервера управления Tailscale и укажите его в настройках обоих клиентов. После этого шаги по настройке exit node останутся прежними, а подтверждение маршрутов будет выполняться через командную строку Headscale вместо веб-консоли. Headscale заменяет плоскость управления, но позволяет использовать клиенты Tailscale. Если же вы предпочитаете полностью контролировать весь стек, NetBird предоставляет собственный координационный сервер и клиенты, которые вы размещаете на одном VPS.

FAQ

Почему мой трафик всё ещё использует локальное соединение после выбора exit node?

Есть две распространенные причины. Exit node была анонсирована, но не одобрена: откройте страницу Machines в панели администратора, найдите VPS, выберите Edit route settings и включите Use as exit node. Одобрение выполняется только через переключатель в консоли, никакая команда на сервере не выполняет это действие. Вторая причина выглядит иначе: IP forwarding выключен, поэтому туннель поднимается, tailscale ping до VPS работает, а все внешние адреса выдают таймаут. Проверьте состояние с помощью sysctl net.ipv4.ip_forward, значение должно быть 1.

Нужно ли каждый раз одобрять exit node вручную?

Этот переключатель настраивается один раз для каждой машины. Если вы часто пересоздаете VPS, добавьте блок autoApprovers в файл политики tailnet, содержащий "exitNode": ["tag:exit"], определите tag:exit в разделе tagOwners и запустите узел с помощью --advertise-tags=tag:exit. Устройство с тегом принадлежит tailnet, а не вашей учетной записи пользователя, поэтому правила доступа для него также меняются.

Какой DNS-сервер использует мой ноутбук, когда включена exit node?

Саму exit node. Устройство, использующее exit node, отправляет туда все DNS-запросы, что переопределяет глобальные и разделенные DNS-серверы, установленные для tailnet. Это предотвращает утечку имен, которые вы запрашиваете, в локальную сеть. Чтобы сохранить применение одного из DNS-серверов tailnet, включите опцию Use with exit node для него на странице DNS в панели администратора. Имена MagicDNS по-прежнему разрешаются, так как клиент Tailscale отвечает на них локально по адресу 100.100.100.100.

Может ли один VPS быть одновременно exit node и subnet router?

Да. sudo tailscale set --advertise-exit-node и sudo tailscale set --advertise-routes=10.0.0.0/24 независимы, и для каждой из них есть свой переключатель одобрения в разделе Edit route settings. Для обеих функций на VPS должен быть включен IP forwarding. Избегайте анонсирования диапазона, который совпадает с домашней сетью вашего ноутбука, так как после одобрения этого маршрута и его принятия ноутбуком, он может перехватить эти адреса у вашей локальной сети, и ваши локальные устройства станут недоступны.

Скрывает ли exit node мой трафик от провайдера VPS?

Нет. Туннель заканчивается на VPS, поэтому трафик покидает сервер в том виде, в котором его ожидает получатель, и ваш провайдер передает его в открытом виде везде, где сам сайт не зашифрован. Exit node переносит точку выхода вашего трафика в интернет с сети, в которой вы находитесь, на арендованный вами сервер. Это скрывает ваш просмотр сайтов от Wi-Fi в кафе и от вашего домашнего провайдера, но делает его видимым для провайдера вашего VPS с привязкой к имени вашей учетной записи.