Добрый день. В этой статье мы установим VPN Tailscale, который основан на WireGuard и предоставляет дополнительные функции для пользователей. В отличие от WireGuard, Tailscale не является полностью бесплатным. Вы можете им пользоваться без оплаты и привязки карты, с ограничениями до 3 пользователей и 100 устройств. Что в целом достаточно для некоммерческого применения.
Содержание статьи
Tailscale
Tailscale — это сетевое решение, построенное на базе протокола WireGuard, которое упрощает создание безопасных mesh-сетей (сеть, где каждый узел может напрямую взаимодействовать с любым другим узлом). В отличие от традиционных VPN с архитектурой «звезда» (hub-and-spoke), Tailscale предлагает гибкость, легкость настройки и возможность прямого соединения между узлами.
Установка 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
ShellScriptapt update && apt upgrade -y
ShellScriptsudo apt-get update
sudo apt-get install tailscale
ShellScriptsudo tailscale up
ShellScripttailscale 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
ShellScripttouch /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
Классная статья, спасибо!
Есть вопрос! После того как я перешел «…на вкладку DNS, выбираем DNS от Cloudflare, Google или Quad9…», не нужно включить тумблер override local DNS?
Спасибо!
Добрый день, спасибо большое за отзыв )) Я использую, как я понимаю, тогда все запросы идут через HTTPS выбранного провайдера, например Cloudflare.
Спасибо!
Дмитрий, спасибо за отличную статью. О tailscale я узнал только вчера и попробовал использовать его для того, чтобы опубликовать сайт, находящийся на домашнем сервере (на сером ip) в интернете. Документация tailscale говорит, что все настроено правильно, а доступа нет. Вы не в курсе в чем может быть проблема?
Добрый день. Не очень понял — опубликовать сайт на сером IP, это как ?
Статья обновлена