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, naa ang Openwrt, apan naa kini kaugalingong mga katingad-an, kaugalingong GUI ug CLI; naa ang Mikrotik, apan naa usab kini kaugalingong GUI/CLI, ug Wireguard Dili kini mogana dayon... Sa laktod nga pagkasulti, gusto ko og router nga flexible ang mga setting, samtang nagpabilin sulod sa balangkas sa standard nga Linux nga akong gigamit kada 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 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 .

Sunod, ang labing kadali nga paagi mao ang pag-load sa operating system gikan sa usa ka SD card: pag-download pinaagi sa hulagway ug pun-a kini:
unzip -p 2019-08-23-ubuntu-16.04-lite-preview-bpi-r64-sd-emmc.img.zip | pv | sudo dd of=/dev/mmcblk0 bs=10M status=noxferAmong 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:
root@bpi-r64:~# ./mmc extcsd read /dev/mmcblk1 | grep 'PARTITION_CONFIG'
Boot configuration bytes [PARTITION_CONFIG: 0x00]
root@bpi-r64:~# ./mmc bootpart enable 1 1 /dev/mmcblk1
root@bpi-r64:~# ./mmc extcsd read /dev/mmcblk1 | grep 'PARTITION_CONFIG'
Boot configuration bytes [PARTITION_CONFIG: 0x48]Sunod, kinahanglan nimo nga isulat ang preloader sa usa ka espesyal nga partisyon sa boot
root@bpi-r64:~# echo 0 > /sys/block/mmcblk0boot0/force_ro
root@bpi-r64:~# dd if=preloader_evb7622_64_foremmc.bin of=/dev/mmcblk0boot0Ang Manufacturer R64 (China) nag-post niini nga binary . 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 , 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 unang praktikal nga buluhaton mao ang paglansad og VPN, natural lang WireguardAkong nadiskobrehan dayon nga ang kernel wala ma-compile og tarong, ug walay mga header. Gi-rebuild nako ang kernel ug, sama sa akong naandan sa x86, naghimo ko og kernel module gamit ang DKMS. Apan, ang build speed sa ARM64, bisan para sa gagmay nga mga utilities, nakurat kaayo. Unya gikinahanglan ang laing kernel module, ug uban pa. Sa laktod nga pagkasulti, bisan unsa nga may kalabutan sa kernel mas maayo nga ma-compile sa usa ka gubaon nga x86 laptop, dayon kopyahon ug i-paste lang sa ARM64, i-reboot, ug i-test.
Laing butang ang bahin sa espasyo sa paggamit. Sa akong kaso, ang pagpili Debian, ang tanan para sa arm64 architecture naa na sa mga packages.debian.org ug dili na kinahanglan nga i-recompile ang bisan unsa.
Aron dili makagama og laing bisikleta, ako sa BPI R64.
O hinoon, kini: ang bahin sa userspace mao ang Armbian, ug ang kernel gikuha gikan sa repository -A. Ang pinakabag-o nga hulagway mahimong ma-download .
Ang tanan nga kalihokan sa pagpalambo sa software nga bahin sa R64 gidala sa gawas sa Sa kinatibuk-an, ang tiggama mismo naningkamot nga i-popularize ang router para sa OpenWrt, apan tungod sa kalihokan sa developer nga si Frank gikan sa Germany, ang tanan nga mga feature dali nga natapos sa kernel para sa Debian-a. Katingad-an, aktibo si Frank sa tanang thread sa forum.
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.
Wireguard, RKN, Langgam
Usa sa mga butang nga gusto nakong gamiton ang Banana PI mao ang pagbaton og libre nga pag-access sa mga site nga gibabagan sa RKN, ilabi na, aron ang mga tawag sa Telegram ug Slack mahimong molihok. Ang mga artikulo bahin sa Habré gisugyot na bahin niini nga hilisgutan: , , .
Gi-deploy nako kini nga solusyon gamit ang Ansible: .
Gituohan nga ang VPS nagdagan ubos sa Ubuntu Abril 18.04. Gisulayan nako ang gamit niini sa duha ka hosting providers 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:
# зависимости для 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-1Sunod, kinahanglan nimo nga i-deploy ang among VPN sa VPS sa parehas nga paagi:
ansible-playbook ./router.py -l current-vpnDinhi 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):
$ grep current_vpn group_vars/all
current_vpn: paris-vpn-aws-t2-micro-1
#current_vpn: frankfurt-vpn-d0-starter-1Ah oo, sa dili pa kining tanan nga mga operasyon kinahanglan ka nga makamugna og mga sekreto (ilabi na ang mga yawe) Wireguard) ngadto sa folder ./secrets, ang direktoryo kinahanglan nga tan-awon sama sa .
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:
- name: start bird
systemd:
name: bird
state: started
enabled: yesug unsaon pagbuhat sa ingon pinaagi sa Python:
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:
install_bird("router/bird.conf.j2")
install_bird("vpn/bird.conf.j2")tan-awa ang function code .
Kini nga bahin gitawag pybook gipatuman . Wala pa'y dokumentasyon sa pybook, apan ayohon nako kini nga isyu sa ulahi.
Unsa iyang hunahuna niining higayona.
Pagmonitor. Prometheus
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 makapainteres: pananglitan, gusto nakong i-update ang kernel 5.4 => 5.6, aw, naa didto Wireguard Gikan sa kahon, dili na kinahanglan nga i-patch... Bag-ohay lang nahuman: Gihagoan nako ang pagbalhin sa mga patch gikan sa 5.4 ngadto sa 5.6, nagsugod ang kernel, ang tunnel ngadto sa mga ping sa VPS, apan dili makakonekta si Bird gamit ang error nga "BGP Error"... "Sa kalisang, nibalik ko" (c) ngadto sa 5.4; ang pagbalhin ngadto sa 5.6 gibutang na sa TODO.
Busa, dugang sa pag-instalar sa router ug VPS, gidugang nako ang pagmonitor (sa x86 Ubuntu 18.04), nga gi-install sa usa ka lahi nga host nga adunay mosunod nga mga 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 : 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)
Pananglitan sa setup sa pagmonitor:
ansible-playbook ./monitoring.py -l monitoring-preprodAng 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):
bash << 'EOF'
HOSTNAME=hm-bananapi-1
IP_ADDRESS=`ssh -G $HOSTNAME | awk '/^hostname / { print $2 }'`
ssh monitoring-preprod sudo sponge /etc/prometheus/auto_http/$HOSTNAME.json << EOF2
[
{
"targets": ["$IP_ADDRESS:9100"],
"labels": {
"env": "prod",
"hostname": "$HOSTNAME"
}
}
]
EOF2
EOFTODO: 2 providers, 2 BPI, anycast failover
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 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 5Busa, 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 .
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 .
Mas maayo usab nga mag-order dayon:
- + ipahibalo ang EU o US plug standard
- heat sink: radiators/fans; tungod kay ang CPU ug ang switch chip nag-init
- wifi antenna,
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
51700Wifi
Ang Wifi nagtrabaho, apan sa Armbian kini mihunong pagkahuman sa usa ka adlaw, misulat:
sa@bananapir64:~$ dmesg | grep -E 'mt7622_wmac.*timeout'
[470303.802539] mt7622_wmac 18000000.wmac: Message 38 (seq 3) timeout
[470314.042508] mt7622_wmac 18000000.wmac: Message 50 (seq 4) timeout
...Makatabang ra ang pag-restart. Kinahanglan natong magpadayon .
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 br0Bag-o ang drayber, wala pa kini gidawat sa kernel, hinaut nga kini si Chinese Landen Chao .
Source: www.habr.com
