Tailscale с AWG на Flint 2: домашняя сеть и Podkop с телефона
В первой серии Flint 2 получил AmneziaWG 3 и Podkop. В следующей к нему приехали два HDD, Samba и Resilio. Потом добавился Transmission. Роутер окончательно понял, что просто раздавать Wi-Fi ему уже не дадут.
Оставался бытовой вопрос: как заходить во всё это с телефона и ноутбука вне дома? Доступ через внутреннюю сеть старого VPN мы уже сделали, но хотелось подключать устройства без очередного похода на сервер и ручной сборки маршрутов. А заодно — включить VPN на телефоне и получить тот же интернет, который дома настраивает Podkop.
Так появился Tailscale с поддержкой AWG. Техническое задание снова уместилось в несколько фраз. Грабли, как выяснилось, тоже прекрасно умеют помещаться между ними.
Что в итоге работает
Телефон подключается к Tailscale и выбирает flint2 как Exit node. После этого доступны:
- основная домашняя сеть
192.168.1.0/24; - Wi-Fi и LAN самого Flint —
192.168.8.0/24; - панели роутера, Podkop, Resilio и Transmission;
- файлы по Samba;
- интернет через Flint: направления из списков Podkop идут через AWG, остальные — через домашнего провайдера.
На мобильном интернете проверили обычный сайт, YouTube и домашний роутер. Затем отдельно проверили LuCI по LAN-адресу Flint. Последний пункт сначала не работал и заслужил собственную маленькую историю ниже.
Эта конфигурация проверена для IPv4. Полноценный выход в интернет по IPv6 здесь не настраивали.
Схема выглядит так:
Phone / Laptop
|
| Tailscale + AWG v3
v
Flint 2
|
+-- Router services: LuCI, Samba, Resilio, Transmission
+-- Home networks: 192.168.1.0/24 and 192.168.8.0/24
+-- Internet
+-- Podkop matches --> existing AWG31 --> VPN server
+-- Other traffic --> home ISP
Здесь два разных AWG
Это первая вещь, которую полезно проговорить до настройки.
Существующий AWG31 соединяет Flint с VPN-сервером. Podkop уже отправляет туда выбранные сайты и сети. Эту связку мы настроили раньше и сохранили.
AWG внутри Tailscale — транспорт между домашними устройствами. Он доставляет трафик телефона до Flint. Адреса устройств, их регистрацию и согласование соединения по-прежнему обслуживает Tailscale.
Профиль от обычного сервера Amnezia нельзя просто скормить Tailscale и считать задачу выполненной. У форка свои общие параметры транспорта. В нашем случае на устройствах используется один профиль AWG v3 с защитой заголовков. При подключении очередного устройства этот профиль нужно импортировать, а не генерировать заново.
У проекта есть клиенты и инструкции для разных платформ. Это неофициальная сборка Tailscale, поэтому обычный клиент из магазина и сборка с AWG — разные вещи. У iOS есть отдельные ограничения установки, описанные в репозитории; обещать одинаковые три нажатия на любой платформе было бы слишком оптимистично.
На чём проверяли
На момент настройки, 30 октября 2026 года:
| Компонент | Версия или роль |
|---|---|
| Роутер | GL.iNet Flint 2, GL-MT6000 |
| Прошивка | GL.iNet 4.9.1-op25, OpenWrt 25.12.5 |
| Архитектура | aarch64_cortex-a53 |
| Пакетный менеджер | apk |
| Tailscale AWG на Flint и Windows | 1.104.4 |
| Выход для списков Podkop | Уже работающий интерфейс awg31 |
Начальная настройка AWG3 и Podkop описана в предыдущей статье и репозитории установщика. Если у вас китайская версия Flint, про регион есть отдельная заметка; смена региона сама по себе частью установки Tailscale не является.
Ниже — разбор работающей конфигурации и найденных проблем. Набор команд без проверки версии прошивки, текущих правил firewall и резервной копии не превращается в универсальный установщик.
Штатная интеграция GL.iNet решила помочь
На роутере уже были компоненты Tailscale от GL.iNet. Просто заменить исполняемый файл оказалось недостаточно: штатная интеграция управляла сервисом, DNS и маршрутами. Получалось два хозяина у одних настроек.
Мы сохранили резервную копию и убрали конфликтующие компоненты интеграции GL.iNet. Сервисом теперь управляет пакет форка. Сам tailscaled запускается через OpenWrt procd.
На Flint отключены принятие чужих subnet routes и управление системным DNS со стороны Tailscale. Firewall настроен через OpenWrt fw4, поэтому у Tailscale стоит --netfilter-mode=off.
Последний флаг имеет смысл только вместе с собственными рабочими правилами. Он передаёт настройку firewall нам; интернет и доступ к подсетям от одного этого флага не появятся.
Устройство в списке — ещё не доступ к файлам
Сначала подключили компьютер и Flint к одному аккаунту. Затем телефон тоже появился в Tailscale, но панели с него не открывались.
Причина была скучной и потому особенно убедительной: firewall Flint разрешал доступ только с Tailscale-адреса компьютера. У телефона другой 100.x.x.x. У Samba и Transmission при этом нашлись собственные списки разрешённых клиентов.
Здесь три разных уровня:
- Устройство зарегистрировано в Tailscale и допущено политикой этой сети.
- Firewall Flint разрешает нужное соединение.
- Приложение принимает клиента и проверяет свой логин с паролем.
Зелёная точка в Tailscale не ставит галочки во всех трёх местах. Она вообще на удивление мало занимается Samba.
Поэтому сделали отдельную страницу LuCI → Services → Trusted devices. В ней у устройства есть название, Tailscale IPv4 и переключатель доверия. Один список обновляет общий набор адресов firewall, доступ к интернету через Podkop, обеим подсетям, панелям, Samba и Transmission.
Исходники страницы, службу применения настроек, установщик и описание граблей вынес в отдельный проект openwrt-trusted-page-settings. Это наша доработка LuCI, а не штатная страница OpenWrt или функция установщика Tailscale. На чистой прошивке такого пункта меню не будет: установка и требования к уже настроенному роутеру описаны в README проекта.
Проверка формы принимает только отдельные IPv4 из 100.64.0.0/10, отклоняет повторы и не позволяет случайно вписать целую подсеть. Пароли приложений остаются обязательными. Отключение или удаление строки отзывает доступ, пустой список закрывает его всем устройствам Tailscale. Локальный доступ со стороны LAN сохраняется.
Во время проверки обнаружилась ещё одна грабля: обычный fw4 reload на этой системе сохранял прежние элементы набора адресов. В конфиге компьютер уже удалён, а в работающем firewall всё ещё доверенный. Исправили явной заменой содержимого только нашего набора в одной транзакции nft. Для удалённых устройств также очищаются соответствующие соединения conntrack. Проверили настоящим запросом: выключили доверие компьютеру — доступ исчез; вернули — панели снова открылись.
Exit node и две домашние сети
У Flint здесь две роли. Subnet router открывает домашние подсети. Exit node принимает интернет-трафик клиента. Это разные настройки, хотя физически выполняет их одна коробка.
На роутере объявили:
tailscale set --advertise-exit-node=true \
--advertise-routes=192.168.1.0/24,192.168.8.0/24
Затем в админке Tailscale, у устройства Flint, открыли Edit route settings и одобрили обе подсети и Use as exit node. После этого на телефоне выбрали Exit node → flint2. Объявить маршруты командой и разрешить их в панели — два отдельных действия.
Дальше понадобились правила пересылки и NAT. Основная сеть находится со стороны WAN Flint, поэтому в неё работает существующий masquerade WAN. Для сети 192.168.8.0/24 добавили отдельный SNAT: домашние устройства отвечают самому Flint, им не нужны ручные маршруты к каждому Tailscale-клиенту.
Кнопка Allow LAN access в клиенте относится к локальной сети, к которой клиент подключён сейчас. Доступ к домашним подсетям через Flint задаётся опубликованными маршрутами. На большинстве клиентских платформ маршруты принимаются автоматически; на Linux обычно требуется:
sudo tailscale set --accept-routes=true
Подробности есть в документации про subnet routers и exit nodes.
На нашем основном Windows-компьютере принятие чужих маршрутов намеренно выключили: он и так находится дома. Новый удалённый компьютер должен принимать их, если нужен доступ к обеим сетям. Если текущая сеть клиента использует те же адреса, что и домашняя, отдельно проверяйте, куда фактически уходит маршрут.
Почему открылся домашний роутер, но не сам Flint
С телефона заработали сайт, YouTube и 192.168.1.1. А 192.168.8.1:8080 продолжал делать вид, что никакого роутера здесь нет.
Пакет к другому устройству домашней сети проходит через цепочку forward. Пакет к собственному адресу Flint попадает в input. Пересылку мы разрешили, а вход к панелям — только на Tailscale-адрес Flint.
Добавили в правило доступа к сервисам ещё два адреса самого роутера: LAN 192.168.8.1 и его адрес в основной сети. После этого LuCI заработал и по локальному адресу. Разрешение подсети не равно разрешению всех панелей маршрутизатора внутри этой подсети.
Главная грабля: DNS и Podkop
Чтобы Podkop видел телефон, в список обрабатываемых интерфейсов добавили tailscale0, сохранив br-lan. Но этого недостаточно для доменных списков.
В нашей конфигурации Podkop использует fake IP. Для выбранного домена DNS возвращает специальный адрес из 198.18.0.0/15, а дальше трафик подхватывает sing-box. Если телефон получает ответ от другого DNS, доменная часть этой схемы может не сработать.
По умолчанию клиент с exit node использует DNS этого exit node — это описано в документации Tailscale. На Flint системный resolver смотрел на основной домашний роутер. Интернет работал, но DNS мог пройти мимо Podkop. Получилась бы особенно неприятная поломка: всё подключено, сайты открываются, а нужное правило не применяется.
Не стали менять DNS всей системы. Только для процесса tailscaled сделали отдельное пространство монтирования, где его /etc/resolv.conf содержит:
nameserver 127.0.0.1
Получилась цепочка:
Client DNS -> Tailscale exit-node DNS proxy
-> dnsmasq on Flint
-> Podkop / sing-box
Для этого понадобились unshare и небольшая обёртка запуска сервиса. Остальные процессы роутера продолжают видеть свой прежний resolver. Сам dnsmasq не пришлось открывать для всех удалённых VPN-клиентов; его ограничение localservice мы сохранили.
Проверяли именно DNS-прокси exit node: youtube.com вернул fake IP, обычный контрольный домен — реальные адреса. А затем уже открыли YouTube с телефона через мобильный интернет.
Здесь нашлись ещё две мелочи. Перезапуск Podkop затронул системный resolver через перезапуск dnsmasq — исходное содержимое восстановили и проверили отдельно. А при проверке пространства монтирования путь через /proc/PID/root/etc/resolv.conf оказался обманчивым из-за абсолютной символической ссылки. Смотреть пришлось на фактический файл /proc/PID/root/tmp/resolv.conf.
Если приложение использует собственный защищённый DNS, доменная маршрутизация тоже требует отдельной проверки. И обёртку запуска нужно сохранять при обновлении пакета Tailscale: замена init-скрипта способна убрать эту часть интеграции.
Windows, на котором уже есть Amnezia
На компьютере параллельно работала обычная Amnezia. В результате Tailscale сначала упёрся в ошибки доступа к сети и конфликтующие маршруты.
В исключения Amnezia добавили 100.64.0.0/10, чтобы адреса устройств Tailscale не отправлялись в старый VPN, и переподключили его. После этого доступ заработал.
Для разделения транспорта предусмотрели также исключение приложения:
C:\Program Files\Tailscale\tailscaled.exe
Проверять нужно фактический результат. В нашем случае исключение адресов подтвердилось, а наличие процесса в сохранённом списке исключений при последней проверке не подтвердилось. Поэтому утверждать, что внешний транспорт Tailscale на компьютере гарантированно идёт мимо Amnezia, нельзя. Для проверки телефона использовали мобильную сеть, где этой комбинации двух Windows-клиентов нет.
Samba и Transmission тоже приготовили задания
Samba сначала не захотела слушать Tailscale-интерфейс с адресом /32 при bind interfaces only = yes. Похожее поведение описано в issue Tailscale. В установленной версии помогло отключить жёсткую привязку к интерфейсам и ограничить доступ через hosts allow, hosts deny и firewall.
Это не означает открыть SMB в интернет. Со стороны Tailscale допускаются только адреса из нашего списка, со стороны LAN остаётся локальный доступ. Порт SMB на публичный WAN ради этого не открывали.
У Transmission отдельно проверяются IP клиента и HTTP Host. Нужно обновлять соответствующие разрешения, а не только открыть порт 9091. В этой сборке есть ещё OpenWrt jail: settings.json примонтирован в него как отдельный файл только для чтения.
Обычный sed -i создаёт новый файл с новым inode. Снаружи настройки уже изменены, а работающий процесс всё ещё смотрит на старый файл в своём монтировании. Поэтому новые данные записываются в существующий файл с сохранением inode, после чего процесс получает SIGHUP. Сам способ перечитывания конфигурации описан у Transmission.
Теперь оба приложения получают разрешённые IP из страницы Trusted devices. Отдельно править их списки при каждом новом телефоне больше не требуется.
Старый вход через AWG закрыли
Раньше к ресурсам Flint можно было подключаться через внутреннюю сеть обычного сервера Amnezia. После перехода на Tailscale этот путь убрали.
На Flint удалены разрешения на вход через старый AWG, его сеть исключена из списков Samba и Transmission. Дополнительные правила блокируют инициированные с той стороны соединения, сохраняя ответный трафик для исходящих запросов роутера.
Сам awg31 продолжает работать для Podkop. Конфигурации AWG, Podkop, сети и DHCP сверили с резервной копией: закрытие доступа к файлам не должно ломать уже настроенный выход к YouTube.
Как теперь добавить устройство
- Установить совместимый Tailscale-клиент с AWG и применить тот же профиль транспорта.
- Войти в свою сеть Tailscale и узнать адрес нового устройства
100.x.x.x. - На Flint открыть Services → Trusted devices, добавить название и адрес, нажать Save & Apply.
- Убедиться, что страница показывает успешное применение списка.
- На клиенте выбрать Exit node → flint2 и включить принятие маршрутов подсетей, если это требуется его настройками.
Маршруты Flint уже одобрены. Повторять их объявление для каждого клиента не нужно. Если политика доступа в админке Tailscale ограничительная, она тоже должна разрешать устройству домашние сети и использование exit node; локальная таблица Flint её не отменяет.
Чтобы отозвать доступ на Flint, достаточно выключить доверие или удалить строку. Если устройство потеряно, его дополнительно удаляют или блокируют в самой админке Tailscale. И удалять устройство, с которого прямо сейчас настраиваешь роутер, удобнее при наличии доступа через LAN.
Что сохранить на будущее
Сделали резервные копии настроек до изменений. На Windows отключили автоматическую установку официальной сборки поверх AWG-форка, на OpenWrt зафиксировали версию пакета. Это защита от неожиданной подмены исполняемых файлов, а не предложение никогда больше не обновляться: обновления дальше проверяются и ставятся осознанно.
При восстановлении роутера нужны не только профиль AWG и конфиг Tailscale, но и правила firewall, источник трафика tailscale0 в Podkop, DNS-обёртка и модуль доверенных устройств. Пользовательские файлы модуля добавлены в список сохранения при sysupgrade; совместимость после смены прошивки всё равно нужно проверять. Состояние одного Tailscale-узла не копируют на другой компьютер — каждый регистрируется самостоятельно.
Также стоит помнить о сроке действия ключа устройства в Tailscale. На момент настройки он у Flint оставался включён: вечную авторизацию мы ему не выдавали.
В результате телефон получает домашние файлы, панели и привычные правила Podkop одним подключением.
tags: glinet - flint2 - openwrt - tailscale - amneziawg - podkop - nas