Воспроизводимая сборка стабильного upstream OpenWrt для GL.iNet Flint 2 (GL-MT6000, MT7986 / Filogic 830). Образ сохраняет штатный GL.iNet bootloader и OEM recovery, не содержит учётных данных и рассчитан на домашний роутер: полный LuCI на русском языке, WireGuard, AmneziaWG, Podkop, full sing-box, firewall4/nftables, IPv6, PPPoE и штатный Wi-Fi/Ethernet стек OpenWrt.
| Поле | Значение |
|---|---|
| устройство | glinet_gl-mt6000 |
| target/subtarget | mediatek/filogic |
| архитектура | aarch64_cortex-a53 |
| SoC | MediaTek MT7986 / Filogic 830 |
Это не GL.iNet SDK и не штатная прошивка GL.iNet с заменённым UI. Базой служит
официальный device recipe OpenWrt, поэтому используются только её
factory.bin и sysupgrade.bin для GL-MT6000.
| Компонент | Зафиксированная версия |
|---|---|
| OpenWrt | v25.12.5, f0a60eee2fe051741c643ea6118718aae1ef17fb |
| kernel | 6.12.94 |
| AmneziaWG feed | 98b9eaf21f43c1cc54104072f2dce5c9c847f801 |
| Podkop | 0.7.22, c0a2736bb95884c19fedf638345ed6148c5fd6af |
| sing-box | upstream package 1.12.17 |
Полный список immutable revisions — в scripts/versions.env.
В образ добавлены LuCI, HTTPS, русский язык, dnsmasq-full, PPPoE, DSA/VLAN,
IPv6, WPA2/WPA3, WireGuard, AmneziaWG 2.x, Podkop и его LuCI, full sing-box,
kmod-nft-tproxy, диагностика и QoS/SQM. Конфликтующие с Podkop пакеты
https-dns-proxy, nextdns, Passwall и Passwall2 не включены.
pesa1234/openwrt и связанные mt76/LuCI деревья были исследованы. Их
релевантная ветка основана на kernel 4.9 и не совместима с OpenWrt 25.12 /
kernel 6.12. Поэтому Wi-Fi, mac80211, firmware, Ethernet и kernel ABI берутся
из одного upstream tree; непроверенные WED/PPE/RSS/256-QAM/iBF/EDCCA изменения
не переносятся. Это сознательный выбор стабильности и корректной policy
routing. Обоснование и оба минимальных compatibility patch — в
docs/HARDWARE_STACK.md.
Соответствие собственного VPN Dashboard пользовательским сценариям GL.iNet и
осознанные границы без GL SDK описаны в
docs/VPN_DASHBOARD_COMPARISON.md.
Аппаратный offload не включается принудительно. При Podkop/TProxy/VPN policy routing он может обходить правила. Сначала проверьте selective routing, затем при необходимости тестируйте software/hardware flow offload отдельно; при ошибках отключите offload и очистите conntrack.
В PowerShell из корня репозитория:
.\build-docker.ps1Исходники OpenWrt и кэш находятся в named Docker volume, а не в OneDrive/NTFS.
Для другого числа потоков: .\build-docker.ps1 -Jobs 12.
Поддерживаемая воспроизводимая среда — Dockerfile проекта:
docker build --tag flint2-openwrt-builder:25.12.5 .
docker run --rm --user builder \
--mount type=bind,src="$PWD",dst=/workspace \
flint2-openwrt-builder:25.12.5 ./build.shbuild.sh фиксирует OpenWrt и feeds, применяет строго два compatibility patch,
вызывает make defconfig, загружает исходники, собирает image и выполняет
проверку. Он прекращает работу при несовпадении pin или непригодности patch.
Virtual target отделён от production: он собирает OpenWrt x86_64 с тем же
VPN userspace, но не является прошивкой Flint 2 и не должен публиковаться или
прошиваться на GL-MT6000. Он нужен для проверки LuCI, Dashboard, firewall4,
Podkop и target-совместимого kmod-amneziawg без доступа к физическому
роутеру.
В Windows PowerShell:
.\build-vm.ps1
.\test-vm.ps1Первая команда создаёт артефакты только в artifacts/vm/; вторая запускает
полный QEMU-набор: базовый runtime/reboot, внешний AmneziaWG outbound,
сравнение Same as LAN / Podkop и изолированное создание/восстановление
резервной копии через штатные sysupgrade -b/sysupgrade -r. Итоги каждого
сценария и общий summary с JUnit сохраняются в
artifacts/test-results/<UTC timestamp>/. Для быстрого
только базового smoke-теста используйте ./test-vm.ps1 -Suite runtime. QEMU
набор не касается
GL-MT6000, GitHub Actions и опубликованных release assets.
Workflow хранится в репозитории и умеет workflow_dispatch, push и pull
request, однако в GitHub он сейчас вручную отключён по решению владельца
репозитория. Локальная сборка остаётся основной проверкой до фактической
прошивки.
После сборки каталог artifacts/ содержит:
*-sysupgrade.bin— обновление с совместимого OpenWrt;*-factory.bin— первоначальная установка через совместимый U-Boot recovery;packages.manifestиopenwrt-sha256sumsиз upstream;config.buildinfo,feeds.buildinfo,version.buildinfo,BUILD_INFO.txt;SBOM.spdxв формате SPDX 2.3 для всех пакетов образа;SHA256SUMSдля всех собранных артефактов.
BUILD_INFO.txt содержит неизменяемые commit OpenWrt, AWG, Podkop и pesa, а
также фактические версии mt76/mac80211, MT7986 firmware и sing-box из манифеста
собранного образа.
В /etc/apk/repositories.d/distfeeds.list встроены официальные HTTPS-репозитории
закреплённого OpenWrt release для mediatek/filogic и aarch64_cortex-a53:
target/kmod, base, luci, packages, routing, telephony и video.
Дополнительно включены три удалённых HTTPS feed’а этого проекта для
kmod-amneziawg, AWG и Podkop. Они публикуются как assets GitHub Release и
подписываются P-256 ключом; в образе хранится только публичный ключ
/etc/apk/keys/flint2-custom-repository.pem.
Не выполняйте массовый apk upgrade: обновляйте только конкретный совместимый
пакет либо переходите на новый целостный sysupgrade. Для выпуска обновлённого
custom feed из Windows PowerShell используйте ./scripts/publish-apk-repository.ps1
после успешной локальной сборки.
Проверка перед прошивкой:
cd artifacts
sha256sum -c SHA256SUMSИспользуйте только файл, в имени которого есть gl-mt6000.
С сохранённого upstream OpenWrt используйте LuCI System → Backup / Flash
Firmware и *-sysupgrade.bin. При первом переходе с GL.iNet используйте
только соответствующий *-factory.bin из этой сборки и не сохраняйте старые
конфигурации GL.iNet.
Перед прошивкой сохраните backup UCI. Не прошивайте вручную preloader, U-Boot, BL31, FIP, таблицу разделов или factory/calibration partitions: проект их не меняет и они не нужны для обычного обновления.
После старта подключитесь к LAN и откройте http://192.168.1.1/. Немедленно
задайте пароль root, выберите страну Wi-Fi и убедитесь, что в LuCI доступен
русский язык. Для HTTPS используйте LuCI после установки пароля; пакет
luci-ssl-openssl встроен.
- Wi-Fi: Network → Wireless. Выберите свою страну, WPA2/WPA3-SAE и не форсируйте 160 MHz или DFS-канал до проверки клиентов.
- PPPoE: Network → Interfaces → Add new interface → PPPoE. Логин и пароль вводятся только в LuCI и не должны попадать в Git.
- VLAN/DSA: создавайте bridge VLAN filtering, tagged/untagged ports и PVID в Network → Devices. Это DSA, не старый swconfig.
- IPv6: не удалён; стандартные RA/DHCPv6 настраиваются в Network → Interfaces и Network → DHCP and DNS.
Оба протокола доступны в Network → Interfaces → Add new interface.
- Для WireGuard выберите WireGuard VPN.
- Для AmneziaWG выберите AmneziaWG и заполните ключи, endpoint, peer и параметры AWG 2.x в LuCI.
kmod-amneziawg собран в том же buildroot с kernel 6.12.94; готовые сторонние
APK, --force-depends и ручная подмена vermagic не используются. Приватные
ключи не хранятся в репозитории.
В LuCI Podkop пользователь может включить сервис, выбрать outbound/interface, добавить домены, IP и subnet lists и перезапустить сервис. Базовый сценарий:
- Проверьте свой публичный IP при DIRECT-подключении.
- Создайте и поднимите AmneziaWG interface в LuCI.
- Проверьте, что туннель действительно работает отдельно от Podkop.
- В Podkop выберите этот interface как outbound и добавьте тестовый домен.
- Убедитесь, что он идёт через туннель, а иной ресурс остаётся DIRECT.
- Проверьте DNS leak и повторите тест после reboot.
Не создавайте фиктивный VPN interface: ключи и endpoint вводит владелец роутера. Podkop использует штатные firewall4/nftables/TProxy/sing-box rules.
Для удалённых клиентов используйте VPN → AmneziaWG Server, а не клиентский
outbound tunnel awg-out. Страница создаёт отдельный awg_server netifd
интерфейс, отдельную firewall4 zone и открывает на WAN только заданный UDP-порт.
По умолчанию сеть сервера — 10.77.0.1/24, изоляция peer’ов включена, DNS
удалённых клиентов направлен на Flint 2.
В поле Traffic policy оставьте рекомендуемое значение Same as LAN /
Podkop: после поднятия интерфейса его фактический L3 device определяется
через ubus и добавляется в source_network_interfaces Podkop. Поэтому трафик
удалённого клиента проходит через тот же policy engine, что и LAN/Wi-Fi, без
жёстко заданного имени Linux device.
В VPN → AmneziaWG Server → Remote clients можно создать peer, получить
однократно показанный .conf, скачать его или отсканировать QR-код. Секреты
каждого клиента хранятся на роутере отдельно от UCI с правами 0600; status
API и Dashboard показывают только public key, handshake, RX/TX и состояние.
Каталог secret-файлов включён в стандартный sysupgrade backup через
/lib/upgrade/keep.d/vpn-dashboard.
После добавления host key роутера выполните с доверенного Linux-хоста:
./scripts/hardware-test.sh root@192.168.1.1Скрипт проверяет package presence, modprobe amneziawg, временный интерфейс
AWG, LuCI menu/переводы, Podkop, sing-box, nftables, firewall4, Wi-Fi и
interrupt diagnostics. Он не изменяет VPN-конфигурацию.
На самом роутере доступна команда:
flint2-infoОна выводит версию OpenWrt и kernel, фактические версии mt76, Wi-Fi firmware, mac80211, wpad, AmneziaWG, Podkop и sing-box, а также наблюдаемые состояния WED/PPE и UCI-настроек software/hardware flow offload. Отсутствие загруженного модуля не является доказательством выключенной встроенной функции, поэтому состояние WED/PPE всё равно подтверждайте на реальном устройстве.
Для производительности измеряйте отдельно iperf3 LAN→LAN, Wi-Fi→LAN и 2.5GbE
в одном режиме за раз. Для проверки WED/offload, DFS, EEE/autonegotiation и
2.5GbE link flap необходим физический GL-MT6000 и реальная сеть.
LuCI backup сохраняет UCI конфигурации (network, wireless, firewall,
dhcp, podkop, AmneziaWG). Перед sysupgrade создайте архив и не ожидайте,
что сторонние APK после перехода между релизами будут сохранены автоматически.
Если LuCI или DHCP недоступны, подключитесь Ethernet-кабелем и используйте штатный U-Boot Web Recovery GL.iNet:
- Выключите роутер и подключите ПК только к LAN 2, LAN 3 или LAN 4; LAN 1 для GL-MT6000 использовать нельзя.
- Удерживайте Reset и включите питание. Для Flint 2 отпустите кнопку после шести синих миганий, когда LED станет белым и постоянным.
- Назначьте ПК
192.168.1.2/24, откройтеhttp://192.168.1.1и загрузите подходящий U-Boot-compatible firmware. - Для возврата к GL.iNet скачайте официальную прошивку именно GL-MT6000 и используйте тот же recovery UI; после успешной загрузки верните IP ПК в DHCP.
Официальная инструкция GL.iNet: U-Boot recovery. Recovery стирает настройки и установленные пакеты. Никогда не используйте консольные erase/write команды для bootloader или calibration data.
Все источники централизованы в scripts/versions.env. При обновлении pin
обязательно заново проверьте device symbol, kernel, feeds, применимость двух
patch, full sing-box, kmod-amneziawg ABI, Podkop/LuCI и результат
./scripts/verify-build.sh.
Статическая проверка и успешная сборка не заменяют реальные тесты Wi-Fi, 2.5GbE, DFS, WED, PPPoE или selective routing на конкретном роутере. Не считайте эти runtime-сценарии подтверждёнными до выполнения hardware-test и сетевого чек-листа выше.