Banana Pi R64 maršrutizatorius – Debian, Wireguard, RKN
„Banana Pi 64“ yra vienos plokštės kompiuteris, panašus į „Raspberry Pi“, tačiau su keliais eterneto prievadais, todėl jis yra bendrosios paskirties „Linux“ platinimo maršrutizatorius.
Taip, Openwrt jau egzistuoja, bet turi savo GUI ir CLI; yra „Mikrotik“, bet vėlgi jis turi savo GUI / CLI, o „Wireguard“ neveikia... Apskritai aš noriu maršrutizatoriaus su lanksčiais nustatymais, o ne standartinio „Linux“, su kuriuo dirbate, rėmuose. kiekvieną dieną.
Straipsnyje pavadinimais BPI, R64, vienos plokštės, turėsiu omenyje tą patį - pačią Banana Pi R64 vienplokštę.
Vaizdo pasirinkimas. Atsisiųskite per eMMC
Pats pirmasis įgūdis, kurį reikia įgyti dirbant SBC apskritai, o ypač su R64, tai reiškia išmokti įkelti į ją OS ir mokėti su ja bendrauti, nes R64 neturi monitoriaus prievado (pvz., HDMI). Kai viskas atkrito - Wifi nustojo veikti, Ethernet tinklas, Bluetooth, USB ir tt yra UART, per kurio sąsają visada galite pamatyti, kas nutiko, taip pat, jei reikia, paleisti porą komandų iš konsolės.
Prijungimo prie R64 algoritmas per USB-UART:
eikite į radijo dalių parduotuvę, kad gautumėte USB-UART laido (PL2303, serijinis į USB)
vieną USB galą jungiame prie kompiuterio, o kitą, UART, prie R64 trimis iš keturių laidų, kaip paveikslėlyje žemiau
kompiuterio konsolėje sudo minicom
Po to daugeliu atvejų pasirodys vienos plokštės konsolė = sėkmė.
Galite pamatyti daugiau čia.
Tada paprasčiausias būdas yra įkelti operacinę sistemą iš SD kortelės: atsisiųskite iki nuoroda paveikslėlį ir įkelk:
Įdedame kortelę į R64 SD lizdą, įjungiame, pirmiausia stebime uboot įkėlimą prijungtoje konsolėje, tada standartinę Linux įkrovą.
Alternatyvi įkrovos parinktis yra naudoti 64 Gb kortelę, jau įdėtą į R8, vadinamą eMMC. Pagal wiki instrukcijas perrašome vaizdą į įrenginį
/dev/mmcblk0 į BPI, paleiskite iš naujo, išimkite SD kortelę, vėl įjunkite BPI... ir tai neveikia. Kaip ten patekti Boot select nesilaikyk.
Faktas yra tas, kad bent jau BPI turite nustatyti specialią vėliavėlę, kad galėtumėte paleisti iš vidinės „flash drive“:
R64 gamintojas (Kinija) paskelbė šį dvejetainį failą čia. Ką jis daro, nežinoma (nėra šaltinio kodų), bet be jo tai taip pat neveiks.
Paprastai po to vaizdai pradedami įkelti iš eMMC. Jei norite tai išsiaiškinti ir kurti vaizdus nuo nulio, abiem atvejais (SD / eMMC) turite parašyti dar keletą failų (SD kortelės išankstinis įkroviklis, ATF, u-boot), kad patektumėte į branduolį. batas. Ši tema vis dar vystosi, bet mums svarbiausia, kad tai veiktų ir gerai.
Dabar, tiesą sakant, aš nenaudoju eMMC atsisiuntimo, užtenka SD kortelių, bet praleidau gana daug laiko, kad tai veiktų, todėl tebūnie tai straipsnyje.
Operacinės sistemos pasirinkimas. Armbian
Pirmoji programos užduotis yra paleisti VPN, žinoma, „Wireguard“. Iš karto paaiškėjo, kad jis surinktas ne iš branduolio pusės, o antraštės nebuvo. Aš perkūriau branduolį ir iš įpročio naudodamas x86 sukūriau branduolio modulį naudodamas DKMS. Tačiau net mažų komunalinių paslaugų surinkimo greitis ant arm64 mane nemaloniai nustebino. Ir tada reikėjo kito branduolio modulio ir pan. Apskritai paaiškėja, kad viską, kas susiję su branduoliu, geriau surinkti ant šilto vamzdžio x86 nešiojamojo kompiuterio, tada paprastai nukopijuoti perkelti į R64, paleisti iš naujo ir išbandyti.
Kitas dalykas yra vartotojo erdvės dalis. Pasirinkus Debianą, viskas, kas skirta arm64 architektūrai, jau yra packages.debian.org ir nereikia nieko kurti.
Kad nebūtų gaminamas kitas dviratis, I perkeltasArmbianas ant BPI R64.
Arba tiksliau: vartotojo erdvės dalis yra Armbian, o branduolys paimtas iš saugyklos Frankas-A. Naujausią vaizdą galima atsisiųsti čia.
Visa R64 programinės įrangos dalies kūrimo veikla vykdoma forumas. Paprastai kalbant, pats gamintojas siekia išpopuliarinti Openwrt maršrutizatorių, tačiau kūrėjo Frank iš Vokietijos aktyvumo dėka visos funkcijos greitai atsiduria Debian branduolyje. Keista, bet Frankas yra aktyvus kiekvienoje forumo temoje.
Darbo vietos organizavimas: laidai
Atskirai noriu pasakyti, kaip SBC (ne tik BPI) pastatyti ant stalo kūrimo / testavimo metu, kad Ethernet kabelis nenuvestų prie jo iš interneto šaltinio per visą kambarį / biurą. Faktas yra tas, kad, viena vertus, reikia aprūpinti internetą geležies gabale, kita vertus, šiame geležies gabale gali lūžti viskas, o ypač „Wifi“.
Pirmiausia nusprendžiau nusipirkti pigų USB-Wifi „švilpuką“, įkišti jį į vienintelį BPI prievadą ir pamiršti laidus. Norėdami tai padaryti, įsigijau nebrangų TP-LINK TL-WN725N USB 2.0, tačiau labai greitai tapo aišku, kad jis neišsivers: kad švilpukas veiktų, reikėjo branduolio tvarkyklės, kurios, žinoma, nebuvo. (vėliau sukompiliavau reikiamą RTL8XXXU tvarkyklę, bet ji vis tiek nepraktiška ). O eterneto laidas kuriam laikui sugadino kambario vaizdą.
Dėl to laido pavyko atsikratyti Tenda MW3 (Wifi mesh system) pagalba: vieną kubą tiesiog padėjau po stalu, o BPI prie pastarojo LAN prievado prijungiau matuokliu Ethernet laidu. Sėkmė.
Vielos apsauga, RKN, paukštis
Vienas iš dalykų, dėl kurių naudoju „Banana PI“, yra turėti laisvą prieigą prie svetainių, kurias blokuoja RKN, kad „Telegram“ ir skambučiai „Slack“ veiktų. Straipsniai šia tema jau buvo pasiūlyti Habré: laikas, два, trys.
Aš įdiegiau tik tokį sprendimą naudodamas Ansible: nuoroda.
VPS turėtų veikti Ubuntu 18.04. Patikrinau pasirodymą dviejuose prieglobos serveriuose Europoje: „Amazon“ ir „Digital Ocean“.
Taigi, mes įdiegėme aukščiau esantį Armbian R64, jis pasiekiamas per ssh pavadinimu hm-bananapi-1 ir turi interneto prieigą. Mes nuosekliai diegiame galimus automatizuotus scenarijus ir paleidžiame patį diegimą R64:
# зависимости для 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
Tada turite įdiegti mūsų VPN į VPS tokiu pačiu būdu:
ansible-playbook ./router.py -l current-vpn
Čia argumentas visada yra current-vpn, o pats VPS pavadinimas sukonfigūruotas kintamajame (šiuo atveju tai yra 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 komandų rašymas su Python kodu leidžia pakartotinai panaudoti kodą, o apskritai visos bendrosios paskirties kalbos galimybės yra atviros. Pavyzdžiui, paukščio įdiegimas R64 ir VPS:
Iš viso: veikia telegrama, linkedin ir pornhub taip pat, apskritai, vartotojo patirtis yra gera. Bet viskas gali sulūžti, taip pat ir kiniški geležies gabalai.
Branduolio atnaujinimai taip pat gali būti įdomūs: pavyzdžiui, norėjau atnaujinti branduolį 5.4 => 5.6, na, Wireguard yra iš dėžutės, nereikia pataisyti... Negreičiau pasakyta: kruopščiai perkeltos pataisos iš 5.4 į 5.6, branduolys paleistas, tunelis į VPS įjungtas, bet paukštis negali prisijungti su klaida „BGP Error“… „Iš siaubo atsukta“ (c) į 5.4; TODO perkėlimas į 5.6 buvo atidėtas.
Todėl, be maršrutizatoriaus ir VPS įdiegimo, pridėjau stebėjimą (x86 Ubuntu 18.04), kuris yra įdiegtas atskirame pagrindiniame kompiuteryje su šiais komponentais:
prometheus, alertmanager, blackbox_exporter – viskas dockeryje
įspėjimai siunčiami į telegramos kanalą naudojant metalmatze/alertmanager-bot botą – taip pat ir dokeryje
tor botui, kad robotas galėtų įspėti apie situacijas, kai yra internetas, bet telegrama vis tiek neveikia, o pats robotas negali prisijungti
„Prometheus“ automatinis atradimas nustatytas į aplanką /etc/prometheus/auto_http, pavyzdį, kaip pridėti prieglobą prie stebėjimo (pagal numatytuosius nustatymus prieglobos nėra stebimos):
TODO: 2 teikėjai, 2 BPI, bet kokio perdavimo perjungimas
Be visko, planavau prisijungti prie dviejų tiekėjų, kad internetas veiktų ir toliau, net jei vienam tiekėjui kiltų problemų su tinklu, ar pamirštų susimokėti už internetą ir pan., ir kiti žmogiškieji faktoriai.
Aprašyta pažangiausia vartotojo patirtis kelių wanų tema čia Mwan3 sistemai pagal Openwrt. Šis sprendimas turi daug funkcijų, tačiau nustatyti ir bendrai naudoti daugiafunkcius įrenginius yra gana varginantis. Tik vienas pavyzdys: jei ateini į kai kurias svetaines iš dviejų IP adresų vienu metu, tai jiems gali nepatikti, nustos veikti => „internetas neveikia“.
Atsižvelgdamas į šią patirtį, nusprendžiau, kad daugiabučių namų naudojimas dar nėra prioritetas, o tik nesėkmingas. Nors atrodo, kad naujausiose „Linux“ versijose viskas turėtų veikti su viena komanda, pavyzdžiui:
ip route add default
nexthop via 192.168.1.1 weight 10
nexthop via 192.168.2.1 weight 5
Taigi, norėdami išvengti vieno gedimo taško, paimame 2 BPI, kiekvienas jungiamės prie vieno tiekėjo, sujungiame juos ir užmezgame ryšį vienas su kitu dinamiškai nukreiptą per bird / OSPF.
Be to, kiekviename skelbiame tą patį IP adresą, jei paslauga yra prieinama (internetas, DNS). Tai yra, numatytąjį maršrutą nustatysime ne patys, o per paukštį. Sprendimas šnipinėjo čia .
Šis funkcionalumas dar neįdiegtas, klastingas koronavirusas sujaukė (ne viskas atkeliavo iš aliexpress; kita internetinė parduotuvė „Layta“ žadėjo pristatyti per savaitę, o praėjo daugiau nei mėnuo; antrasis tiekėjas nespėjo ištempti kabelį prieš karantiną, pavyko tik sienoje padaryti skylę kabeliui išgręžti).
Kaip užsisakyti R64
Pati lenta oficialioje parduotuvėje SinoVoip.
Taip pat geriau iš karto užsisakyti:
maistas + informuoti ES arba JAV kištuko standartą
šilumos kriauklė: radiatoriai/ventiliatoriai; nes šildomas ir CPU, ir jungiklio lustas
Yra niuansas - oficialioje parduotuvėje pristatymo kaina nuo kurio laiko tapo neadekvačiai didelė. Vadybininkė Judy Huang patikino, kad nebuvo jokios klaidos, o ePacket galima rinktis už 5$, bet pamačiau, kad Rusijai yra tik EMS už >33$. Nemalonu, bet ne kritiška. Be to, pasirinkus bet kurią kitą šalį pristatymui (važiavau per visus žemynus), pristatymas kainuos ~5$. Rusofobai?.. Bet tada radau, kad Prancūzijai pristatymo kaina irgi ~30$, ir nusiraminau.
Dėl to Judy pasiūlė pateikti užsakymą, bet nemokėti (daryti aliuziją: įdėti į kortelę mažiau, kad mokėjimas nepraeitų automatiškai); parašyk jai ir ji sumažins siuntimo kainą iki normalios. Sėkmė.
Klausimai
Dar ne viskas veikia idealiai.
Našumas
Ansible=Python komandos vykdomos lėtai, net ir tuščiosios eigos, 20-30 sekundžių; eilės tvarka ilgiau nei x86 nešiojamajame kompiuteryje. Be to, iš pradžių jie atliekami gana greitai, ~ 3 sekundes, paskui smarkiai sulėtėja. Galbūt taip yra dėl procesoriaus įkaitimo (droselio). „Go“ kodas taip pat veikia ilgai:
# запрос метрик для прометея из 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 veikia, bet sustoja Armbian maždaug po dienos, rašo: