Назад

Устанавливаем Mesh-сеть на основе Tailscale VPN

Добрый день. В этой статье мы установим VPN Tailscale, который основан на WireGuard и предоставляет дополнительные функции для пользователей. В отличие от WireGuard, Tailscale не является полностью бесплатным. Вы можете им пользоваться без оплаты и привязки карты, с ограничениями до 3 пользователей и 100 устройств. Что в целом достаточно для некоммерческого применения.

Tailscale

Tailscale — это сетевое решение, построенное на базе протокола WireGuard, которое упрощает создание безопасных mesh-сетей (сеть, где каждый узел может напрямую взаимодействовать с любым другим узлом). В отличие от традиционных VPN с архитектурой «звезда» (hub-and-spoke), Tailscale предлагает гибкость, легкость настройки и возможность прямого соединения между узлами.

Основные особенности Tailscale

  1. WireGuard как основа
    • Tailscale использует WireGuard для создания сверхлегких зашифрованных туннелей между устройствами (узлами).
    • WireGuard изначально поддерживает только «звездообразную» архитектуру, где все устройства подключаются через центральный концентратор. Tailscale же расширяет возможности WireGuard, создавая mesh-сети.
  2. Mesh-сети и маршрутизация
    • В mesh-сети узлы могут соединяться напрямую, минимизируя задержки и повышая производительность.
    • Tailscale устраняет сложность настройки mesh-сетей: все конфигурации туннелей и ключей выполняются автоматически через координационный сервер.
  3. Координационный сервер
    • Координационный сервер Tailscale (например, login.tailscale.com) используется для обмена публичными ключами и метаданными узлов.
    • Сервер служит только для управления и настройки, а весь трафик данных передается напрямую между узлами.
  4. Zero Trust и безопасность
    • Все соединения между узлами полностью шифруются, а приватные ключи никогда не покидают узел.
    • Доступ между устройствами управляется через центральные политики ACL, которые применяются на каждом узле локально.
  5. NAT-траверс и DERP-серверы
    • Tailscale автоматически обходит NAT и брандмауэры, используя стандарты STUN и ICE.
    • Для сложных сетей, где UDP-запросы блокируются, используется сеть DERP-серверов, которые передают зашифрованный трафик.
  6. Легкость развертывания
    • Установка занимает считанные минуты: достаточно установить приложение Tailscale на два устройства и авторизоваться под одним аккаунтом.
    • Tailscale не требует выделенных серверов или изменения существующей инфраструктуры.
  7. Интеграция с системами авторизации
    • Использует OAuth2, OIDC или SAML для аутентификации, интегрируясь с существующими системами (например, Google Workspace или Office 365).
  8. Логирование и аудит
    • Все подключения внутри сети логируются локально на каждом узле и передаются в централизованный сервис для анализа. Это обеспечивает высокий уровень прозрачности и безопасности.

Отличия от WireGuard

  • WireGuard требует ручной настройки туннелей и управления ключами, что усложняет создание mesh-сетей.
  • Tailscale автоматизирует процесс настройки, предоставляя удобный интерфейс и гибкость.
  • WireGuard не имеет встроенных механизмов обхода NAT, тогда как Tailscale использует STUN, ICE и DERP для работы в сложных сетях.

Установка Tailscale

Заходим на наш сервер через SSH или веб-консоль, копируем команды и вставляем в консоль:

curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/noble.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/noble.tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.list
ShellScript
apt update && apt upgrade -y
ShellScript
sudo apt-get update
sudo apt-get install tailscale
ShellScript
sudo tailscale up
ShellScript
tailscale ip -4
ShellScript

Дополнительная настройка

При включении переадресации IP-адресов убедитесь, что брандмауэр по умолчанию запрещает переадресацию трафика. Это настройка по умолчанию для стандартных брандмауэров, таких как ufw и firewalld. Блокировка переадресации трафика по умолчанию предотвращает непреднамеренную маршрутизацию трафика.

Для использования устройства Linux в качестве маршрутизатора подсети требуется переадресация IP-адресов. Процесс включения переадресации IP-адресов зависит от дистрибутива Linux. Однако в большинстве случаев работают следующие инструкции.

Если в вашей системе Linux есть /etc/sysctl.d каталог, используйте:

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
ShellScript

В противном случае используйте:

echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p /etc/sysctl.conf
ShellScript

Оптимизация Linux для маршрутизаторов подсети и выходных узлов

Версия Tailscale 1.54 или более поздняя, используемая с ядром Linux 6.2 или более поздней версии, позволяет повысить пропускную способность UDP с помощью выгрузки на транспортном уровне. Если устройство Linux работает в качестве выходного узла или маршрутизатора подсети, для достижения наилучших результатов убедитесь, что настроено следующее сетевое устройство:

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
ShellScript

По умолчанию изменения, внесённые с помощью 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 -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
ShellScript

Выполните следующие команды, чтобы протестировать скрипт и убедиться, что он успешно работает на ваших устройствах:

sudo /etc/networkd-dispatcher/routable.d/50-tailscale
test $? -eq 0 || echo 'An error occurred.'
ShellScript

Перенаправление трафика через сервер

tailscale up --advertise-exit-node
ShellScript

Рекомендации по выбору размера машин

Далее идет важный этап, не пропускаем его!

Затем на сайте Tailscale, в списке машин — нажать на три точки напротив той, через которую будет идти весь трафик (подсказка, название нашего сервера), Edit Routte Settings → активировать переключатель Use as exit node.

В Windows, на иконке Tailscale правой клавишей мыши, в появшемся списке выбрать Exit node и выбрать машину через которую будет идти весь трафик (подсказка, название нашего сервера).

В Android, справа вверху нажать три точки, далее Use exit node и выбрать машину через которую будет идти весь трафик.

И напоследок парочку фичей:

Переходим в консоли Tailscale (ссылка) на вкладку DNS, выбираем DNS от Cloudflare, Google или Quad9. Или вводим свой, например от Adguard. И ниже активируем HTTPS Certificates.

Базовая защита сервера

Защитим сервер брутфорса (взлом через перебор паролей):

apt install fail2ban -y && apt install ufw -y && apt install nano -y
ShellScript
touch /etc/fail2ban/jail.local && nano /etc/fail2ban/jail.local
ShellScript

Откроется редактор, вставим в него код:

[sshd]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
logpath = /var/log/auth.log
findtime = 600
maxretry = 3
bantime = 43200

Нажимаем ctlr + x, далее y + enter, чтобы сохранить.

Настраиваем фаервол и отключаем пинг

ufw allow 22/tcp && ufw limit 22/tcp && ufw allow 443/tcp && ufw default deny incoming && ufw default allow outgoing && service ufw start && ufw enable 

Подтверждаем включение фаервола, Y и Enter.

Отключим двухсторонний пинг, чтобы затруднить обнаружение туннеля

 nano /etc/ufw/before.rules

Меняем концовку следующего выражения с ACCEPT на DROP:

-A ufw-before-input -p icmp --icmp-type echo-request -j DROP

Нажимаем ctlr + x, далее y + enter, чтобы сохранить.

И напоследок:

apt update && apt upgrade -y && apt autoclean -y && apt clean -y && apt autoremove -y && reboot
ingenare
Author: ingenare

IT Project Manager, организатор IT-конференций в РФ

0 0 голоса
Рейтинг статьи
ingenare
ingenare
https://itstar.space
IT Project Manager, организатор IT-конференций в РФ
Подписаться
Уведомить о
guest
6 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Алексей
Алексей
2 лет назад

Классная статья, спасибо!

Есть вопрос! После того как я перешел «…на вкладку DNS, выбираем DNS от Cloudflare, Google или Quad9…», не нужно включить тумблер override local DNS?

Спасибо!

Алексей
Алексей
Ответить на  ingenare
2 лет назад

Спасибо!

Антон
Антон
1 год назад

Дмитрий, спасибо за отличную статью. О tailscale я узнал только вчера и попробовал использовать его для того, чтобы опубликовать сайт, находящийся на домашнем сервере (на сером ip) в интернете. Документация tailscale говорит, что все настроено правильно, а доступа нет. Вы не в курсе в чем может быть проблема?

Политика конфиденциальности сайта