Banana Pi 64 on Raspberry Pi-ga sarnane ühe pardaarvuti, kuid mitme Etherneti pordiga, mis võimaldab muuta selle üldotstarbelisel Linuxi distributsioonil põhinevaks ruuteriks.
Jah, Openwrt on juba olemas, kuid sellel on oma probleemid, selle GUI ja CLI; Mikrotik on olemas, aga sellel on jällegi oma GUI/CLI ja Wireguard ei tööta karbist välja... Üldiselt tahaks paindlike seadistustega ruuterit, jäädes samas standardse Linuxi raamidesse, millega sa töötad iga päevaga.
Artiklis nimede BPI, R64, ühe plaadi all, pean silmas sama asja - Banana Pi R64 ühe plaadi enda.
Pildi valimine. Laadige alla eMMC kaudu
Kõige esimene oskus, millega töötades pead omandama SBC üldiselt ja eriti R64 puhul tähendab see õppimist, kuidas sellesse operatsioonisüsteem laadida ja sellega suhelda, sest R64-l pole monitori porti (näiteks HDMI). Kui kõik ära kukkus - lakkas töötamast Wifi,Ethernet,Bluetooth,USB jne.On olemas UART,mille liidese kaudu on alati näha mis valesti läks ja vajadusel ka paar käsku konsoolist käivitada.
Algoritm R64-ga ühendamiseks USB-UART-i kaudu:
jookseme raadioosade poodi USB-UART-kaabli (PL2303, Serial-to-USB) järele
ühendage üks USB-ots arvutiga ja teine, UART, R64-ga kolme juhtmega neljast, nagu alloleval pildil
käivitada arvutikonsoolis sudo minicom
Pärast seda ilmub enamikul juhtudel ühe tahvli konsool = edu.
Näete rohkem üksikasju siin.
Järgmiseks on lihtsaim viis laadida operatsioonisüsteem SD-kaardilt: laadige alla link pilt ja täitke see:
Sisestame kaardi R64 SD pessa, lülitame selle sisse ja jälgime ühendatud konsooli laadimist esmalt uboot, seejärel tavalist Linuxi laadimist.
Alternatiivne alglaadimisvõimalus on R64-sse juba sisseehitatud 8 GB kaardi kasutamine, mida nimetatakse eMMC-ks. Vastavalt vikis olevatele juhistele kopeerime pildi seadmesse
/dev/mmcblk0 BPI-ks, taaskäivitage, eemaldage SD-kaart, lülitage BPI uuesti sisse ... ja see ei tööta. Kuidas edasi-tagasi minna Boot select ära viitsi.
Fakt on see, et vähemalt BPI jaoks peate sisemiselt mälupulgalt käivitamiseks määrama spetsiaalse lipu:
Tootja R64 (Hiina) postitas selle kahendfaili siin. Mida see teeb, pole teada (lähtekoodid puuduvad), kuid see ei tööta ka ilma selleta.
Üldiselt hakkavad pärast seda pilte eMMC-st laadima. Kui soovite selle selgeks teha ja pilte nullist luua, peate mõlemal juhul (SD/eMMC) kirjutama veel mitu faili (SD-kaardi eellaadija, ATF, u-boot), et jõuda kerneli laadimiseni. See teema on alles areneb, aga meie jaoks on peaasi, et see toimib ja korras.
Nüüd laadin alla eMMC kaudu, ausalt öeldes ma ei kasuta seda, piisab SD-kaardist, kuid kulutasin selle tööle panemiseks üsna palju aega, nii et las see olla artiklis.
Operatsioonisüsteemi valimine. Armbia
Rakenduse esimene ülesanne on käivitada VPN, loomulikult Wireguard. Kohe avastati, et kerneli poolelt oli see kokku panemata ja päised puuduvad. Ehitasin kerneli ümber ja nagu mul x86 puhul kombeks on, panin kerneli mooduli DKMS-i kasutades kokku. Kuid isegi väikeste kommunaalteenuste ehitamise kiirus arm64-le üllatas mind ebameeldivalt. Ja siis oli vaja veel kerneli moodulit jne. Üldiselt selgub, et kõik kerneliga seonduv on kõige parem kokku panna soojale x86 sülearvutile, seejärel lihtsa kopeerimisega R64-le üle kanda, taaskäivitada ja testida.
Teine asi on kasutajaruumi osa. Minu puhul on Debiani valimisel kõik arm64 arhitektuuri jaoks juba saidil packages.debian.org ja pole vaja midagi ümber ehitada.
Et mitte toota teist jalgratast, I teisaldatudArmbia BPI R64 peal.
Õigemini see: kasutajaruumi osa on Armbian ja tuum on võetud hoidlast Avameelne-A. Uusima pildi saab alla laadida siin.
Kogu tegevus R64 tarkvaraosa arendamiseks toimub foorum. Üldiselt püüab tootja ise Openwrt ruuterit populariseerida, kuid tänu Saksamaa arendaja Franki tegevusele jõuavad kõik funktsioonid kiiresti Debiani tuumasse. Üllatuslikult on Frank aktiivne igas foorumi lõimes.
Tööruumi korraldus: juhtmed
Eraldi tahaksin teile rääkida, kuidas asetada arenduse/testimise ajal SBC (mitte ainult BPI) lauale, et mitte juhtida selleni Etherneti kaablit Interneti-allikast kogu ruumis/kontoris. Fakt on see, et ühest küljest peate varustama Internetiga riistvara, kuid teisest küljest võib kõik selles riistvaras rikki minna ja ennekõike Wifi.
Esiteks otsustasin osta odava USB-Wifi vile, ühendada selle BPI ainsasse porti ja unustada juhtmed. Selleks ostsin odava TP-LINK TL-WN725N USB 2.0, kuid üsna pea sai selgeks, et see ei tõuse: selleks, et vile töötaks, on vaja tuumadraiverit, mida seal muidugi polnud. (hiljem panin kokku vajaliku RTL8XXXU draiveri, kuid see on endiselt ebapraktiline ). Ja Etherneti kaabel rikkus korraks ruumi välimust.
Selle tulemusena õnnestus mul Tenda MW3 (Wifi mesh system) abil kaablist lahti saada: asetasin lihtsalt ühe kuubiku laua alla ja ühendasin BPI meetripikkuse Etherneti kaabliga viimase LAN-porti. Edu.
Traatkaitse, RKN, lind
Üks asi, mille jaoks Banana PI-d kasutada tahan, on tasuta juurdepääs RKN-i blokeeritud saitidele, et Telegrami ja Slacki kõned toimiksid. Sellel teemal on juba pakutud artikleid Habré kohta: aeg, два, kolm.
Ma juurutasin Ansible abil täpselt selle lahenduse: link.
Eeldatakse, et VPS töötab Ubuntu 18.04. Kontrollisin kahe Euroopa hosti funktsionaalsust: Amazon ja Digital Ocean.
Niisiis, installisime ülaltoodud Armbiani R64-le, see on nime all ssh kaudu juurdepääsetav hm-bananapi-1 ja sellel on Interneti-ühendus. Juurutame järjekindlalt Ansible automatiseerimisskripte ja käivitame installimise R64-s:
# зависимости для Debian-based дистрибутивов
$ sudo apt install --no-install-recommends python3-pip python3-setuptools python3-wheel git
$ which pip3
/usr/bin/pip3
# ansible с pybook, скриптование на Python
$ pip3 install https://github.com/muravjov/ansible/archive/ansible-2.10.0.dev0-pybook2019.tar.gz
$ export PATH=~/.local/bin:$PATH
$ which ansible-playbook
/home/sa/.local/bin/ansible-playbook
$ git clone https://github.com/muravjov/ansible-bpi-r64.git
$ cd ansible-bpi-r64
$ git submodule update --init
# убеждаемся в доступности hm-bananapi-1
$ ssh hm-bananapi-1 which python3
/usr/bin/python3
# собственно установка
$ ansible-playbook ./router.py -l hm-bananapi-1
Järgmiseks peate meie VPN-i VPS-i juurutama samal viisil:
ansible-playbook ./router.py -l current-vpn
Siin on argument alati current-vpn ja tegelik VPS-i nimi on konfigureeritud muutujas (antud juhul on see paris-vpn-aws-t2-micro-1):
with mapping:
append("name", "start bird")
with mapping("systemd"):
append("name", "bird")
append("state", "started")
append("enabled", "yes")
Ansible käskude kirjutamine Pythonis võimaldab koodi uuesti kasutada ja avab üldiselt kõik üldotstarbelise keele võimalused. Näiteks linnu installimine R64-le ja VPS-ile:
Kokku: telegramm töötab, linkedin ja pornhub ka, üldiselt on kasutuskogemus ok. Kuid kõik võib puruneda, sealhulgas Hiina riistvara.
Kerneli uuendused võivad samuti olla huvitavad: näiteks tahtsin uuendada kerneli 5.4 => 5.6, noh, Wireguard on karbist väljas, pole vaja lappida... Polegi varem öeldud: kandsin plaastrid vaevaga üle 5.4-st 5.6-le, kernel käivitus, VPS-i tunnel pingestati, kuid lind ei saa ühendust luua veaga "BGP Error" ... "Ma veeresin õudusega tagasi" (c) 5.4-le; Üleminek 5.6-le lükati TODO-s edasi.
Seetõttu lisasin lisaks ruuteri ja VPS-i installimisele ka jälgimise (x86 Ubuntu 18.04 puhul), mis on installitud eraldi hostile järgmiste komponentidega:
prometheus, alertmanager, blackbox_exporter – kõik dockeris
Hoiatused saadetakse telegrammi kanalile roboti metalmatze/alertmanager-bot abil – ka Dockeris
tor boti jaoks, et bot saaks hoiatada olukordadest, kui Internet on olemas, kuid Telegram ikka ei tööta ja bot ise ei saa ühendust luua
Prometheuse automaatne avastamine on konfigureeritud kaustas /etc/prometheus/auto_http, mis on näide hosti lisamisest jälgimisse (hoste vaikimisi ei jälgita):
Lisaks kõigele plaanisin ühendada kahe pakkujaga, et internet töötaks edasi ka siis, kui ühel pakkujal oleks võrguga probleeme või unustati interneti eest maksta vms ja muud inimlikud tegurid.
Kirjeldatakse kõige arenenumat kasutajakogemust multi-wani teemal siin Mwan3 süsteemi jaoks Openwrt all. Sellel lahendusel on rikkalik funktsionaalsus, kuid selle seadistamine ja kasutamine üldiselt multi-wani jaoks on üsna tülikas. Üks näide: kui tulete mõnele saidile korraga kahelt IP-aadressilt, ei pruugi see neile meeldida, nad lakkavad töötamast => "Internet ei tööta."
Seda kogemust arvesse võttes otsustasin, et multihoming pole veel prioriteet, vaid ainult tõrkeotsing. Kuigi tundub, et Linuxi uusimates versioonides peaks kõik töötama ühe käsuga, näiteks:
ip route add default
nexthop via 192.168.1.1 weight 10
nexthop via 192.168.2.1 weight 5
Nii et ühe tõrkepunkti vältimiseks võtame 2 BPI-d, ühendame mõlemad ühe pakkujaga, ühendame need üksteisega ja loome üksteisega ühenduse linnu/OSPF-i kaudu dünaamilise marsruutimise teel.
Järgmisena reklaamime igaühel sama IP-aadressi, kui teenus on saadaval (Internet, DNS). See tähendab, et me ei määra vaikemarsruuti ise, vaid läbi linnu. Luurasin lahendust siin .
Seda funktsiooni pole veel juurutatud, salakaval koroonaviirus mängis siin triki (kõik ei jõudnud Aliexpressist; teine veebipood Layta lubas kohale toimetada nädalaga, kuid möödas on üle kuu; teisel pakkujal polnud aega kaabli pikendamiseks enne karantiini, õnnestus ainult kaabli jaoks seina puurida auk).
Kuidas tellida R64
Tahvel ise on ametlikus poes SinoVoip.
Samuti on parem kohe tellida:
Siin on nüanss - tarnehind on ametlikus poes juba mõnda aega ebaadekvaatselt kõrgeks läinud. Mänedžer Judy Huang veenis mind, et viga ei olnud ja ePacketi sai valida 5 dollari eest, kuid ma nägin, et Venemaal on ainult EMS, mille hind on >33 dollarit. Ebameeldiv, kuid mitte kriitiline. Veelgi enam, kui valite kohaletoimetamiseks mõne muu riigi (käisin kõik mandrid läbi), maksab kohaletoimetamine ~5 dollarit. Russofoobid?.. Siis aga leidsin, et Prantsusmaa jaoks on ka kohaletoimetamise hind ~30$ ja rahunesin maha.
Selle tulemusena pakkus Judy, et teeb tellimuse, kuid ei maksa (vihje: pane kaardile vähem, et automaatmakse läbi ei läheks); kirjuta talle ja ta langetab kohaletoimetamise hinna normaalseks. Edu.
Küsimused
Kõik ei tööta veel ideaalselt.
Производительность
Ansible=Pythoni käske täidetakse aeglaselt, isegi tühikäigul olevaid käske 20-30 sekundi jooksul; suurusjärgu võrra pikem kui x86 sülearvutil. Pealegi täidetakse neid alguses üsna kiiresti, ~3 sekundit, siis aeglustuvad järsult. Selle põhjuseks võib olla protsessori kuumenemine (drossel). Go-koodi toimimine võtab samuti kaua aega:
# запрос метрик для прометея из node_exporter на Go
$ time curl -s http://172.30.1.1:9100/metrics > /dev/null
real 0m6,118s
user 0m0,005s
sys 0m0,009s
# однако температура 51 градус, не так и много
sa@bananapir64:~$ cat /sys/devices/virtual/thermal/thermal_zone0/temp
51700
wifi
Wifi töötab, kuid Armbianil peatub umbes päeva pärast, kirjutab: