ProHoster > Blog > Uprava > Usmerjevalnik Banana Pi R64 - Debian, Wireguard, RKN
Usmerjevalnik Banana Pi R64 - Debian, Wireguard, RKN
Banana Pi 64 je računalnik z eno ploščo, podoben Raspberry Pi, vendar z več ethernetnimi vrati, zaradi česar je distribucijski usmerjevalnik Linuxa za splošne namene.
Da, Openwrt že obstaja, vendar ima svoj GUI in CLI; obstaja Mikrotik, vendar ima spet svoj GUI / CLI, Wireguard pa ne deluje takoj ... Na splošno želim usmerjevalnik s prilagodljivimi nastavitvami, hkrati pa ostati v okviru standardnega Linuxa, s katerim delate vsak dan.
V članku pod imeni BPI, R64, single-board, bom mislil isto stvar - Banana Pi R64 single-board.
Izbira slike. Prenos prek eMMC
Prva veščina, ki jo pridobimo pri delu SBC na splošno in še posebej pri R64 pomeni, da se morate naučiti, kako vanj naložiti operacijski sistem in biti sposoben komunicirati z njim, ker R64 nima priključka za monitor (HDMI, na primer). Ko je vse padlo - Wifi je prenehal delovati, omrežje Ethernet, Bluetooth, USB itd. obstaja UART, prek katerega vmesnika lahko vedno vidite, kaj je šlo narobe, in po potrebi zaženete nekaj ukazov s konzole.
Algoritem povezave z R64 preko USB-UART:
pojdite v trgovino z radijskimi deli po kabel USB-UART (PL2303, Serial-to-USB)
en konec USB povežemo z računalnikom, drugi, UART, pa na R64, s tremi od štirih žic, kot na spodnji sliki
v teku računalniške konzole sudo minicom
Po tem se bo v večini primerov pojavila konzola z eno ploščo = uspeh.
Vidite lahko več tukaj.
Nato je najlažji način naložiti operacijski sistem s kartice SD: prenesite s povezava sliko in jo naložite:
vstavimo kartico v režo R64 SD, jo vklopimo, opazujemo nalaganje najprej uboot na povezani konzoli, nato standardni zagon Linuxa.
Alternativna možnost zagona je uporaba kartice 64 Gb, ki je že vgrajena v R8, imenovane eMMC. Po navodilih na wikiju sliko prepišemo v napravo
/dev/mmcblk0 v BPI, znova zaženite, odstranite kartico SD, ponovno omogočite BPI ... in ne deluje. Kako priti do tja Boot select ne vztrajaj.
Dejstvo je, da morate vsaj za BPI nastaviti posebno zastavico, da se lahko zaženete z notranjega bliskovnega pogona:
Proizvajalec R64 (Kitajska) je objavil to dvojiško datoteko tukaj. Kaj počne, ni znano (ni izvornih kod), a brez njega tudi ne bo šlo.
Na splošno se po tem slike začnejo nalagati iz eMMC. Če želite to ugotoviti in ustvariti slike iz nič, morate za oba primera (SD / eMMC) napisati še nekaj datotek (prednalagalnik za kartico SD, ATF, u-boot), samo da pridete do jedra škorenj. Ta tema je še vedno se razvija, ampak za nas je glavno, da deluje in je v redu.
Zdaj, če sem iskren, ne uporabljam prenosa eMMC, SD kartice so dovolj, vendar sem porabil kar nekaj časa, da je delovalo, tako da naj bo v članku.
Izbira operacijskega sistema. Armbian
Prva naloga aplikacije je zagon VPN-ja, seveda Wireguard. Takoj se je izkazalo, da ni bil sestavljen s strani jedra in ni bilo glav. Ponovno sem zgradil jedro in iz navade pri x86 zgradil modul jedra z uporabo DKMS. Vendar pa me je hitrost sestavljanja na arm64 tudi majhnih pripomočkov neprijetno presenetila. In potem je bil potreben še en modul jedra in tako naprej. Na splošno se izkaže, da je vse, kar je povezano z jedrom, bolje sestaviti na prenosnem računalniku x86 s toplo cevjo, nato s preprostim kopiranjem prenesti v R64, znova zagnati in preizkusiti.
Druga stvar je del uporabniškega prostora. V mojem primeru, ko sem izbral Debian, je vse za arhitekturo arm64 že na packages.debian.org in ni treba ničesar znova sestaviti.
Da ne bi izdelal še enega kolesa, sem prenesenArmbijan na BPI R64.
Ali bolje rečeno: del uporabniškega prostora je Armbian, jedro pa je vzeto iz repozitorija Frank-A. Najnovejšo sliko lahko prenesete tukaj.
Vse aktivnosti na razvoju programskega dela R64 potekajo naprej forum. Na splošno si proizvajalec sam prizadeva za popularizacijo usmerjevalnika Openwrt, a zaradi dejavnosti razvijalca Franka iz Nemčije vse funkcije hitro končajo v jedru Debian. Presenetljivo je, da je Frank aktiven v vsaki temi foruma.
Organizacija delovnega prostora: žice
Ločeno vam želim povedati, kako postaviti SBC (ne samo BPI) na mizo med razvojem / testiranjem, da ne bi do njega vodili ethernetnega kabla iz internetnega vira skozi celotno sobo / pisarno. Dejstvo je, da je treba po eni strani železju zagotoviti internet, po drugi strani pa se lahko v tem železu vse pokvari, še posebej Wifi.
Najprej sem se odločil kupiti poceni USB-Wifi "piščalko", jo vtakniti v edini port na BPI in pozabiti na žice. Da bi to naredil, sem kupil poceni TP-LINK TL-WN725N USB 2.0, vendar je zelo kmalu postalo jasno, da ne bo vzletel: za delovanje piščalke je bil potreben gonilnik jedra, ki ga seveda ni bilo (kasneje sem prevedel potreben gonilnik RTL8XXXU, vendar je še vedno nepraktičen). In ethernet kabel je za nekaj časa pokvaril pogled na sobo.
Posledično sem se s pomočjo Tenda MW3 (Wifi mesh system) uspel znebiti kabla: eno kocko sem preprosto položil pod mizo in z meter Ethernet kablom povezal BPI na LAN priključek slednjega. Uspeh.
Wireguard, RKN, Bird
Ena od stvari, za katere uporabljam Banana PI, je prost dostop do spletnih mest, ki jih blokira zlasti RKN, tako da Telegram in klici v Slack delujejo. Članki na to temo so bili že predlagani na Habréju: čas, два, 3.
Implementiral sem samo takšno rešitev z uporabo Ansible: povezava.
VPS naj bi poganjal Ubuntu 18.04. Uspešnost sem preveril na dveh hosterjih v Evropi: Amazon in Digital Ocean.
Torej, zgornji Armbian smo namestili na R64, na voljo je prek ssh pod imenom hm-bananapi-1 in ima dostop do interneta. Razmestimo zaporedno ansible, avtomatizacijske skripte in izvedemo samo namestitev na 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
Nato morate naš VPN namestiti v VPS na enak način:
ansible-playbook ./router.py -l current-vpn
Tukaj je argument vedno trenutni-vpn, samo ime VPS pa je konfigurirano v spremenljivki (v tem primeru je to paris-vpn-aws-t2-micro-1):
Oh ja, pred vsemi temi operacijami morate ustvariti skrivnosti (predvsem ključe Wireguard) v mapi ./secrets, mora imenik izgledati takole Tako.
Ansible avtomatizacija v Pythonu
Morda boste opazili, da so namesto v formatu YAML ukazi Ansible kodirani v skriptih Python. Za primerjavo, kako omogočiti ptičji demon na običajen način:
with mapping:
append("name", "start bird")
with mapping("systemd"):
append("name", "bird")
append("state", "started")
append("enabled", "yes")
Pisanje ukazov Ansible s kodo Python omogoča ponovno uporabo kode in na splošno so odprte vse možnosti jezika za splošno uporabo. Na primer, namestitev bird na R64 in VPS:
Skupaj: telegram deluje, linkedin in pornhub tudi, na splošno je uporabniška izkušnja ok. A vse se lahko zlomi, kitajski kosi železa tudi.
Posodobitve jedra so lahko tudi zanimive: na primer, želel sem posodobiti jedro 5.4 => 5.6, no, tam je Wireguard iz škatle, ni potrebe po popravkih ... Rečeno kot storjeno: skrbno preneseni popravki iz 5.4 v 5.6, jedro se je zagnalo, tunel do VPS je bil pingan, vendar se ptica ne more povezati z napako "BGP Error"… "V grozi vrnjeno nazaj" (c) na 5.4; prehod na 5.6 je bil prestavljen v TODO.
Zato sem poleg namestitve usmerjevalnika in VPS dodal monitoring (na x86 Ubuntu 18.04), ki je nameščen na ločenem gostitelju z naslednjimi komponentami:
prometheus, alertmanager, blackbox_exporter - vse v dockerju
opozorila so poslana na kanal telegram z uporabo bota metalmatze/alertmanager-bot - tudi v dockerju
tor za bota, tako da lahko bot opozori situacije, ko je internet na voljo, vendar telegram še vedno ne deluje in se bot sam ne more povezati
uporablja opozorila: NodeVPNTroubles (brez pinga do VPS), BirdVPNTroubles (ni Bird seje), AntifilterDownloadTroubles (ni uspelo naložiti blokiranih naslovov IP), SiteTroubles (nesrečen telegram ni na voljo)
sistemska opozorila, kot je HostGrowingDiskReadLatency (poceni kartica SD se preneha brati)
Samodejno odkrivanje za prometheus je nastavljeno na mapo /etc/prometheus/auto_http, kar je primer dodajanja gostitelja v nadzor (gostitelji niso privzeto nadzorovani):
OPRAVILO: 2 ponudnika, 2 BPI-ja, preklop po poljubni oddaji
Poleg vsega sem načrtoval povezavo z dvema ponudnikoma, da bi internet deloval naprej, tudi če bi imel en ponudnik težave z omrežjem, ali bi pozabil plačati internet itd., ter drugi človeški faktorji.
Opisana je najnaprednejša uporabniška izkušnja na temo multi-wan tukaj za sistem Mwan3 pod Openwrt. Ta rešitev ima bogato funkcionalnost, vendar je nastavitev in delovanje na splošno za multi-wan precej težavno. Samo en primer: če pridete na nekatera spletna mesta z dveh naslovov IP hkrati, potem jim to morda ne bo všeč, prenehale bodo delovati => "internet ne deluje."
Glede na to izkušnjo sem se odločil, da multihoming še ni prioriteta, ampak samo failover. Čeprav se zdi, da bi moralo v najnovejših različicah linuxa vse delovati z enim ukazom, kot je:
ip route add default
nexthop via 192.168.1.1 weight 10
nexthop via 192.168.2.1 weight 5
Torej, da ni ene same točke napake, vzamemo 2 BPI-ja, vsakega povežemo z enim ponudnikom, ju povežemo skupaj in vzpostavimo medsebojno komunikacijo z dinamičnim usmerjanjem prek bird / OSPF.
Nadalje na vsakem objavimo isti naslov IP, če je storitev na voljo (internet, DNS). To pomeni, da privzete poti ne bomo določili sami, ampak prek ptice. Rešitev vohunila tukaj .
Ta funkcionalnost še ni implementirana, zahrbten koronavirus je zamočil (ni prišlo vse iz aliexpressa; druga spletna trgovina Layta je obljubila dobavo v enem tednu, minil pa je že več kot mesec dni; drugemu ponudniku ni uspelo raztegniti kabel pred karanteno, uspel le narediti luknjo v steni, da bi izvrtal kabel).
Kako naročiti R64
Sama plošča v uradni trgovini SinoVoip.
Prav tako je bolje naročiti takoj:
Obstaja odtenek - cena dostave je v uradni trgovini nekaj časa postala neustrezno visoka. Vodja Judy Huang mi je zagotovila, da ni pomote, in da lahko izberete ePacket za 5 $, vendar sem videl, da je za Rusijo samo EMS za >33 $. Neprijetno, a ne kritično. Poleg tega, če izberete katero koli drugo državo za dostavo (šel sem skozi vse celine), bo dostava stala ~5$. Rusofobi?.. Potem pa sem ugotovil, da je tudi za Francijo cena dostave ~30$, in se pomiril.
Posledično je Judy ponudila, da odda naročilo, vendar ne plača (namig: dajte manj na kartico, da plačilo ne poteka samodejno); piši ji pa ti bo znižala ceno pošiljanja na običajno. Uspeh.
Vprašanja
Vse še ne deluje popolno.
Produktivnost
Ansible=ukazi Python se izvajajo počasi, tudi tisti v mirovanju, 20-30 sekund; red velikosti dlje kot pri prenosniku x86. Poleg tega se sprva izvajajo precej hitro, ~ 3 sekunde, nato pa se močno upočasnijo. Morda je to posledica segrevanja procesorja (dušenje). Koda Go je tudi dolgotrajna:
# запрос метрик для прометея из 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 deluje, vendar se na Armbianu ustavi po približno enem dnevu, piše: