Tailscale exit node – це вузол, через який клієнт виводить увесь зовнішній трафік у домашню мережу. Для homelab це простий спосіб отримати «домашній» вихід в інтернет без окремого VPN-шлюзу, а заодно – доступ до локальних сервісів у звичному мережевому контексті. Нижче – робоча схема для Linux, команди, перевірка і місця, де налаштування зазвичай ламається.
Практичний сценарій типовий: ноутбук або телефон підключається до tailnet, вибирає домашній сервер як exit node і виходить у мережу через ваш канал та вашу LAN. Це зручно для доступу до внутрішніх IP, перевірки сервісів «зсередини» або для публічних Wi‑Fi, де не хочеться світити реальним трафіком напряму.
У домашній інфраструктурі такий підхід часто кращий за повний WireGuard вручну. Менше рутини з ключами, маршрутами і клієнтами. Але є межа: якщо Linux-хост паралельно тягне Docker, локальний firewall, policy routing і ще кілька bridge-мереж, саме NAT та форвардинг стають основним джерелом проблем, а не сам Tailscale.
Який результат потрібен
Після налаштування Linux-сервер у tailnet рекламує себе як tailscale exit node. Клієнтські пристрої можуть вибрати цей вузол у застосунку Tailscale або через CLI, після чого дефолтний маршрут піде через нього. Ззовні трафік виглядатиме так, ніби він виходить із домашньої мережі.
Для цього потрібен Linux-хост з інтернетом, встановлений Tailscale, увімкнений IP forwarding і маскарадинг на вихідному інтерфейсі. Якщо хост стоїть за домашнім роутером, додатковий port forward для базового сценарію зазвичай не потрібен.
Що має бути на Linux-вузлі до старту
Перед тим як вмикати tailscale exit node, треба перевірити три речі: вузол авторизований у tailnet, у системі працює пересилання пакетів, а локальний firewall не блокує форвардинг між tailscale0 та зовнішнім інтерфейсом.
На Debian або Ubuntu типовий старт такий:
curl -fsSL https://tailscale.com/install.sh | sh sudo tailscale up
Після авторизації варто одразу подивитися статус:
tailscale status ip addr show tailscale0
Якщо інтерфейс tailscale0 не з’явився, далі йти рано. На цьому етапі проблеми зазвичай банальні: сервіс не стартував, вузол не пройшов логін або система працює в мінімальному контейнерному середовищі без потрібних мережевих можливостей.
Як налаштувати Tailscale exit node на Linux
Щоб підняти tailscale exit node, треба увімкнути форвардинг IPv4, додати NAT для вихідного інтерфейсу і підняти Tailscale з рекламою exit node. Це весь мінімум. Без будь-якого з цих трьох кроків схема або не запуститься, або дасть напівробочий стан.
-
Увімкнути IP forwarding:
sudo sysctl -w net.ipv4.ip_forward=1 sudo sh -c 'echo net.ipv4.ip_forward=1 > /etc/sysctl.d/99-tailscale-exit-node.conf' sudo sysctl --system
-
Дізнатися зовнішній інтерфейс. Часто це eth0, enp1s0 або wlan0:
ip route get 1.1.1.1
-
Додати NAT через iptables для виходу в інтернет. Приклад для eth0:
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE sudo iptables -A FORWARD -i tailscale0 -o eth0 -j ACCEPT sudo iptables -A FORWARD -i eth0 -o tailscale0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-
Підняти вузол з рекламою exit node:
sudo tailscale up --advertise-exit-node
-
Після цього в адмін-панелі Tailscale для вузла часто треба окремо підтвердити advertised capability. Якщо підтвердження не зробити, клієнти побачать вузол у tailnet, але не зможуть вибрати його як вихідний.
Коли на хості використовується nftables, краще відразу оформити правила там, а не змішувати два набори фаєрвольних механізмів. Змішування працює не завжди погано, але відладка стає брудною дуже швидко.
Як вибрати exit node на клієнті
Після того як tailscale exit node активований і схвалений, клієнт повинен явно вибрати цей вузол. Сам факт присутності сервера в tailnet нічого не змінює – дефолтний маршрут сам не перемикається.
На Linux або macOS через CLI це роблять так:
tailscale up --exit-node=<tailnet-ip-або-hostname>
На мобільних клієнтах і десктопних застосунках опція доступна в налаштуваннях підключення. Якщо потрібен тільки доступ до tailnet та локальних адрес, а не повний вихід в інтернет через дім, exit node вмикати не треба.
Перевірка: що дивитися після запуску
Нормальна перевірка tailscale exit node складається з трьох кроків: клієнт повинен бачити маршрут через exit node, зовнішня IP-адреса має змінитися на домашню, а пакети до інтернету мають проходити без асиметрії та таймаутів.
-
На сервері перевірити стан Tailscale:
tailscale status sudo tailscale debug prefs
-
На клієнті впевнитися, що ввімкнений конкретний вузол як exit node:
tailscale status
-
Перевірити зовнішню адресу:
curl ifconfig.me
-
Подивитися таблицю маршрутів на клієнті:
ip route
Якщо все налаштовано правильно, зовнішня IP збігатиметься з адресою домашнього каналу. Якщо адреса лишається локальною для поточної мережі, клієнт не перемкнув дефолтний маршрут або вузол не був схвалений як exit node.
Де Tailscale exit node ламається найчастіше
Більшість збоїв не стосується самого оверлею. Проблема майже завжди в NAT, форвардингу або локальному firewall. У homelab це особливо помітно на хостах, де поруч живуть Docker, LXC, libvirt або ручні policy-based маршрути.
Немає інтернету через exit node
Перший підозрюваний – вимкнений net.ipv4.ip_forward. Другий – неправильний зовнішній інтерфейс у правилі MASQUERADE. Третій – firewall блокує FORWARD. На системах з UFW або firewalld ці шари можуть непомітно перекривати ручні правила.
Клієнт бачить вузол, але не може вибрати його
Зазвичай вузол рекламує exit capability, але вона не підтверджена в керуванні tailnet. Інший варіант – ACL або policy обмежує використання exit nodes для цього пристрою чи користувача.
Працює інтернет, але не відкриваються домашні ресурси
Тут часто плутають два різні сценарії: використання exit node і доступ до підмереж через subnet router. Exit node виводить зовнішній трафік. Для повноцінного доступу до LAN-сегментів інколи треба окремо рекламувати маршрути підмережі, а це вже інша схема.
Docker ламає форвардинг
На хостах з Docker правила NAT і FORWARD можуть змінюватися динамічно. До невеликого homelab це терпимо, але якщо контейнерів багато і мереж кілька, окремий Linux-шлюз під tailscale exit node часто стабільніший за суміщення ролей на одному сервері.
Коли exit node – вдалий вибір, а коли краще інший підхід
Tailscale exit node добре закриває персональний вихід у домашню мережу з ноутбука, телефона чи одного-двох адмінських хостів. Для такої ролі рішення швидке і практичне. Але якщо треба вести через нього багато клієнтів або постійний трафік для цілої команди, починають важити канал, CPU, firewall-архітектура і відмовостійкість.
У стабільному homelab вихідний вузол краще тримати на окремому малому сервері або маршрутизаторі з Linux, а не на NAS чи Docker-хості з купою побічних сервісів. На папері суміщення ролей виглядає економно. На практиці оновлення контейнерної мережі або зміна політик firewall ламає трафік саме там, де цього найменше хочеться.
Якщо потрібен доступ не лише до інтернету «через дім», а й до кількох локальних VLAN, тоді варто дивитися в бік subnet routing, а exit node лишити тільки для дефолтного маршруту.
Що лишається після налаштування
Працюючий tailscale exit node на Linux зводиться до простої зв’язки: tailscale0, форвардинг і NAT на зовнішній інтерфейс. Сама конфігурація коротка. Весь реальний клопіт сидить у суміжній мережевій логіці хоста.
Через це найкращий результат у homelab дає не «найрозумніша» схема, а найпростіша. Окремий вузол, мінімум зайвих ролей, зрозумілі правила firewall. Далі вже можна вирішувати, чи потрібен цьому ж серверу subnet router, чи краще не змішувати.