Як налаштувати VPS як exit node у Tailscale
Перетворіть VPS на exit node у Tailscale: встановіть клієнт, увімкніть IP forwarding, схваліть маршрут у консолі та виправте DNS і IPv6.
Що робить exit node у Tailscale
Exit node у Tailscale — це машина у вашому tailnet, через яку проходить увесь інтернет-трафік інших пристроїв. VPS (virtual private server) добре підходить для цього, оскільки має фіксовану публічну адресу та працює постійно. Налаштування складається з п’яти кроків: установити Tailscale на сервері, оголосити exit node, увімкнути IP forwarding, схвалити маршрут в адміністративній консолі, а потім вибрати цей вузол на ноутбуці. Четвертий крок виконується перемикачем на вебсторінці, а не командою. Саме на цьому етапі найчастіше виникають труднощі.
Після ввімкнення ноутбук шифрує кожен пакет і надсилає його на VPS. VPS застосовує source NAT (network address translation) і передає пакет далі зі своєю публічною IP-адресою. Вебсайти бачать VPS. Wi-Fi у кафе бачить один зашифрований UDP-потік до VPS і більше нічого.
Tailscale використовує WireGuard для передавання даних, а також coordination server, який розповсюджує ключі та допомагає двом машинам знаходити одна одну через NAT. Саме завдяки цьому coordination server нижче не потрібно копіювати ключі. Щоб докладно ознайомитися з компромісами, прочитайте порівняння Tailscale і звичайного WireGuard. Якщо ви хочете самостійно контролювати кожну частину тунелю, натомість самостійно розгорніть звичайний WireGuard VPN на VPS.
Наведені нижче кроки передбачають, що Tailscale уже працює на вашому ноутбуці, а обидві машини ввійшли в один tailnet. Tailnet — це ваша приватна мережа Tailscale, і кожен пристрій у ній отримує стабільну адресу в 100.64.0.0/10.
Встановлення Tailscale на VPS
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale upСкрипт встановлення вибирає репозиторій пакетів для вашого дистрибутива та встановлює daemon 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.conftee -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 не доводить, що forwarding увімкнено. Самостійно прочитайте значення sysctl.
Не потрібно вручну додавати правило masquerade. tailscaled створює власні ланцюжки firewall з назвами ts-input, ts-forward і ts-postrouting, а правило NAT для трафіку exit node міститься в ts-postrouting. Перегляньте їх за допомогою sudo iptables-save | grep ts- або sudo nft list ruleset на системі з nftables.
Рекламуйте VPS як exit node
sudo tailscale set --advertise-exit-nodetailscale set змінює один параметр і не змінює решту. tailscale up --advertise-exit-node також рекламує 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 повідомляє coordination server, що готовий працювати як exit node. Клієнти ще не можуть ним користуватися.
Схвалення exit node Tailscale в адміністративній консолі
Це крок без команди. Відкрийте сторінку Machines в адміністративній консолі, знайдіть VPS, відкрийте меню з трьома крапками в кінці його рядка, виберіть Edit route settings і ввімкніть Use as exit node.
Поки цей перемикач не ввімкнено, control plane зберігає пропозицію, але не призначає її жодному пристрою. tailscale exit-node list на вашому ноутбуці нічого не показує, а трафік і далі проходить звичайним маршрутом. На жодній із машин повідомлення про помилку не з’являється. Exit node просто не з’являється у списку.
Exit node можна схвалювати автоматично за допомогою запису у файлі політики tailnet:
"autoApprovers": {
"exitNode": ["tag:exit"],
}Пристрій, запущений за допомогою --advertise-tags=tag:exit, буде схвалено автоматично, якщо tag:exit визначено в секції tagOwners того самого файлу політики. Призначення тегу змінює власника: тегований пристрій належить tailnet, а не вашому обліковому запису, і правила доступу для нього також змінюються. Для одного VPS простіше скористатися перемикачем.
Виберіть exit node на ноутбуці
На клієнті Linux:
tailscale exit-node list
sudo tailscale set --exit-node=vps.your-tailnet.ts.netexit-node list виводить схвалені exit node у вашому tailnet разом із їхніми адресами. Порожній список означає, що етап схвалення не виконано. У macOS, Windows, iOS та Android цей самий пункт доступний у меню Exit Node у застосунку Tailscale.
Перевіряйте з клієнта, а не із сервера:
curl -4 https://ifconfig.meВиконайте команду один раз до вибору exit node і один раз після нього. Адреса має змінитися з локальної на публічну IP-адресу VPS. Щоб припинити використання exit node:
sudo tailscale set --exit-node=Є ще один важливий прапорець. Коли вибрано exit node, клієнт надсилає через тунель увесь трафік, зокрема пакети, адресовані до 192.168.1.50, тому принтер і мережеве сховище перестають відповідати. Залиште локальну мережу в локальному маршруті:
sudo tailscale set --exit-node=<name> --exit-node-allow-lan-access=trueЧому DNS змінюється одразу після ввімкнення exit node
За замовчуванням пристрій, який використовує exit node, також використовує цей exit node як DNS-резолвер для кожного домену. Це перевизначає глобальні та split DNS-сервери імен, налаштовані для вашого tailnet. Така поведінка є навмисною. Якби запити й надалі надходили до резолвера локальної мережі, маршрутизатор у кафе все одно бачив би ім’я кожного сайту, який ви відвідуєте, тоді як сам трафік залишався б приватним. Імена та пакети мають виходити з одного місця.
Це створює проблему для тих, хто використовує внутрішній резолвер: nameserver tailnet, від якого ви залежите, перестає використовуватися, поки exit node увімкнений. На сторінці DNS в консолі адміністрування увімкніть Use with exit node для цього nameserver, щоб знову використовувати його.
Імена 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-запити — ні. Це та сама витік 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 не має upstream для IPv6. Сайти з підтримкою dual stack зазвичай усе одно завантажуються, оскільки клієнт відмовляється від IPv6 і повторює запит через IPv4. Проте під час першого підключення до кожного сайту така повторна спроба додає затримку. Адресати, доступні лише через IPv6, залишаються недоступними.
Інша частина — forwarding. Якщо net.ipv4.ip_forward = 1 налаштовано, а net.ipv6.conf.all.forwarding залишено зі значенням 0, ви отримуєте робочий шлях IPv4 і black hole для 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
Tailscale 1.54 і новіші версії на ядрі Linux 6.2 або новішому можуть використовувати receive offload, який підвищує пропускну здатність пересиланого трафіку. GRO (generic receive offload) об’єднує вхідні пакети до того, як ядро обробить їх по одному. Станом на August 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 offip -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 unit, який виконує рядок ethtool під час завантаження, забезпечує той самий результат.
Що означає політика допустимого використання вашого провайдера для вихідного трафіку
Кожен пакет, який клієнт надсилає через вихідний вузол, виходить із публічною IP-адресою VPS, тому його пов’язують із вашим обліковим записом. Скарги на зловживання надходять у вашу поштову скриньку: повідомлення про порушення авторських прав, скарги на сканування портів. Ознайомтеся з AUP (політикою допустимого використання) вашого провайдера, перш ніж маршрутизувати трафік домашньої мережі або команди через один сервер. Не відкривайте вихідний вузол для людей, за яких ви не можете поручитися.
Споживання пропускної здатності враховується двічі. Трафік надходить до VPS через тунель, а потім знову виходить в інтернет. Зазвичай обидва напрямки враховуються в ліміті передавання даних вашого тарифного плану. Потокове відео, яке переглядають через вихідний вузол, може споживати значно більше трафіку, ніж очікує більшість користувачів.
Діапазони адрес дата-центру також мають певну репутацію. Деякі сайти частіше показують для них CAPTCHA, а деякі потокові сервіси повністю блокують такі адреси. Жодне налаштування не змінить цього, оскільки це властивість блоку адрес, яким володіє ваш провайдер.
Чому трафік і далі виходить через ваше локальне з’єднання
Вузол виходу оголошено, але не схвалено. tailscale exit-node list на клієнті нічого не виводить, і в журналі жодної з машин немає помилок. Відкрийте сторінку Machines і ввімкніть Use as exit node.
Клієнт не вибрав цей вузол. Схвалення робить вузол доступним для tailnet. Вибір — окрема дія на кожному пристрої. Повторно виконайте sudo tailscale set --exit-node=<name>, потім знову перевірте curl -4 https://ifconfig.me.
Пересилання вимкнено. Симптом однозначний: 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 заблоковано, пристрої не можуть побудувати прямий шлях і переходять на relay DERP, що додає затримку до кожного з’єднання. Дозвіл вхідного UDP-трафіку на порт 41641 до VPS у мережевому брандмауері провайдера зазвичай відновлює прямий шлях.
Коли варто відмовитися від координаційного сервера Tailscale
Усе описане вище залежить від розміщеного Tailscale координаційного сервера для обміну ключами та підтвердження, яке ви виконали. Ваш трафік і далі передається безпосередньо з ноутбука на VPS, а координаційний сервер його не обробляє. Водночас він визначає, хто може приєднатися до tailnet і до яких ресурсів може отримати доступ кожен пристрій. Якщо саме цю залежність потрібно усунути, запустіть Headscale як власний сервер керування Tailscale і вкажіть його на обох клієнтах. Подальші кроки для exit node залишаються такими самими. Підтвердження маршруту виконується через командний рядок Headscale, а не через розміщену консоль. Headscale замінює control plane, але дає змогу й надалі використовувати клієнти 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-запити на нього. Це перевизначає глобальні та split 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 у кафе та вашого домашнього ISP, але той самий вебперегляд стає доступним вашому провайдеру VPS разом із вашим іменем облікового запису.