Ang Banana Pi 64 usa ka single-board nga kompyuter nga susama sa Raspberry Pi, apan adunay daghang mga Ethernet port, nga nagpaposible sa paghimo niini nga usa ka router base sa usa ka general-purpose Linux distribution.
Oo, adunay na Openwrt, apan kini adunay kaugalingon nga mga problema, ang GUI ug CLI; Adunay Mikrotik, apan pag-usab kini adunay kaugalingon nga GUI / CLI, ug ang Wireguard dili molihok sa gawas sa kahon ... Sa kinatibuk-an, gusto ko ang usa ka router nga adunay flexible nga mga setting, samtang nagpabilin sulod sa gambalay sa standard Linux, nga imong gitrabaho. uban sa matag adlaw.
Sa artikulo ubos sa mga ngalan nga BPI, R64, single-board, pareho ra ang akong ipasabot - ang Banana Pi R64 single-board mismo.
Pagpili og hulagway. Pag-download pinaagi sa eMMC
Ang labing una nga kahanas nga kinahanglan nimo nga maangkon kung nagtrabaho SBC sa kinatibuk-an, ug sa partikular nga R64, kini nagpasabot sa pagkat-on kon sa unsang paagi sa pag-load sa usa ka operating system ngadto niini ug makahimo sa pagpakig-uban niini, tungod kay ang R64 walay pantalan alang sa usa ka monitor (HDMI, pananglitan). Sa diha nga ang tanan nahulog - Wifi, Ethernet, Bluetooth, USB, ug uban pa mihunong sa pagtrabaho. Adunay usa ka UART, pinaagi sa interface nga imong makita kanunay kung unsa ang sayup, ug usab magpadagan sa pipila ka mga sugo gikan sa console, kung gikinahanglan.
Algorithm sa pagkonektar sa R64 pinaagi sa USB-UART:
midagan mi sa radio parts store para sa USB-UART cable (PL2303, Serial-to-USB)
ikonektar ang usa ka tumoy sa USB sa kompyuter, ug ang lain, UART, sa R64, nga adunay tulo nga mga wire gikan sa upat, sama sa litrato sa ubos
modagan sa computer console sudo minicom
Pagkahuman niini, sa kadaghanan nga mga kaso ang single-board console makita = kalampusan.
Makita nimo ang dugang nga mga detalye dinhi.
Sunod, ang labing kadali nga paagi mao ang pag-load sa operating system gikan sa usa ka SD card: pag-download pinaagi sa link hulagway ug pun-a kini:
Among gisulod ang card ngadto sa R64 SD slot, i-on kini, ug obserbahan ang konektado nga console nga nag-load una sa uboot, dayon ang standard nga Linux loading.
Usa ka alternatibo nga kapilian sa boot mao ang paggamit sa usa ka 64Gb card nga gitukod na sa R8, nga gitawag nga eMMC. Sumala sa mga panudlo sa wiki, gikopya namon ang imahe sa aparato
/dev/mmcblk0 sa BPI, i-reboot, kuhaa ang SD card, i-on pag-usab ang BPI ... ug dili kini molihok. Unsaon pagbalik ug balik Boot select ayaw kabalaka.
Ang tinuod mao nga labing menos alang sa BPI kinahanglan nimo nga magbutang usa ka espesyal nga bandila aron maka-boot gikan sa usa ka internal nga flash drive:
Ang Manufacturer R64 (China) nag-post niini nga binary dinhi. Ang gibuhat niini wala mahibal-an (walay mga source code), apan dili usab kini molihok kung wala kini.
Sa kinatibuk-an, pagkahuman niini, ang mga imahe nagsugod sa pagkarga gikan sa eMMC. Kung gusto nimo nga mahibal-an kini ug maghimo mga imahe gikan sa wala, unya alang sa duha nga mga kaso (SD / eMMC) kinahanglan nimo nga isulat ang daghang mga file (preloader alang sa SD card, ATF, u-boot) aron lang ma-load ang kernel. Kini nga hilisgutan mao gihapon molambo, apan alang kanamo ang panguna nga butang mao nga kini molihok ug okay.
Karon nag-download ako pinaagi sa eMMC, sa tinuud, wala nako kini gigamit, igo na ang usa ka SD card, apan gigugol nako ang daghang oras aron magamit kini, busa ibutang kini sa artikulo.
Pagpili sa usa ka operating system. Armbian
Ang una nga buluhaton sa aplikasyon mao ang paglansad sa usa ka VPN, natural nga Wireguard. Diha-diha dayon nadiskobrehan nga sa kernel nga bahin wala kini gipundok ug walay mga ulohan. Akong gitukod pag-usab ang kernel ug, sama sa akong batasan sa x86, gitigom ang kernel module gamit ang DKMS. Bisan pa, ang katulin sa pagtukod bisan sa gagmay nga mga gamit sa arm64 dili maayo nga nakurat kanako. Ug unya gikinahanglan ang laing kernel module, ug uban pa. Sa kinatibuk-an, kini nahimo nga ang tanan nga may kalabutan sa kernel labing maayo nga gitigum sa usa ka mainit nga x86 laptop, dayon gibalhin sa R64 pinaagi sa yano nga pagkopya, pag-reboot ug pagsulay.
Ang laing butang mao ang bahin sa userspace. Sa akong kaso sa pagpili sa Debian, ang tanan alang sa arm64 nga arkitektura naa na sa packages.debian.org ug dili na kinahanglan nga tukuron pag-usab ang bisan unsang butang.
Aron dili makagama og laing bisikleta, ako portedarmbian sa BPI R64.
O hinoon, kini: ang bahin sa userspace mao ang Armbian, ug ang kernel gikuha gikan sa repository Frank-A. Ang pinakabag-o nga hulagway mahimong ma-download dinhi.
Ang tanan nga kalihokan sa pagpalambo sa software nga bahin sa R64 gidala sa gawas sa ang forum. Sa kinatibuk-an nga pagsulti, ang tiggama mismo naningkamot nga itanyag ang router alang sa Openwrt, apan salamat sa kalihokan sa developer nga si Frank gikan sa Alemanya, ang tanan nga mga bahin dali nga natapos sa kernel alang sa Debian. Katingad-an, si Frank aktibo sa matag forum thread.
Organisasyon sa workspace: mga wire
Gilain, gusto nako isulti kanimo kung giunsa, sa panahon sa pag-uswag / pagsulay, pagbutang usa ka SBC (dili lamang usa ka BPI) sa usa ka lamesa aron dili makadagan ang usa ka Ethernet cable gikan sa usa ka gigikanan sa Internet sa tibuuk nga kwarto / opisina. Ang tinuod mao nga, sa usa ka bahin, kinahanglan nimo nga maghatag usa ka piraso sa hardware nga adunay Internet, apan sa laing bahin, ang tanan sa kana nga piraso sa hardware mahimong maguba, ug una sa tanan Wifi.
Una, nakahukom ko nga mopalit og barato nga USB-Wifi nga "whistle", i-plug kini sa bugtong port sa BPI ug kalimtan ang mga wire. Aron mahimo kini, nagpalit ako usa ka barato nga TP-LINK TL-WN725N USB 2.0, apan sa wala madugay nahibal-an nga dili kini mawala: aron molihok ang whistle, kinahanglan nimo ang usa ka driver sa kernel, nga, siyempre, wala didto. (sa ulahi akong gitigum ang gikinahanglan nga RTL8XXXU drayber, apan kini dili praktikal). Ug ang Ethernet cable nakadaot sa hitsura sa kwarto sa makadiyot.
Ingon usa ka sangputanan, nakuha nako ang kable sa tabang sa Tenda MW3 (Wifi mesh system): Gibutang ra nako ang usa ka cube sa ilawom sa lamesa ug gikonektar ang BPI sa LAN port sa ulahi gamit ang usa ka metro nga taas nga Ethernet cable. Kalampusan.
Gi-deploy nako kini nga solusyon gamit ang Ansible: link.
Ang VPS gituohan nga nagpadagan sa Ubuntu 18.04. Gisusi nako ang pag-andar sa duha ka host sa Europe: Amazon ug Digital Ocean.
Busa, among gi-install ang Armbian sa ibabaw sa R64, kini ma-access pinaagi sa ssh ubos sa ngalan hm-bananapi-1 ug adunay internet access. Kami makanunayon nga nag-deploy sa Ansible, automation nga mga script ug naglansad sa pag-install mismo sa R64:
Sunod, kinahanglan nimo nga i-deploy ang among VPN sa VPS sa parehas nga paagi:
ansible-playbook ./router.py -l current-vpn
Dinhi ang argumento kanunay nga kasamtangan-vpn, ug ang aktwal nga ngalan sa VPS gi-configure sa usa ka variable (sa kini nga kaso kini paris-vpn-aws-t2-micro-1):
Oh oo, sa wala pa ang tanan nga kini nga mga operasyon kinahanglan nimo nga maghimo mga sekreto (sa partikular nga mga yawe sa Wireguard) sa folder ./secrets, ang direktoryo kinahanglan nga tan-awon sama sa mao nga.
Ansible Automation sa Python
Mahimo nimong mamatikdan nga imbes nga naa sa format nga YAML, ang mga Ansible nga mga mando gi-encode sa mga script sa Python. Alang sa pagtandi, kung giunsa ang paghimo sa bird daemon sa naandan nga paagi:
with mapping:
append("name", "start bird")
with mapping("systemd"):
append("name", "bird")
append("state", "started")
append("enabled", "yes")
Ang pagsulat sa Ansible nga mga sugo sa Python nagtugot kanimo sa paggamit pag-usab sa code, ug sa kinatibuk-an nagbukas sa tanan nga mga posibilidad sa kinatibuk-ang katuyoan nga pinulongan. Pananglitan, ang pag-instalar sa langgam sa R64 ug VPS:
Kinatibuk-an: ang telegrama nagtrabaho, linkedin ug pornhub usab, sa kinatibuk-an ok ang kasinatian sa user. Apan ang tanan mahimong mabuak, lakip ang Chinese hardware.
Ang mga pag-update sa kernel mahimo usab nga makapaikag: pananglitan, gusto nako nga i-update ang kernel 5.4 => 5.6, maayo, ang Wireguard naa sa gawas sa kahon, dili kinahanglan nga i-patch ... Wala dayon gisulti kaysa nahuman: Makugi kong gibalhin ang mga patch gikan sa 5.4 hangtod sa 5.6, ang kernel nagsugod, ang tunel sa VPS nag-ping, apan ang langgam dili makakonektar sa sayup nga "BGP Error" ... "Mibalik ako sa kalisang" (c) sa 5.4; Ang pagbalhin sa 5.6 gi-postpone sa TODO.
Busa, dugang sa pag-instalar sa router ug VPS, gidugang nako ang pag-monitor (sa x86 Ubuntu 18.04), nga gi-install sa usa ka bulag nga host nga adunay mga musunud nga sangkap:
prometheus, alertmanager, blackbox_exporter - tanan sa docker
Ang mga alerto gipadala sa telegram channel gamit ang metalmatze/alertmanager-bot bot - usab sa Docker
tor alang sa bot, aron ang bot makaalerto sa mga sitwasyon kung adunay Internet, apan ang telegrama wala gihapon molihok, ug ang bot mismo dili makakonektar
gipadapat mga alerto: NodeVPNTroubles (walay ping sa VPS), BirdVPNTroubles (walay Bird session), AntifilterDownloadTroubles (sayup sa pagkarga sa gibabagan nga mga IP address), SiteTroubles (wala'y mahimo nga telegrama)
mga alerto sa sistema, pananglitan, HostGrowingDiskReadLatency (ang barato nga SD card dili na mabasa)
Ang Auto Discovery para sa Prometheus gi-configure sa /etc/prometheus/auto_http folder, usa ka pananglitan sa pagdugang sa usa ka host sa pag-monitor (ang mga host dili gibantayan pinaagi sa default):
Dugang pa sa tanan, nagplano ako nga magkonektar sa duha ka mga provider aron ang Internet magpadayon sa pagtrabaho, bisan kung ang usa ka provider adunay mga problema sa network, o nakalimot sila sa pagbayad sa Internet, ug uban pa, ug uban pang mga hinungdan sa tawo.
Ang labing abante nga kasinatian sa tiggamit sa hilisgutan sa multi-wan gihulagway dinhi alang sa Mwan3 nga sistema ubos sa Openwrt. Kini nga solusyon adunay daghang pag-andar, apan ang pag-set up ug pag-operate niini sa kinatibuk-an alang sa multi-wan medyo masamok. Usa lang ka pananglitan: kung moadto ka sa pipila ka mga site gikan sa duha ka mga adres sa IP sa usa ka higayon, mahimo nga dili nila kini gusto, mohunong sila sa pagtrabaho => "Ang Internet wala molihok."
Gikonsiderar kini nga kasinatian, nakahukom ko nga ang multihoming dili pa usa ka prayoridad, failover lamang. Bisan pa, ingon og sa pinakabag-o nga mga bersyon sa Linux ang tanan kinahanglan nga magtrabaho sa usa ka sugo sama sa:
ip route add default
nexthop via 192.168.1.1 weight 10
nexthop via 192.168.2.1 weight 5
Busa, aron sa paglikay sa usa ka punto sa kapakyasan, kita sa pagkuha sa 2 BPIs, Sumpaysumpaya ang matag usa ngadto sa usa ka provider, ikonektar sila sa usag usa ug sa paghimo sa koneksyon sa usag usa dinamikong routing pinaagi sa langgam/OSPF.
Sunod, gi-anunsyo namon ang parehas nga IP address sa matag usa kung magamit ang serbisyo (Internet, DNS). Sa ato pa, dili namo ibutang ang default nga ruta sa among kaugalingon, apan pinaagi sa langgam. Gipangita nako ang solusyon dinhi .
Kini nga pag-andar wala pa gipatuman, ang maliputon nga coronavirus nagdula dinhi (dili tanan moabut gikan sa Aliexpress; laing online nga tindahan, Layta, misaad nga ihatud sa usa ka semana, apan kapin sa usa ka bulan ang milabay; ang ikaduha nga tighatag walaβy oras. aron i-extend ang cable sa wala pa ang quarantine, nakahimo lamang sa pagkuha sa usa ka lungag sa drill ngadto sa bungbong alang sa cable).
Unsaon pag order ug R64
Ang board mismo anaa sa opisyal nga tindahan SinoVoip.
Mas maayo usab nga mag-order dayon:
Adunay usa ka nuance - ang presyo sa pagpadala nahimong dili igo nga taas sa opisyal nga tindahan sulod sa pipila ka panahon. Gikombinsir ako ni Manager Judy Huang nga wala'y sayup, ug mahimo nimong pilion ang ePacket sa $5, apan nakita nako nga alang sa Russia adunay EMS lamang sa> $33. Dili maayo, apan dili kritikal. Dugang pa, kung mopili ka sa bisan unsang nasud alang sa paghatud (naagian nako ang tanan nga mga kontinente), ang paghatud mokantidad ~ $5. Russophobes?.. Apan unya akong nahibal-an nga alang sa France ang presyo sa pagpadala usab ~ 30 $, ug ako mikalma.
Ingon nga resulta, si Judy mitanyag nga mag-order, apan dili mobayad (Timaan: gamay ra ang pagbutang sa kard aron dili moagi ang awtomatik nga pagbayad); sulati siya ug pakunhuran niya ang presyo sa pagpadala sa normal. Kalampusan.
mga isyu
Dili pa ang tanan nagtrabaho sa hingpit.
Pag-uswag
Ansible=Ang mga sugo sa Python hinay nga gipatuman, bisan ang mga walay pulos, sulod sa 20-30 ka segundo; usa ka han-ay sa magnitude nga mas taas kaysa sa x86 nga laptop. Dugang pa, sa una kini dali nga gipatuman, ~ 3 segundos, unya hinay kini nga hinay. Mahimong tungod kini sa pag-init sa CPU (throttling). Ang Go code nagkinahanglan usab og taas nga panahon sa pagtrabaho:
# Π·Π°ΠΏΡΠΎΡ ΠΌΠ΅ΡΡΠΈΠΊ Π΄Π»Ρ ΠΏΡΠΎΠΌΠ΅ΡΠ΅Ρ ΠΈΠ· 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
Ang Wifi nagtrabaho, apan sa Armbian kini mihunong pagkahuman sa usa ka adlaw, misulat:
Makatabang ra ang pag-restart. Kinahanglan natong magpadayon hunahunaa kini.
Ethernet
Ang Ethernet nagtrabaho, apan pagkahuman sa ~ 64 oras nga mga pakete (DHCP) gikan sa RXNUMX mihunong sa pag-abot.
Ang pagsugod pag-usab sa interface makatabang:
ifdown br0; sleep 30; ifup br0
Bag-o ang drayber, wala pa kini gidawat sa kernel, hinaut nga kini si Chinese Landen Chao mahuman kini.