Na Wifi zařízení jsem si dal poměrně vysoké nároky:
- zařízení musí splňovat WiFi 6 (aspoň 802.11ax)
- cena by měla být kolem 2000 Kč
- zařízení musí mít Gigabit LAN
- zařízení musí umět „roaming“ mezi stanicemi, tedy ideálně 802.11r
Po řadě nezdarů jsem nalezl zařízení Xiaomi Mi AloT Router AX3600. Na první pohled poměrně rozměrné zařízení s čínským firmware, v kterém výrobce při nastavení pro AP WiFi dovolí jen změnu SSID a nedovolí dokonce ani nastavení IP.
Na druhou stranu se v dokumentaci lze dočíst, že v zařízení tiká poměrně silný procesor Qualcomm Atheros IPQ8071A na frekvenci 1.4 GHz s operační pamětí 512 Mib a flash 256 MiB. Zařízení má nejen 2,4GHz WiFi se standarty b/g/n, sekunduje 5GHz se standardem ax a zařízení má navíc jeden samostatný modul WiFi, který sice nemá MIMO, ale je určen primárně pro připojení IoT věciček a dá se nastavit na 2,4GHz v n nebo 5GHz v ac. Nejdůležitějším pro mě však v dokumentaci byla informace, že výrobce pro zařízení převzal a kompletně upravil distribuci OpenWrt, takže by to šlo upravit ????.
1. Koupě zařízení
Cena zařízení se dnes (červen 2022) dle cenových vyhledávačů pohybuje mezi 2100 až 2200 Kč. Já jsem zařízení zakoupil u Alza.cz .
2. Příprava firmware
O zařízení je hezký přehledný popis snávodem na oficiálních stránkách OpenWrt. Nicméně i přesto bych se pokusil zde popsat postup, který se mi osvědčil.
Zařízení má stále ještě „experimentální“ podporu. Existuje několik repozitářů s připraveným kódem k překladu – např.: robimarko nebo Boos4721.
Osobně se mi zatím více dařilo s repozitářem od Boos4721.
Pro sestavení bude potřeba nějaký počítač s Linuxem. Osobně jsem si na počítači vytvořil virtuální Ubuntu.
Nekompilujte jako root (nedoporučuje se to). Dále jsem se inspiroval dle návodu přímo na repozitáři.
Klasicky klonujeme repozitár:
git clone https://github.com/Boos4721/openwrt.git
Před kompilací je dobré aktualizovat celý systém:
sudo apt update; sudo apt upgrade -y
… a rovněž je dobré doplnit si doporučené balíčky (pro jednotivé distribuce k nahlédnutí zde):
sudo apt -y install build-essential gawk gcc-multilib flex git gettext libncurses5-dev libssl-dev python3-distutils zlib1g-dev
sudo apt -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3 python2.7 unzip zlib1g-dev lib32gcc-s1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler g++-multilib antlr3 gperf wget curl swig rsync
Dále pak série aktualizačních příkazů pro balíček firmware:
./scripts/feeds update -a
./scripts/feeds install -a -f
make menuconfig
Překontrolovat zda je v Target System (Qualcomm Atheros IPQ807x), Subtarget (Generic), Target Profile (Xiaomi AX3600)
Doporučuji zapnout si zapnout překlad GUI routeru v češtině, tedy v LuCI -> Modules -> Translations -> Czech (jsem změnil mezerníkem) na (*) – zkompilovat přímo.
Dále pak stažení dodatečných knihoven:
make -j8 download V=s
A konečně finální kompilace (velmi časově náročná … osobně mi to trvalo několik hodin ):
make -j1 V=s
Když se vše správně zkompiluje, pak je pro nás důležitý jeden soubor ./openwrt/bin/targets/ipq807x/generic/openwrt-ipq807x-generic-xiaomi_ax3600-squashfs-nand-factory.ubi
To je výsledný firmware, který budeme potřebovat.
3. Přehrátí firmware
Výrobce má standartně firmware zamčený proti úpravám, ale existuje postup, jak toto obejít.
Jelikož má zařízení firmware „2krát“, postup je následující: 1) získání přístupu k SSH, 2) nahrání firmware a přeflashování první části, 3)přepnutí na přeflashovaný firmware, 4) restart zařízení, 5)opětovné nahrání souboru firmware, 6) přeflashování druhé části paměti zařízení, 7) finální konfigurace.
Nejdříve je nuté přejít na starší čínský firmware 1.0.17.
Xiaomi AX3600 1.0.17
Stačí se přihlásit do routeru a „aktualizovat“ na tuto starší verzi. Po restartu nás čeká první nepříjemné nastavování, protože je nutné router prvotně nastavit, abychom se dostali do administrátorské části, ale celé je to v čínštině.
V posledním kroku je u Wi-Fi nutné nastavit heslo, které pak použijeme pro přístup do administrace.
Nyní už nic nebrání v tom, abychom se podívali do administračních stránek routeru.
Nyní je potřeba zpřístupnit SSH. Osobně se mi nejvíce zalíbilo zapnutí pomocí vloženého Javaskriptu do stránek, tedy …
… přihlásíme se do administračních stránek, vyvoláme režim vývojáře (pro Chrome -> pravý stisk myši a Prozkoumat). Nahoře vybereme Prozkoumat a dole vložíme text skriptu (viz stránky OpenWRT):
function getSTOK() {
let match = location.href.match(/;stok=(.*?)\//);
if (!match) {
return null;
}
return match[1];
}
function execute(stok, command) {
command = encodeURIComponent(command);
let path = `/cgi-bin/luci/;stok=${stok}/api/misystem/set_config_iotdev?bssid=SteelyWing&user_id=SteelyWing&ssid=-h%0A${command}%0A`;
console.log(path);
return fetch(new Request(location.origin + path));
}
function enableSSH() {
stok = getSTOK();
if (!stok) {
console.error('stok not found in URL');
return;
}
console.log(`stok = "${stok}"`);
password = prompt('Input new SSH password');
if (!password) {
console.error('You must input password');
return;
}
execute(stok,
`
nvram set ssh_en=1
nvram commit
sed -i 's/channel=.*/channel=\\"debug\\"/g' /etc/init.d/dropbear
/etc/init.d/dropbear start
`
)
.then((response) => response.text())
.then((text) => console.log(text));
console.log('New SSH password: ' + password);
execute(stok, `echo -e "${password}\\n${password}" | passwd root`)
.then((response) => response.text())
.then((text) => console.log(text));
}
enableSSH();
Pokud vše proběhne jak má, pak se na stránce objeví výzvy k zadání hesla pro SSH. Vyplnit a zapamatovat. SSH se rozběhne po pár okamžicích a můžeme postoupit k nahrání našeho zkompilovaného firmware.
Připojíme se přes SSH a nahrajeme předem zkompilovaný firmware openwrt-ipq807x-generic-xiaomi_ax3600-squashfs-nand-factory.ubi do adresáře /tmp na router. (osobně používám WinSCP)
Nyní se připojíme přes SSH na terminál routeru s přihlašovacím jménem root a heslem nastaveným v předchozím kroku. Jelikož má router firmware 2krát je potřeba zjisit, z které části teď právě běží. To zjistíme příkazem:
nvram get flag_boot_rootfs
Pokud je odpovědí 0, pak je aktivní oddíl firmware mtd12 a my musíme zapsat nový firmware do mtd13 a přenastavit v následujícím kroku startovací oddíl na mtd13. (možnost a)
ubiformat /dev/mtd13 -f /tmp/openwrt-ipq807x-generic-xiaomi_ax3600-squashfs-nand-factory.ubi -s 2048 -O 2048
nvram set flag_last_success=0
nvram set flag_boot_rootfs=0
nvram commit
reboot
Pokud je odpovědí 1, pak je aktivní oddíl firmware mtd13 a my musíme zapsat nový firmware do mtd12 a přenastavit v následujícím kroku startovací oddíl na mtd12. (možnost b)
ubiformat /dev/mtd12 -f /tmp/openwrt-ipq807x-generic-xiaomi_ax3600-squashfs-nand-factory.ubi -s 2048 -O 2048
nvram set flag_last_success=1
nvram set flag_boot_rootfs=1
nvram commit
reboot
Po restartu znovu nahrajeme předem zkompilovaný firmware openwrt-ipq807x-generic-xiaomi_ax3600-squashfs-nand-factory.ubi do adresáře /tmp na router. Tentokrát již však díky distibuci je přihlašovací jméno root a heslo boos.
Pokud jsme v předchozím kroku měli možnost a, pak:
ubiformat /dev/mtd12 -f /tmp/openwrt-ipq807x-generic-xiaomi_ax3600-squashfs-nand-factory.ubi -s 2048 -O 2048
Pokud jsme v předchozím kroku měli možnost b, pak:
ubiformat /dev/mtd13 -f /tmp/openwrt-ipq807x-generic-xiaomi_ax3600-squashfs-nand-factory.ubi -s 2048 -O 2048
Nyní je router celý jen pro naše OpenWRT.
Na závěr doporučuji všem, aby si firmware zkompilovali podle sebe, ale pokud by přece jen někdo chtěl, pak mohu poskytnout můj pokus… (doplněno) … ano, zde byl můj pokus, ale už i já jsem podlehl lenivosti a používám balíčky připravené od autorů úprav OpenWrt.
Doporučil bych:
- repozitář uživatele robimarko … https://github.com/robimarko/openwrt/releases/tag/ipq807x-2022-09-02-1951
Jedná se o čistý OpenWRT se základními funkcemi … osobně mi vyhovuje. - repozitář uživatele ipq807x-openwrt-builder … https://github.com/ns2switch/ipq807x-openwrt-builder/releases/tag/ipq807x-latest%40v5.5
Jedná se o OpenWRT s funkční (testoval jsem a funguje) podporou pro WireGuard.
Co dělat v případě, že se router v rámci nahrávání blokne (Debricking) ?
Pokud by se stalo něco nepředvídatelného a router by přestal komunikovat, stále je možné se vrátit na originální čínský firmware, ale cesta je trochu složitější. Musí se na počítači vytvořit TFTP server na předem dané adrese s přesně danou cestou k souboru, který si router naflashuje automaticky do sebe.
Pro zjednodušení jsem připravil balíček TFTP serveru, který v dané adresářové struktuře pustíte na PC. Na PC je dále nutní nastavit ip adresu staticky na 192.168.31.100.
TFTP záchrana AX3600
Po spuštění TFTP serveru doporučuji na dopu záchrany vypnout firewall a vypnout router z napájení a zapínat ho se stištěným tlačítkem reset do doby než zabliká dioda routeru. Pak by měl router naběhnout v nouzovém režimu, sám získat adresu a natáhnout čínský originální firmware a restartovat se. Pokud ještě budete mít chuť, můžete se pokusit o další pokus nahrání firmware… Hodně štěstí ????.
Ahoj, diky za clanek. Jak si po delsi dobe spokojeny s routerem?
Ano, zatím jsem s routery velmi spokojen. Po dlouhé době si doma nikdo nestěžuje, že mu nejde internet.
Nutno přiznat, že zařízení nepoužívám jako router, ale jen jako WIFI AP uvnitř sítě. Aktivně jich používám 5.
Musím přiznat, že jedno zařízení jsem již reklamoval, ale byla tam chyba již z výroby na 5GHz – reklamace obratem.
Zařízení jsem chvíli provozoval na oficiálním FW, ale to bylo hrozné. V režimu „jen AP bez routeru“ se tam nedala nastavit ani IP adresa.
První verze OpenWrt firmware měla chybu a občas to člověka ze zařízení odpojilo(„internet nedostupný“).
Nyní se zdá, že vše funguje jak má. Testoval jsem i 802.11r a Vodafone hovor přes WIFI zvládnul přepnutí mezí APčky bez rozpojení.