Що таке Tailscale?
Tailscale — сервіс для обʼєднання декількох девайсів в VPN на протоколі WireGuard. Tailscale дуже легко налаштовується якщо треба обʼєднати декілька ПК/ноутів на різних ОС, і доволі легко (порівнюючи з OpenVPN) якщо треба додати сервер.
Що таке Exit Node і навіщо він нам?
“Exit Node” — вихідний вузол. Якщо підключитися до девайсу в якого увімкнений режим “Exit Node” то увесь ваш інтернет трафік буде йти через нього.
Тож, беремо гарний хостінг з потрібною вам geo-локацією (для швидкості/отримання IP адреси конкретної країни) і у вас власний VPN зі статичною IP адресою за 4-6 євро на місяць.
В моєму випадку, треба було мати сервер зі статичним IP який був би внесений в декілька whitelist-ів, щоб декілька девайсів могли робити запити через його IP.
Команди для налаштування сервера на Linux в якості Exit Node.
1. Встановіть Tailscale на сервер
(запустіть у терміналі сервера або через SSH)
curl -fsSL https://tailscale.com/install.sh | sh
2. Додайте ключ авторизації, згенерований в панелі керування Tailscale
Tailscale-клієнти для інших девайсів зазвичай мають UI в якому ви можете авторизуватися через Google або GitHub, а ось для сервера потрібно заздалегідь створити ключ в кабінеті Tailscale. Також, якщо плануєте довго користуватися сервером, раджу в тому самому кабінеті відключити cплив терміну дії ключа автентифікації (Machines → оберіть свій сервер → Options → Disable key expiry
(запустіть у терміналі сервера або через SSH)
tailscale up --authkey=<YOUR_GENERATED_KEY>
3. Переконайтеся, що переадресація портів IPv4 та IPv6 увімкнена
(запустіть у терміналі сервера або через SSH)
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
4. Позначте сервер як Exit Node
(запустіть у терміналі сервера або через SSH)
tailscale up --advertise-exit-node
5. Увімкніть Exit Node
Зайдіть в Панель керування Tailscale → Machines → оберіть свій сервер → Options → Edit route settings... → поставте прапорець "Use as exit node"
6. (Необовʼязково) Оптимізуйте пропускну здатність UDP
(запустіть у терміналі сервера або через SSH)
NETDEV=$(ip route show 0/0 | cut -f5 -d' ')
sudo ethtool -K $NETDEV rx-udp-gro-forwarding on rx-gro-list off
Зміни, внесені за допомогою ethtool
, не зберігаються постійно і будуть втрачені після вимкнення севера. У дистрибутивах Linux, які використовують networkd-dispatcher
(факт використання можна перевірити за допомогою systemctl is-enabled networkd-dispatcher
), скопіюйте та виконайте наступні команди, щоб створити скрипт, який налаштовуватиме ці параметри при кожному завантаженні.
printf '#!/bin/sh\n\nethtool -K %s rx-udp-gro-forwarding on rx-gro-list off \n' "$(ip route show 0/0 | cut -f5 -d" ")" | sudo tee /etc/networkd-dispatcher/routable.d/50-tailscale
sudo chmod 755 /etc/networkd-dispatcher/routable.d/50-tailscale
Перевірте створений скрипт, щоб переконатися, що він успішно працює на вашому сервері:
sudo /etc/networkd-dispatcher/routable.d/50-tailscale
test $? -eq 0 || echo 'An error occured!'
Все. Сервер готовий до підключень!
Далі можете вже гратися і, наприклад:
створити скрипт який буде підіймати та підготовлювати сервер автоматично через API (як от у Hetzner), щоб економити гроші та платити тільки за use-time;
замість “Exit Node” налаштувати маршрутизацію, щоб тільки частина трафіку йшла через вузол
спробувати Taildrop (наразі в альфа тестуванні), щоб обмінюватися файлами
…і ще багато чого. Короче, ви вже зрозуміли, продукт класний!
P.S. Критика цього допису вітається!