Banana Pi 64 on yksilevyinen tietokone, joka on samanlainen kuin Raspberry Pi, mutta siinä on useita Ethernet-portteja, mikä mahdollistaa sen muuttamisen yleiskäyttöiseen Linux-jakeluun perustuvaksi reitittimeksi.
Kyllä, Openwrt on jo olemassa, mutta sillä on omat ongelmansa, sen GUI ja CLI; Mikrotik on olemassa, mutta siinä on taas oma GUI/CLI, ja Wireguard ei toimi heti paketista... Yleensä haluan reitittimen joustavilla asetuksilla, mutta pysyen normaalin Linuxin puitteissa, jota käytät jokaisen päivän kanssa.
Artikkelissa nimillä BPI, R64, yksilevy, tarkoitan samaa - itse Banana Pi R64 -yksilevyistä.
Kuvan valinta. Lataa eMMC:n kautta
Ensimmäinen taito, jonka kanssa sinun on hankittava työskennellessäsi SBC yleensä ja erityisesti R64:n kanssa tämä tarkoittaa sitä, että opettelee lataamaan käyttöjärjestelmä siihen ja olemaan vuorovaikutuksessa sen kanssa, koska R64:ssä ei ole porttia näytölle (esim. HDMI). Kun kaikki romahti - lakkasi toimimasta Wifi, Ethernet, Bluetooth, USB jne.. Siellä on UART, jonka käyttöliittymän kautta näet aina mikä meni pieleen ja tarvittaessa myös pari komentoa ajaa konsolista.
Algoritmi liittämiseen R64:ään USB-UARTin kautta:
lähdemme radioosien myymälään hakemaan USB-UART-kaapelia (PL2303, sarja-USB)
liitä toinen USB-pää tietokoneeseen ja toinen, UART, R64:ään, kolmella johdolla neljästä, kuten alla olevassa kuvassa
ajaa tietokonekonsolissa sudo minicom
Tämän jälkeen useimmissa tapauksissa yksilevykonsoli tulee näkyviin = menestys.
Voit nähdä lisätietoja täällä.
Seuraavaksi helpoin tapa on ladata käyttöjärjestelmä SD-kortilta: lataa linkki kuva ja täytä se:
Asetamme kortin R64 SD -paikkaan, käynnistämme sen ja tarkkailemme, että kytketty konsoli latautuu ensin ubootin ja sitten tavallisen Linux-latauksen.
Vaihtoehtoinen käynnistysvaihtoehto on käyttää R64:ään jo sisäänrakennettua 8 Gt:n korttia, nimeltään eMMC. Wikin ohjeiden mukaan kopioimme kuvan laitteelle
/dev/mmcblk0 BPI:hen, käynnistä uudelleen, poista SD-kortti, käynnistä BPI uudelleen... ja se ei toimi. Kuinka mennä edestakaisin Boot select älä vaivaudu.
Tosiasia on, että ainakin BPI:lle sinun on asetettava erityinen lippu, jotta voit käynnistää sisäiseltä flash-asemalta:
Valmistaja R64 (Kiina) julkaisi tämän binaarin täällä. Mitä se tekee, on tuntematon (ei ole lähdekoodeja), mutta se ei myöskään toimi ilman sitä.
Yleensä tämän jälkeen kuvat alkavat latautua eMMC:stä. Jos haluat selvittää sen ja luoda kuvia tyhjästä, niin molemmissa tapauksissa (SD/eMMC) sinun on kirjoitettava useita tiedostoja (SD-kortin esilataus, ATF, u-boot) vain ytimen lataamiseen. Tämä aihe on edelleen on kehittymässä, mutta meille tärkeintä on, että se toimii ja ok.
Nyt lataan eMMC:n kautta, rehellisesti sanottuna en käytä sitä, SD-kortti riittää, mutta vietin melko paljon aikaa sen toimimiseen, joten olkoon se artikkelissa.
Käyttöjärjestelmän valinta. Armbialainen
Ensimmäinen sovellustehtävä on käynnistää VPN, luonnollisesti Wireguard. Heti havaittiin, että ytimen puolella sitä ei ollut koottu eikä otsikoita ollut. Rakensin ytimen uudelleen ja kuten tapani x86:lla, kokosin ydinmoduulin DKMS:n avulla. Kuitenkin pientenkin apuohjelmien rakentamisen nopeus arm64:lle yllätti minut epämiellyttävästi. Ja sitten vaadittiin toinen ydinmoduuli jne. Yleisesti ottaen käy ilmi, että kaikki ytimeen liittyvä kootaan parhaiten lämpimään x86-kannettavaan, siirretään sitten R64:ään yksinkertaisesti kopioimalla, käynnistetään uudelleen ja testataan.
Toinen asia on userspace-osa. Jos valitsen Debianin, kaikki arm64-arkkitehtuurille on jo paketti.debian.org -sivustolla, eikä mitään tarvitse rakentaa uudelleen.
Jotta en valmistaisi toista polkupyörää, I siirrettyArmbialainen BPI R64:ssä.
Tai pikemminkin tämä: userspace-osa on Armbian, ja ydin on otettu arkistosta Vilpitön-A. Uusimman kuvan voi ladata täällä.
Kaikki R64:n ohjelmistoosan kehittämiseen liittyvät toimet suoritetaan foorumi. Yleisesti ottaen valmistaja itse pyrkii popularisoimaan reititintä Openwrtille, mutta saksalaisen Frankin toiminnan ansiosta kaikki ominaisuudet päätyvät nopeasti Debianin ytimeen. Yllättäen Frank on aktiivinen jokaisessa foorumin säikeessä.
Työtilan organisaatio: johdot
Haluaisin erikseen kertoa, kuinka SBC (ei vain BPI) sijoitetaan pöydälle kehitys-/testauksen aikana, jotta siihen ei kulje Ethernet-kaapelia Internet-lähteestä koko huoneessa/toimistossa. Tosiasia on, että toisaalta sinun on annettava laitteistolle Internet, mutta toisaalta kaikki kyseisessä laitteistossa voi hajota, ja ennen kaikkea Wifi.
Ensin päätin ostaa halvan USB-Wifi-pillin, kytkeä sen BPI:n ainoaan porttiin ja unohtaa johdot. Tätä varten ostin edullisen TP-LINK TL-WN725N USB 2.0:n, mutta pian kävi selväksi, että se ei nouse: jotta pilli toimisi, tarvitset ytimen ohjaimen, jota ei tietenkään ollut siellä. (myöhemmin kokosin tarvittavan RTL8XXXU-ohjaimen, mutta se on edelleen epäkäytännöllinen ). Ja Ethernet-kaapeli pilasi huoneen ilmettä hetkeksi.
Tuloksena pääsin kaapelista eroon Tenda MW3:n (Wifi mesh system) avulla: laitoin yksinkertaisesti yhden kuution pöydän alle ja liitin BPI:n sen LAN-porttiin metrin pituisella Ethernet-kaapelilla. Menestys.
Wireguard, RKN, Bird
Yksi asioista, joihin haluan käyttää Banana PI:tä, on saada vapaa pääsy erityisesti RKN:n estämille sivustoille, jotta Telegram- ja Slack-puhelut voivat toimia. Habresta on jo ehdotettu artikkeleita tästä aiheesta: aika, два, kolme.
Otin käyttöön juuri tämän ratkaisun Ansiblen avulla: linkki.
VPS:ssä oletetaan toimivan Ubuntu 18.04. Tarkistin toimivuuden kahdella isännöitsijällä Euroopassa: Amazonissa ja Digital Oceanissa.
Joten asensimme yllä olevan Armbianin R64: lle, se on käytettävissä ssh: n kautta nimellä hm-bananapi-1 ja siinä on internetyhteys. Otamme johdonmukaisesti käyttöön Ansible-automaatiokomentosarjat ja käynnistämme itse asennuksen R64:ssä:
# зависимости для 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
Seuraavaksi sinun on otettava VPN käyttöön VPS:ään samalla tavalla:
ansible-playbook ./router.py -l current-vpn
Tässä argumentti on aina current-vpn, ja todellinen VPS-nimi on määritetty muuttujassa (tässä tapauksessa se on paris-vpn-aws-t2-micro-1):
Voi kyllä, ennen kaikkia näitä toimintoja sinun on luotava salaisuudet (erityisesti Wireguard-avaimet) kansioon ./secrets, hakemiston pitäisi näyttää tältä niin.
Mahdollinen automaatio Pythonissa
Saatat huomata, että sen sijaan, että ne olisivat YAML-muodossa, Ansible-komennot on koodattu Python-skripteillä. Vertailun vuoksi, kuinka lintudemoni otetaan käyttöön tavallisella tavalla:
with mapping:
append("name", "start bird")
with mapping("systemd"):
append("name", "bird")
append("state", "started")
append("enabled", "yes")
Ansible-komentojen kirjoittaminen Pythonissa mahdollistaa koodin uudelleenkäytön ja avaa yleisesti kaikki yleiskäyttöisen kielen mahdollisuudet. Esimerkiksi lintujen asentaminen R64:ään ja VPS:ään:
Yhteensä: sähke toimii, linkedin ja pornhub myös, pääsääntöisesti käyttökokemus on ok. Mutta kaikki voi rikkoutua, myös kiinalainen laitteisto.
Ytimen päivitykset voivat myös olla mielenkiintoisia: esimerkiksi halusin päivittää ytimen 5.4 => 5.6, no, Wireguard on heti valmiina, ei tarvitse paikata... Heti sanottu kuin tehty: Siirsin huolella korjaukset versiosta 5.4 5.6:een, ydin käynnistyi, tunneli VPS:ään pingattiin, mutta lintu ei voi muodostaa yhteyttä virheilmoituksella "BGP Error" ... "Käydin kauhuissani" (c) kohtaan 5.4; Siirto 5.6:een lykättiin TODOssa.
Siksi reitittimen ja VPS:n asennuksen lisäksi lisäsin valvonnan (x86 Ubuntu 18.04), joka asennetaan erilliseen isäntään seuraavilla komponenteilla:
prometheus, alertmanager, blackbox_exporter - kaikki dockerissa
Hälytykset lähetetään sähkekanavalle metalmatze/alertmanager-bot-botilla - myös Dockerissa
tor bottia varten, jotta botti voi varoittaa tilanteista, kun Internet on olemassa, mutta Telegram ei silti toimi, eikä botti itse voi muodostaa yhteyttä
sovelletaan hälytyksiä: NodeVPNTroubles (ei pingiä VPS:ään), BirdVPNTroubles (ei Bird-istuntoa), AntifilterDownloadTroubles (virhe ladattaessa estettyjä IP-osoitteita), SiteTroubles (onninen sähke ei ole saatavilla)
järjestelmähälytykset, esimerkiksi HostGrowingDiskReadLatency (halpa SD-kortti muuttuu lukukelvottomaksi)
Auto Discovery for Prometheus on määritetty /etc/prometheus/auto_http-kansiossa, esimerkki isännän lisäämisestä valvontaan (isäntiä ei valvota oletuksena):
Kaiken lisäksi suunnittelin yhdistäväni kahteen palveluntarjoajaan, jotta netti toimisi jatkossakin, vaikka yhdellä palveluntarjoajalla olisi ongelmia verkon kanssa tai unohtanut maksaa netin tms. ja muut inhimilliset tekijät.
Kuvataan edistynein käyttäjäkokemus multi-wan-aiheesta täällä Mwan3-järjestelmälle Openwrt. Tässä ratkaisussa on runsaasti toimintoja, mutta sen asentaminen ja käyttäminen yleensä monikäyttöisille laitteille on melko hankalaa. Vain yksi esimerkki: jos tulet joillekin sivustoille kahdesta IP-osoitteesta kerralla, he eivät ehkä pidä siitä, ne lakkaavat toimimasta => "Internet ei toimi."
Tämän kokemuksen perusteella päätin, että multihoming ei ole vielä prioriteetti, vain vikasieto. Vaikuttaa kuitenkin siltä, että Linuxin uusimmissa versioissa kaiken pitäisi toimia yhdellä komennolla, kuten:
ip route add default
nexthop via 192.168.1.1 weight 10
nexthop via 192.168.2.1 weight 5
Joten välttääksemme yhden epäonnistumisen otamme 2 BPI:tä, yhdistämme kukin yhteen palveluntarjoajaan, yhdistämme ne toisiinsa ja muodostamme yhteyden toisiinsa dynaamisen reitityksen bird/OSPF:n kautta.
Seuraavaksi mainostamme samaa IP-osoitetta jokaisessa, jos palvelu on saatavilla (Internet, DNS). Eli emme aseta oletusreittiä itse, vaan linnun kautta. Luin ratkaisun täällä .
Tätä toimintoa ei ole vielä otettu käyttöön, salakavala koronavirus teki tempun tässä (kaikki ei saapunut Aliexpressistä; toinen verkkokauppa, Layta, lupasi toimittaa viikossa, mutta yli kuukausi on kulunut; toisella tarjoajalla ei ollut aikaa kaapelin jatkamiseksi ennen karanteenia, onnistui vain saamaan seinään reiän kaapelia varten).
Kuinka tilata R64
Itse taulu on virallisessa myymälässä SinoVoip.
On myös parempi tilata heti:
On vivahde - toimitushinta on noussut liian korkeaksi virallisessa myymälässä jo jonkin aikaa. Manager Judy Huang vakuutti minut, että virhettä ei ollut, ja voit valita ePacketin hintaan 5 dollaria, mutta näin, että Venäjällä on vain EMS yli 33 dollaria. Epämiellyttävä, mutta ei kriittinen. Lisäksi, jos valitset toimitukseen jonkin muun maan (kävelin kaikki maanosat), toimitus maksaa ~5 dollaria. Russofobit?.. Mutta sitten huomasin, että Ranskalle toimitushinta on myös ~30$, ja rauhoittelin.
Tämän seurauksena Judy tarjoutui tekemään tilauksen, mutta ei maksanut (vihje: laita kortille vähemmän, jotta automaattinen maksu ei mene läpi); Kirjoita hänelle, niin hän laskee toimitushinnan normaaliksi. Menestys.
Kysymykset
Kaikki ei vielä toimi täydellisesti.
Suorituskyky
Ansible=Python-komennot suoritetaan hitaasti, jopa käyttämättömät, 20-30 sekuntia; suuruusluokkaa pidempi kuin x86 kannettavassa. Lisäksi ne suoritetaan aluksi melko nopeasti, ~3 sekuntia, sitten ne hidastuvat jyrkästi. Tämä voi johtua suorittimen lämpenemisestä (kuristuksesta). Go-koodin toimiminen kestää myös kauan:
# запрос метрик для прометея из 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 toimii, mutta Armbianilla se pysähtyy noin päivän kuluttua, kirjoittaa: