SSD Nodes Learn 🎉 VPS от $4.99/мес
Руководства Matt ConnorАвтор: Matt Connor · Обновлено 2026-08-07

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

Настройте свой VPS в качестве exit node для перенаправления трафика. В руководстве описаны установка, включение IP forwarding, настройка NAT и активация узла в консоли.

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

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

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

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

Приведенные ниже шаги предполагают, что Tailscale уже установлен на вашем ноутбуке и обе машины авторизованы в одной и той же tailnet. Tailnet — это ваша частная сеть Tailscale, в которой каждое устройство получает стабильный адрес внутри 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, будет одобрено автоматически, если в том же файле политик под секцией tagOwners определен тег tag:exit. Присвоение тега меняет владельца: устройство с тегом принадлежит 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-резолвера (системы доменных имен) для всех доменов. Это переопределяет глобальные и раздельные 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 через exit node

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

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

Ошибка запроса означает, что у VPS отсутствует IPv6-апстрим. Сайты с поддержкой dual stack обычно всё равно загружаются, так как клиент отказывается от IPv6 и повторяет запрос через IPv4, хотя это ожидание добавляет задержку при первом подключении к каждому сайту. Ресурсы, доступные только по IPv6, останутся недоступными.

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

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

Exit node передает весь интернет-трафик. Маршрут подсети передает один частный диапазон адресов, находящийся за машиной, которая его анонсирует. Это отдельные функции с отдельными разрешениями, и одна машина может выполнять обе задачи.

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

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

Тщательно выбирайте диапазон. Анонсированный маршрут является более специфичным, чем маршрут по умолчанию на вашем ноутбуке, поэтому анонсирование 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.

После перезагрузки настройка сбрасывается. Если в системе используется 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 node), покидает сеть с публичным IP-адресом вашего VPS, поэтому он привязывается к вашей учетной записи. Жалобы на злоупотребления (abuse reports) будут приходить на ваш почтовый ящик: уведомления о нарушении авторских прав, жалобы на сканирование портов. Ознакомьтесь с AUP (политикой допустимого использования) вашего провайдера, прежде чем направлять трафик всей семьи или команды через один сервер, и не открывайте выходной узел для людей, за которых вы не можете поручиться.

Пропускная способность учитывается дважды. Трафик поступает на VPS через туннель, а затем уходит в интернет, и оба направления обычно учитываются в лимите передачи данных по вашему тарифному плану. Видеопоток, просмотренный через выходной узел, потребляет больше трафика, чем ожидает большинство пользователей.

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

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

Exit node анонсирован, но не одобрен. 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, и координационный сервер его не переносит. Однако он определяет, кто может присоединиться к tailnet и к каким ресурсам имеет доступ каждое устройство. Если вы хотите устранить эту зависимость, запустите Headscale в качестве собственного сервера управления Tailscale и укажите его в настройках обоих клиентов. После этого шаги по настройке exit node останутся прежними, но подтверждение маршрутов будет выполняться через командную строку Headscale, а не через веб-консоль.

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 видит тот же самый трафик, привязанный к вашей учетной записи.