Инструкция для подключения удалённого доступа с помощью Tailscale

Удаленный доступ к RouteRich на OpenWRT с помощью Tailscale

Настройка VPN-сервера дома может оказаться утомительной. Обычно вам нужен общедоступный статический IP-адрес, доменное имя, и вам приходится иметь дело с переадресацией портов. А что, если ваш интернет-провайдер дает вам только серый IP (за CGNAT) — означает, что к вам даже нет прямого доступа извне? В этом случае традиционные настройки VPN просто не будут работать без дополнительных сервисов. Вот где Tailscale подходит. Он устраняет все хлопоты и позволяет вам безопасно получать доступ к домашней сети из любой точки мира — без статического IP-адреса, переадресации портов и головной боли. Основан он на базе WireGuard VPN.

Все это работает, даже если ваш интернет-провайдер предоставляет вам только серый IP-адрес.

Установка Tailscale на OpenWRT

1. Подготовка

  • Убедитесь, что ваш маршрутизатор включен и подключен к Интернету.
  • Войдите в веб-интерфейс OpenWRT.

2. Установка Tailscale (Удобнее переключить интерфейс на английский: Система>Система>Язык и тема)

  • Перейдите System > Software.
  • Нажмите Update Lists
  • Найдите и установите tailscale пакет.

Удобно это сделать через терминал: (Службы>Терминал или через SSH(включив его в настройках: Система>Администрирование>Доступ по SSH):

opkg update
opkg install tailscale iptables-nft kmod-ipt-conntrack kmod-ipt-conntrack-extra kmod-ipt-conntrack-label kmod-nft-nat kmod-ipt-nat

Настройка интерфейсов

3. Добавление Tailscale интерфейса

  • Перейти Network > Interfaces > Add New Interface.
  • Name: tailscale
    • Protocol: Unmanaged
    • Device: tailscale0
  • Перейти в вкладку Firewall Settings
    • Create / Assign firewall-zone: выбрать поле: tailscale
  • Нажать Save

Убедитесь, что интерфейсу назначен ваш адрес Tailscale:
Команда в терминале:

ip address show tailscale0

4. Добавить фиктивный интерфейс (необязательно: изолировать локальную сеть Tailscale)

  • Перейти Network > Interfaces > Add New Interface.
  • Name: tlan
    • Protocol: Unmanaged
    • Device: оставьте пустым
  • Перейти в вкладку Firewall Settings,
  • Create / Assign firewall-zone: выбрать поле: tlan.
  • Нажать Save и Save & Apply.

Конфигурация Firewall

5. Перейти в меню Network >Firewall> Firewall Zones

tailscale Zone:

  • Input: accept
  • Output: accept
  • Intra-zone Forwarding: reject
  • Отметить: Masquerading, MSS Clamping
  • Allow forward to destination zones: wan
  • Allow forward from source zones: tlan
  • Нажать Save

tlan Zone:

  • Input: accept
  • Output: accept
  • Intra-zone Forwarding: accept
  • Masquerading & MSS Clamping: снять галки
  • Allow forward to destination zones: tailscale
  • Allow forward from source zones: unspecified
  • Нажать Save

wan Zone:

  • Input: reject
  • Output: accept
  • Intra-zone Forwarding: reject
  • Отметить: Masquerading, MSS Clamping
  • Allow forward to destination zones: unspecified
  • Allow forward from source zones: lan, tailscale
  • Нажать Save & Apply.

Настройка Tailscale

6. Запуск Tailscale

Подключитесь по SSH к маршрутизатору и запустите:

tailscale up

  • Будет выведен URL-адрес входа. Откройте его в браузере для аутентификации.
  • Если вы впервые, зарегистрируйтесь на сайте Tailscale.

После регистрации, подключение устройства можно увидеть с помощью команды “status” в терминале:

tailscale status

Тест Tailscale соединения с мобильного телефона

7. Проверка соединения

  • Установите приложение Tailscale на ваш телефон (ищите в интернете Tailscale.apk).
  • Выключите Wi-Fi, используйте мобильный интернет.
  • Войдите и подключитесь.
  • Скопируйте свой IP-адрес OpenWRT Tailscale из приложения.
  • Вставьте его в мобильный браузер — вы должны увидеть веб-интерфейс OpenWRT.

Разрешенные маршруты

Для чего разрешать маршруты? Это позволит вашему маршрутизатору OpenWRT направлять трафик на устройства в вашей локальной сети через Tailscale.

8. Включение разрешенных маршрутов

Запустите команду в Терминале: Замените значение (192.168.1.0) (/24 не меняйте) на вашу подсеть:

tailscale up --advertise-routes=192.168.1.0/24 --accept-routes
service tailscale restart

  • Разрешить (на сайте) Маршрутизацию на панели администратора Tailscale.


9. Тест с мобильного

  • Повторно подключитесь к Tailscale на своем телефоне.
  • Посетите локальный IP-адрес вашего маршрутизатора (например, 192.168.1.1) в браузере.
  • Вы должны увидеть интерфейс OpenWRT.

Настройка выходной Ноды: Exit Node (Если вам это нужно)

Для чего это нужно? Это позволяет вашему устройству отправлять весь свой интернет-трафик через маршрутизатор OpenWRT — действуя как полноценный VPN-туннель.

10. Включение выходной Ноды: Exit Node

Команда в терминале: Замените значение (192.168.1.0) (/24 не меняйте) на вашу подсеть:

tailscale up --reset
tailscale up --advertise-routes=192.168.1.0/24 --accept-routes --advertise-exit-node
service tailscale restart

Разрешить (на сайте) Exit Node на панели администратора Tailscale.

11. Тест выходной Ноды: Exit Node

  • На мобильном телефоне повторно подключитесь к Tailscale и включите Exit Node.
  • Откройте браузер и найдите “какой у меня IP”.
  • Теперь ваш IP-адрес должен быть широкополосным IP-адресом вашего маршрутизатора.
  • Отключите выходной узел и обновите страницу — теперь ваш IP-адрес должен отражать вашу мобильную сеть.
  • Это подтверждает, что VPN работает в полном туннеле.

Дополнительные материалы:

Интересно! А в чем отличие от Zerotier?

zerotierOne у меня на телефоне работает кривовато: еще установлен Adguard, и его надо выключать вручную, чтобы запустился zerotier.

Adguard с Taliscale отключать не нужно. Он сам отключится, когда запустите Tail и включится, когда отключите Tailscale. Отличий нет, кроме того, что Zeroiter не дает некоторым новым пользователям, создавать много маршрутов, в отличии от Tailscale. Ну и мне Tail удобней. И работает стабильно.

Дополнение!! Можно настроить через графический интерфейс (тогда выше инструкцию не используем).

Графический интерфейс

Интерфейс
Скачать пакет (ищите в интернете на github) # luci-app-tailscale зайти в Файловый менеджер и поместить в /root.

Установка
Команда:
cd
ls
opkg update
opkg install *.ipk
Дальше настройка в панели VPN

Дополнение 2:
Проверка поддерживает ли ваша версия OpenWRT nftables или нет.
nft list ruleset

Если вывод показывает nftables, значит, система не использует iptables.

ВНИМАНИЕ!!! В последних версиях Tailscale появилась поддержка nftables. Чтобы включить её:

TS_DEBUG_USE_NETLINK_NFTABLES=true tailscale up

Это позволит Tailscale использовать Netlink API для работы с nftables!!!

Если версия OpenWRT не поддерживает nftables установите следующие пакеты:
opkg install iptables-nft kmod-ipt-conntrack kmod-ipt-conntrack-extra kmod-ipt-conntrack-label kmod-nft-nat kmod-ipt-nat

Дополнение 3:

Если Tailscale не создаёт нужные правила, можно добавить их вручную:

nft add rule ip filter input iifname "tailscale0" accept
nft add rule ip filter forward iifname "tailscale0" accept

А сколько памяти ест Tailscale? Больше или меньше Zerotier?

У меня два роутера на OpenWRT, Routerich и Xiaomi AX3200. На Xiaomi всего 128Мб памяти, и zerotier-one занял там целых 14%. Я считаю, что это многовато.

На Routerich он занимает 6% (там памяти вдвое больше, так что в Мб объём должен быть одинаковый).

Если аппетиты Tailscale поменьше, то имеет смысл перейти.

Еще вопрос. Dropbear отказался запускаться на сетевом интерфейсе ztw4что-то-там, который создал zerotier-one. В сообщении об ошибке писал что-то о том, что у интерфейса нет своего IP-адреса (точно не могу вспомнить).

Как с этим у Tailscale?

Tailscale более тяжёлый и ест больше оперативной памяти. Насчёт запуска терминала от интерфейса tailscale, с этим проблем нет.

1 лайк

Нормально все. SSH работает, как должен.

По поводу памяти:
Если памяти хватает, то его воздействие не оказывает никакого влияния на стабильность и быстродействие.

У меня много чего стоит, это общее потребление. Скрипт обхода блокировок и подкоп жрут, столько же.

Ха, так тогда получается, что tailscale менее прожорлив!

Я цифры перепутал. В xiaomi не 128Мб памяти, а 256. А в routerich, соответственно, 512.
256 * 0.14 = 35.8
512 * 0.06 = 30.72

6% и 14% взяты из таблицы процессов (https://192.168.0.1/cgi-bin/luci/admin/status/processes)

Из вывода ps это тоже видно.

На ротуерич: 28937 root 30260 S /usr/bin/zerotier-one /var/lib/zerotier-one
К сяоми подключиться не могу :slight_smile:

С zerotier я связался только потому, что он был у роутерича предустановлен, а у меня не было никакого опыта

Ну, по моему мнению, да. У меня сейчас он на даче. Я в городе. Связь через мобильный интернет. Имею полный контроль с любого устройства. Через SSH и вебморду.

Эх, где ж вы были в феврале?.. :smiley:
Я б сразу тогда tailscale настроил.
У меня примерно такая же ситуация, до роутера ехать 70км.

Zerotier не “зашел”, хоть изначально с коробки. Остановился на Тайле.

Я только в конце апреля его получил)

Не надо так.
Надо Download | Tailscale
Или GitHub - tailscale/tailscale-android: Tailscale Android Client

Ест на самом деле около 12Мб оперативы, и на интерфейсе tailscale0 есть ip-адрес, т.е. dropbear ругаться не должен

Он по умолчанию заблочен по Geoкоду, из РФ с офф.сайта не все смогут скачать и поставить тоже. По вашему варианту, только через VPN или фиксированным DNS. А с гитхаба, да, можно и по прямой ссылке.

Для линукса тоже грабли, там сервер возвращает Error 451.

snap install tailscale отрабатывает нормально.

Есть веб-интерфейс: GitHub - asvow/luci-app-tailscale: LuCI support for tailscale

В репозиториях OpenWRT его нет, ставить надо вручную.

Для установки надо удалить или переименовать файлы /etc/config/tailscale и /etc/init.d/tailscale, т.к. он несет с собой их расширенные версии.

После того, как я его установил, переименовав файлы, и включил галку Enabled, он подхватил предыдущие настройки и залогинился в сервис без дополнительных телодвижений. Повторно выполнять процедуру подключения роутера на tailscale.com не понадобилось.

И еще вот на это надо внимание обратить: 1.80.2 breaks DNS on OpenWRT · Issue #15174 · tailscale/tailscale · GitHub

В репозитории версия tailscale 1.58, поведение то же, файл /etc/resolv.conf перезаписан

Спасибо за дополнение :+1: