Banana Pi R64-enkursigilo - Debian, Wireguard, RKN
La Banana Pi 64 estas unu-tabulo komputilo simila al la Raspberry Pi, sed kun pluraj Ethernet-havenoj, kio ebligas igi ĝin enkursigilo bazita sur ĝeneraluzebla Linukso-distribuo.
Jes, jam ekzistas Openwrt, sed ĝi havas siajn proprajn problemojn, sian GUI kaj CLI; Estas Mikrotik, sed denove ĝi havas sian propran GUI/CLI, kaj Wireguard ne funkcias el la skatolo... Ĝenerale, mi volas enkursigilon kun flekseblaj agordoj, restante en la kadro de norma Linukso, kiun vi funkcias. kun ĉiu tago.
En la artikolo sub la nomoj BPI, R64, unu-tabulo, mi signifos la samon - la Banana Pi R64-unu-tabulo mem.
Elektante bildon. Elŝutu per eMMC
La unua kapablo, kiun vi devas akiri kiam vi laboras SBC ĝenerale, kaj precipe kun la R64, tio signifas lerni kiel ŝargi operaciumon en ĝi kaj povi interagi kun ĝi, ĉar la R64 ne havas havenon por monitoro (HDMI, ekzemple). Kiam ĉio defalis - ĉesis funkcii Wifi, Ethernet, Bluetooth, USB ktp.. Estas UART, per kies interfaco vi ĉiam povas vidi kio misfunkciis, kaj ankaŭ ruli kelkajn komandojn de la konzolo, se necese.
Algoritmo por konekti al R64 per USB-UART:
ni kuras al la vendejo de radiopartoj por USB-UART-kablo (PL2303, Seria-al-USB)
konekti unu USB-finon al la komputilo, kaj la alia, UART, al la R64, kun tri dratoj el kvar, kiel en la suba bildo.
kuri en la komputila konzolo sudo minicom
Post tio, plejofte aperos la unutabula konzolo = sukceso.
Vi povas vidi pli da detaloj tie.
Poste, la plej facila maniero estas ŝargi la operaciumon de SD-karto: elŝuti per ligilo bildon kaj plenigu ĝin:
Ni enmetas la karton en la fendo R64 SD, ŝaltas ĝin kaj observas, ke la konektita konzolo ŝarĝas unue uboot, poste norman Linukso-ŝarĝadon.
Alternativa ekfunkciigo uzas 64Gb-karton jam enkonstruitan en la R8, nomatan eMMC. Laŭ la instrukcioj en la vikio, ni kopias la bildon al la aparato
/dev/mmcblk0 al BPI, rekomencu, forigu la SD-karton, ŝaltu BPI denove... kaj ĝi ne funkcias. Kiel iri tien kaj reen Boot select ne ĝenu.
Fakte estas, ke almenaŭ por BPI vi devas agordi specialan flagon por povi ekŝargi de interna poŝmemoro:
Fabrikisto R64 (Ĉinio) afiŝis ĉi tiun binaron tie. Kion ĝi faras estas nekonata (ne ekzistas fontkodoj), sed ĝi ankaŭ ne funkcios sen ĝi.
Ĝenerale, post ĉi tio, la bildoj komencas ŝargi de eMMC. Se vi volas eltrovi ĝin kaj krei bildojn de nulo, tiam por ambaŭ kazoj (SD/eMMC) vi devas skribi plurajn pliajn dosierojn (antaŭŝargilo por SD-karto, ATF, u-boot) nur por ekŝarĝi la kernon. Ĉi tiu temo ankoraŭ estas disvolviĝas, sed por ni la ĉefa afero estas, ke ĝi funkcias kaj bone.
Nun mi elŝutas per eMMC, sincere, mi ne uzas ĝin, SD-karto sufiĉas, sed mi pasigis sufiĉe da tempo por ke ĝi funkciigu, do estu en la artikolo.
Elektante operaciumon. Armbiano
La unua aplika tasko estas lanĉi VPN, nature Wireguard. Oni tuj malkovris, ke sur la kernflanko ĝi ne estis kunvenita kaj ne estis kaplinioj. Mi rekonstruis la kernon kaj, kiel mia kutimo kun x86, kunmetis la kernan modulon uzante DKMS. Tamen, la rapideco konstrui eĉ malgrandajn utilecojn sur arm64 malagrable surprizis min. Kaj tiam alia kernomodulo estis postulata, ktp. Ĝenerale, rezultas, ke ĉio rilata al la kerno estas plej bone kunvenita sur varma x86-tekkomputilo, poste transdonita al la R64 per simpla kopiado, rekomencita kaj provita.
Alia afero estas la uzantspaca parto. En mia kazo de elekto de Debian, ĉio por la arm64-arkitekturo jam estas en packages.debian.org kaj ne necesas rekonstrui ion ajn.
Por ne produkti alian biciklon, mi portitaArmbiano sur BPI R64.
Aŭ pli ĝuste, ĉi tio: la uzantspaca parto estas Armbian, kaj la kerno estas prenita el la deponejo sinceraj-A. La plej nova bildo estas elŝutebla tie.
Ĉiu agado pri la disvolviĝo de la programaro parto de R64 estas efektivigita forumo. Ĝenerale, la fabrikanto mem klopodas popularigi la enkursigilon por Openwrt, sed danke al la agado de la programisto Frank el Germanio, ĉiuj funkcioj rapide finiĝas en la kerno por Debian. Mirinde, Frank aktivas en ĉiu forumfadeno.
Laborspaca organizo: dratoj
Aparte, mi ŝatus rakonti al vi kiel, dum evoluado/testado, metu SBC (ne nur BPI) sur tablon por ne ruli Ethernet-kablon al ĝi de interreta fonto tra la tuta ĉambro/oficejo. La fakto estas, ke, unuflanke, vi devas provizi pecon de aparataro kun Interreto, sed aliflanke, ĉio en tiu aparataro povas rompi, kaj antaŭ ĉio Wifi.
Unue, mi decidis aĉeti malmultekostan USB-Wifi "fajfilon", ŝtopu ĝin en la solan havenon de la BPI kaj forgesu pri la dratoj. Por fari tion, mi aĉetis malmultekostan TP-LINK TL-WN725N USB 2.0, sed tre baldaŭ evidentiĝis, ke ĝi ne ekflugos: por ke la fajfilo funkciu, vi bezonas kernan pelilon, kiu kompreneble ne estis tie. (poste mi kunmetis la necesan ŝoforon RTL8XXXU, sed ĝi estas ankoraŭ nepraktika). Kaj la Ethernet-kablo difektis la aspekton de la ĉambro dum momento.
Kiel rezulto, mi sukcesis forigi la kablon helpe de Tenda MW3 (Wifi mesh-sistemo): mi simple metis unu kubon sub la tablon kaj konektis la BPI al la LAN-haveno de ĉi-lasta per metro-longa Ethernet-kablo. Sukceso.
Wireguard, RKN, Birdo
Unu el la aferoj, por kiuj mi volas uzi Banana PI, estas havi liberan aliron al retejoj blokitaj de RKN, precipe, por ke Telegram kaj Slack-vokoj povu funkcii. Artikoloj pri Habré jam estis proponitaj pri ĉi tiu temo: fojoj, два, tri.
Mi deplojis ĝuste ĉi tiun solvon uzante Ansible: ligilo.
Oni supozas, ke la VPS funkcias Ubuntu 18.04. Mi kontrolis la funkciojn ĉe du gastigantoj en Eŭropo: Amazon kaj Digital Ocean.
Do, ni instalis la supran Armbianon sur R64, ĝi estas alirebla per ssh sub la nomo hm-bananapi-1 kaj havas interretan aliron. Ni konstante deplojas Ansible, aŭtomatigajn skriptojn kaj lanĉas la instaladon mem sur 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
Poste, vi devas deploji nian VPN al la VPS en la sama maniero:
ansible-playbook ./router.py -l current-vpn
Ĉi tie la argumento ĉiam estas aktuala-vpn, kaj la fakta VPS-nomo estas agordita en variablo (en ĉi tiu kazo ĝi estas paris-vpn-aws-t2-micro-1):
Ho jes, antaŭ ĉiuj ĉi tiuj operacioj vi devas generi sekretojn (precipe Wireguard-ŝlosilojn) en la dosierujon ./secrets, la dosierujo devus aspekti kiel tiel.
Ansible Automation en Python
Vi eble rimarkos, ke anstataŭ esti en YAML-formato, la Ansible-komandoj estas koditaj en Python-skriptoj. Por komparo, kiel ebligi la birddemonon laŭ la kutima maniero:
with mapping:
append("name", "start bird")
with mapping("systemd"):
append("name", "bird")
append("state", "started")
append("enabled", "yes")
Skribi Ansible-komandojn en Python permesas reuzi la kodon, kaj ĝenerale malfermas ĉiujn eblecojn de la ĝeneraluzebla lingvo. Ekzemple, instalante birdon sur R64 kaj VPS:
Entute: telegramo funkcias, ankaŭ linkedin kaj pornhub, ĝenerale la sperto de uzanto estas bona. Sed ĉio povas rompiĝi, inkluzive de ĉina aparataro.
Ankaŭ kernaj ĝisdatigoj povas esti interesaj: ekzemple, mi volis ĝisdatigi kernon 5.4 => 5.6, nu, Wireguard estas tie ekstere de la skatolo, ne necesas fliki... Apenaŭ dirite ol farite: mi pene translokigis la diakilojn de 5.4. al 5.6, la kerno ekfunkciis, la tunelo al la VPS pingis, sed birdo ne povas konekti kun la eraro "BGP-Eraro" ... "Mi terure retroiris" (c) al 5.4; La movo al 5.6 estis prokrastita en TODO.
Tial, krom instali la enkursigilon kaj VPS, mi aldonis monitoradon (sur x86 Ubuntu 18.04), kiu estas instalita sur aparta gastiganto kun la sekvaj komponantoj:
prometheus, alertmanager, blackbox_exporter - ĉio en docker
Atentigoj estas senditaj al la telegrama kanalo uzante la metalmatze/alertmanager-bot bot - ankaŭ en Docker
tor por la bot, tiel ke la bot povas atentigi situaciojn kiam ekzistas Interreto, sed telegramo ankoraŭ ne funkcias, kaj la roboto mem ne povas konektiĝi.
aplikita atentigoj: NodeVPNTroubles (neniu ping al VPS), BirdVPNTroubles (neniu Bird-sesio), AntifilterDownloadTroubles (eraro ŝarĝante blokitajn IP-adresojn), SiteTroubles (malbonŝanca telegramo ne disponeblas)
Aŭtomata Discovery por Prometheus estas agordita en la dosierujo /etc/prometheus/auto_http, ekzemplo de aldono de gastiganto al monitorado (gastigantoj ne estas monitoritaj defaŭlte):
Krom ĉio, mi planis konekti al du provizantoj, por ke la Interreto daŭre funkciu, eĉ se unu provizanto havus problemojn kun la reto, aŭ ili forgesis pagi por Interreto ktp., kaj aliaj homaj faktoroj.
La plej altnivela uzantsperto pri la temo de multi-wan estas priskribita tie por la Mwan3-sistemo sub Openwrt. Ĉi tiu solvo havas riĉan funkciecon, sed agordi kaj funkcii ĝin ĝenerale por mult-wan estas sufiĉe ĝena. Nur unu ekzemplo: se vi venas al iuj retejoj de du IP-adresoj samtempe, ili eble ne ŝatas ĝin, ili ĉesos funkcii => "Interreto ne funkcias."
Konsiderante ĉi tiun sperton, mi decidis, ke multihoming ankoraŭ ne estas prioritato, nur malsukceso. Kvankam, ŝajnas, ke en la plej novaj versioj de Linukso ĉio devus funkcii per unu komando kiel:
ip route add default
nexthop via 192.168.1.1 weight 10
nexthop via 192.168.2.1 weight 5
Do, por eviti ununuran malsukcesan punkton, ni prenas 2 BPI-ojn, ligas ĉiun al unu provizanto, ligas ilin unu al la alia kaj faras la ligon inter si dinamikan vojigon per birdo/OSPF.
Poste, ni reklamas la saman IP-adreson ĉe ĉiu se la servo disponeblas (Interreto, DNS). Tio estas, ni mem ne starigos la defaŭltan itineron, sed tra birdo. Mi spionis la solvon tie .
Ĉi tiu funkcio ankoraŭ ne estis efektivigita, la insida koronaviruso ludis ĉi tie (ne ĉio alvenis de Aliexpress; alia reta vendejo, Layta, promesis liveri post semajno, sed pasis pli ol monato; la dua provizanto ne havis tempon. etendi la kablon antaŭ kvaranteno, nur sukcesis enigi truon en borilo en la muron por la kablo).
Kiel mendi R64
La tabulo mem estas en la oficiala vendejo SinoVoip.
Ankaŭ estas pli bone mendi tuj:
nutrado + informu la normon pri ŝtopilo de EU aŭ Usono
varmego: radiatoroj/ventoliloj; ĉar kaj la CPU kaj la ŝaltila blato varmiĝas
Estas nuanco - la liverprezo fariĝis neadekvate alta en la oficiala vendejo dum iom da tempo. Administranto Judy Huang konvinkis min, ke ne estis eraro, kaj vi povus elekti ePacket por $5, sed mi vidis, ke por Rusio ekzistas nur EMS por >$33. Malagrabla, sed ne kritika. Krome, se vi elektas iun alian landon por liveraĵo (mi trapasis ĉiujn kontinentojn), livero kostos ~$5. Rusofoboj?.. Sed tiam mi trovis, ke ankaŭ por Francio la liverprezo estas ~30$, kaj mi trankviliĝis.
Kiel rezulto, Judi proponis fari mendon, sed ne pagi (aludo: metu malpli sur la karton por ke la aŭtomata pago ne trairu); skribu al ŝi kaj ŝi reduktos la liverprezon al normalo. Sukceso.
temoj
Ankoraŭ ne ĉio funkcias perfekte.
Produkteco
Ansible=Python-komandoj estas ekzekutitaj malrapide, eĉ neaktivaj, dum 20-30 sekundoj; grandordo pli longa ol sur x86-tekkomputilo. Krome, komence ili estas ekzekutitaj sufiĉe rapide, ~3 sekundoj, poste ili akre malrapidiĝas. Ĉi tio povas ŝuldiĝi al la CPU-varmiĝo (streĉo). La Go-kodo ankaŭ bezonas longan tempon por funkcii:
# запрос метрик для прометея из 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 funkcias, sed ĉe Armbian ĝi ĉesas post ĉirkaŭ unu tago, skribas: