Router Banana Pi R64 - Debian, Wireguard, RKN

Banana Pi 64 është një kompjuter me një bord të ngjashëm me Raspberry Pi, por me porte të shumta Ethernet, duke e bërë atë një ruter shpërndarjeje Linux për qëllime të përgjithshme.

Router Banana Pi R64 - Debian, Wireguard, RKN

Po, ekziston Openwrt, por ka veçoritë e veta, GUI-në dhe CLI-në e vet; ekziston Mikrotik, por përsëri ka GUI/CLI-në e vet, dhe Wireguard Nuk funksionon menjëherë... Në thelb, dua një router me cilësime fleksibile, duke mbetur brenda kornizës së Linux-it standard me të cilin punoj çdo ditë.

Në artikullin me emrat BPI, R64, me një dërrasë të vetme, do të nënkuptoj të njëjtën gjë - vetë bordi i vetëm Banana Pi R64.

Zgjedhja e imazhit. Shkarkoni përmes eMMC

Aftësia e parë që duhet të fitoni kur punoni me të SBC në përgjithësi, dhe me R64 në veçanti, do të thotë të mësoni se si të ngarkoni një OS në të dhe të jeni në gjendje të ndërveproni me të, sepse R64 nuk ka një portë monitori (HDMI, për shembull). Kur gjithçka u prish - Wifi pushoi së punuari, rrjeti Ethernet, Bluetooth, USB, etj., ekziston një UART, përmes ndërfaqes së të cilit gjithmonë mund të shihni se çfarë shkoi keq, dhe gjithashtu të ekzekutoni disa komanda nga tastiera, nëse është e nevojshme.

Algoritmi i lidhjes me R64 përmes USB-UART:

  • kalo në dyqanin e pjesëve të radios për një kabllo USB-UART (PL2303, Serial-në-USB)
  • ne lidhim një fund USB me kompjuterin, dhe tjetrin, UART, me R64, me tre nga katër tela, si në foton më poshtë
  • në ekzekutimin e tastierës së kompjuterit sudo minicom

Pas kësaj, në shumicën e rasteve, do të shfaqet tastiera me një tabelë = sukses.
Ju mund të shihni më shumë këtu.

Router Banana Pi R64 - Debian, Wireguard, RKN

Tjetra, mënyra më e lehtë është të ngarkoni sistemin operativ nga karta SD: shkarkoni nga lidhje imazhin dhe ngarkoni atë:

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=noxfer

e fusim kartën në slotin R64 SD, e ndezim, vëzhgojmë ngarkimin e uboot-it fillimisht në tastierën e lidhur, pastaj nisjen standarde të Linux-it.

Një opsion alternativ i nisjes është përdorimi i një karte 64 Gb të ngulitur tashmë në R8, e quajtur eMMC. Sipas udhëzimeve në wiki, ne e rishkruajmë imazhin në pajisje
/dev/mmcblk0 në BPI, rindizni, hiqni kartën SD, aktivizoni përsëri BPI... dhe nuk funksionon. Si për të arritur atje Boot select mos u mbajt.

Fakti është se të paktën për BPI duhet të vendosni një flamur të veçantë në mënyrë që të mund të nisni nga një flash drive i brendshëm:

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]

Tjetra, ju duhet të shkruani preloader në një ndarje të veçantë të nisjes

root@bpi-r64:~# echo 0 > /sys/block/mmcblk0boot0/force_ro 
root@bpi-r64:~# dd if=preloader_evb7622_64_foremmc.bin of=/dev/mmcblk0boot0

Prodhuesi i R64 (Kinë) e postoi këtë binar këtu. Ajo që ai bën është e panjohur (nuk ka kode burimore), por pa të nuk do të funksionojë as.

Në përgjithësi, pas kësaj, imazhet fillojnë të ngarkohen nga eMMC. Nëse dëshironi ta kuptoni dhe të krijoni imazhe nga e para, atëherë për të dyja rastet (SD / eMMC) duhet të shkruani disa skedarë të tjerë (preloader për kartën SD, ATF, u-boot), vetëm për të arritur në kernel çizme. Kjo temë është ende po zhvillohet, por për ne gjëja kryesore është që funksionon dhe në rregull.

Tani, për të qenë i sinqertë, nuk përdor shkarkimin eMMC, kartat SD janë të mjaftueshme, por kam shpenzuar mjaft kohë për ta bërë atë të funksionojë, kështu që le të jetë në artikull.

Zgjedhja e sistemit operativ. armbian

Detyra e parë praktike është të lançohet një VPN, natyrisht WireguardMenjëherë zbulova se kerneli nuk ishte kompiluar siç duhet dhe nuk kishte header-a. E rindërtova kernelin dhe, siç e kam zakon me x86, ndërtova një modul kerneli duke përdorur DKMS. Megjithatë, shpejtësia e ndërtimit në ARM64, madje edhe për shërbime të vogla, ishte çuditërisht e pakëndshme. Pastaj u nevojit një modul tjetër kerneli e kështu me radhë. Në thelb, rezulton se çdo gjë që lidhet me kernelin kompilohet më mirë në një laptop të vjetër x86, pastaj thjesht kopjohet dhe ngjitet në ARM64, riniset dhe testohet.

Pjesa e hapësirës së përdorimit është një çështje tjetër. Në rastin tim, zgjedhja Debian, gjithçka për arkitekturën arm64 është tashmë në paketa.debian.org dhe nuk ka nevojë të rikompiloni asgjë.

Për të mos prodhuar një biçikletë tjetër, unë portuar armbian në BPI R64.
Ose më mirë: pjesa e hapësirës së përdoruesve është Armbian, dhe thelbi është marrë nga depoja I sinqertë-A. Imazhi i fundit mund të shkarkohet këtu.

I gjithë aktiviteti për zhvillimin e pjesës së softuerit të R64 është kryer në forumNë përgjithësi, vetë prodhuesi po përpiqet të popullarizojë ruterin për OpenWrt, por falë aktivitetit të zhvilluesit Frank nga Gjermania, të gjitha veçoritë përfundojnë shpejt në bërthamë për Debian-a. Çuditërisht, Franku është aktiv në çdo temë diskutimi në forum.

Organizimi i hapësirës së punës: telat

Më vete, unë dua t'ju tregoj se si ta vendosni SBC (jo vetëm BPI) në tryezë gjatë zhvillimit / testimit, në mënyrë që të mos çoni një kabllo Ethernet në të nga burimi i Internetit në të gjithë dhomën / zyrën. Fakti është se, nga njëra anë, ju duhet të siguroni internetin për copën e hekurit, dhe nga ana tjetër, gjithçka mund të prishet në këtë copë hekuri, dhe veçanërisht Wifi.

Fillimisht vendosa të blej një "bilbil" të lirë USB-Wifi, ta lidh atë në portën e vetme në BPI dhe të harroj telat. Për ta bërë këtë, bleva një USB 725 të lirë TP-LINK TL-WN2.0N, por shumë shpejt u bë e qartë se nuk do të hiqej: që bilbili të funksiononte, nevojitej një drejtues kernel, i cili, natyrisht, nuk ishte aty. (më vonë përpilova drejtuesin e nevojshëm RTL8XXXU, por është ende jopraktike). Dhe kablloja e ethernetit prishi pamjen e dhomës për pak kohë.

Si rezultat, arrita të heq qafe kabllon me ndihmën e Tenda MW3 (sistemi rrjetë Wifi): Thjesht vendosa një kub nën tavolinë dhe lidha BPI me portën LAN të kësaj të fundit me një kabllo Ethernet matës. Sukses.

Wireguard, RKN, Zog

Një nga gjërat për të cilat përdor Banana PI është të kem akses falas në faqet e bllokuara nga RKN, në veçanti, në mënyrë që Telegrami dhe thirrjet në Slack të funksionojnë. Artikujt mbi këtë temë janë propozuar tashmë në Habré: kohë, два, tre.

Unë zbatova vendosjen e një zgjidhjeje të tillë duke përdorur Ansible: lidhje.

Supozohet se VPS po funksionon nën Ubuntu 18.04 prill. Testova funksionalitetin në dy ofrues hosting në Evropë: Amazon dhe Digital Ocean.

Pra, ne instaluam Armbianin e mësipërm në R64, ai është i disponueshëm përmes ssh nën emrin hm-bananapi-1 dhe ka akses në internet. Ne vendosim skriptet e automatizimit në mënyrë sekuenciale dhe e ekzekutojmë vetë instalimin në 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

Tjetra, ju duhet të vendosni VPN-në tonë në VPS në të njëjtën mënyrë:

ansible-playbook ./router.py -l current-vpn

Këtu, argumenti është gjithmonë aktual-vpn, dhe vetë emri VPS është konfiguruar në një variabël (në këtë rast, është 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-1

Oh po, para të gjitha këtyre operacioneve duhet të gjeneroni sekrete (në veçanti çelësa) Wireguard) në dosje ./secrets, drejtoria duhet të duket si kështu.

Automatizimi ansible në Python

Ju mund të vini re se në vend të formatit YAML, komandat Ansible janë të koduara në skriptet Python. Për krahasim, si të aktivizoni demonin e shpendëve në mënyrën e zakonshme:

- name: start bird
  systemd:
    name: bird
    state: started
    enabled: yes

dhe si e njëjta gjë përmes Python:

with mapping:
    append("name", "start bird")
    with mapping("systemd"):
        append("name",  "bird")
        append("state", "started")
        append("enabled", "yes")

Shkrimi i komandave Ansible me kodin Python ju lejon të ripërdorni kodin dhe në përgjithësi, të gjitha mundësitë e një gjuhe me qëllim të përgjithshëm janë të hapura. Për shembull, instalimi i zogut në R64 dhe VPS:

install_bird("router/bird.conf.j2")
install_bird("vpn/bird.conf.j2")

shih kodin e funksionit install_bird ().

Kjo veçori quhet pybook zbatuar këtu. Nuk ka ende asnjë dokumentacion për pybook, atëherë do ta korrigjoj këtë defekt.

Çfarë mendon ai në rrjedhën e sipërme në lidhje me këtë

Monitorimi. Prometeu

Gjithsej: funksionon telegrami, linkedin dhe pornhub gjithashtu, në përgjithësi, përvoja e përdoruesit është në rregull. Por gjithçka mund të thyhet, dhe copat kineze të hekurit gjithashtu.

Përditësimet e bërthamës mund të jenë gjithashtu interesante: për shembull, doja të përditësoja bërthamën 5.4 => 5.6, pra, ja ku është. Wireguard Sapo e nxora nga kutia, nuk ka nevojë për patch-e... Sapo e thashë, sapo e bëra: Transferova me shumë mundim patch-et nga versioni 5.4 në 5.6, bërthama u nis, tuneli për ping-et e VPS-së, por Bird nuk mund të lidhet me gabimin "BGP Gabim"... "Me tmerr, u ktheva pas" (c) në versionin 5.4; kalimi në versionin 5.6 është vendosur në TODO.

Prandaj, përveç instalimit të ruterit dhe VPS-së, shtova monitorimin (në x86 Ubuntu 18.04), i cili është instaluar në një host të veçantë me komponentët e mëposhtëm:

  • prometheus, alertmanager, blackbox_exporter - të gjitha në docker
  • sinjalizimet dërgohen në kanalin e telegramit duke përdorur botin metalmatze/alertmanager-bot - gjithashtu në docker
  • tor për bot, në mënyrë që roboti të mund të lajmërojë situatat kur interneti është i disponueshëm, por telegrami ende nuk funksionon dhe vetë roboti nuk mund të lidhet
  • aplikuar alarmet: NodeVPNTroubles (pa ping në VPS), BirdVPNTprobleme (pa seancë Bird), Probleme AntifilterDownload (dështoi në ngarkimin e adresave IP të bllokuara), SiteTroubles (telegrami për fat të keq i padisponueshëm)
  • sinjalizimet e sistemit si HostGrowingDiskReadLatency (karta SD e lirë ndalon së lexuari)

Shembull i konfigurimit të monitorimit:

ansible-playbook ./monitoring.py -l monitoring-preprod

Zbulimi automatik për prometheus është vendosur në dosjen /etc/prometheus/auto_http, një shembull i shtimit të një hosti në monitorim (hostët nuk monitorohen si parazgjedhje):

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
EOF

TODO: 2 ofrues, 2 BPI, çdo dështim i transmetimit

Përveç gjithçkaje, kam planifikuar të lidhem me dy ofrues në mënyrë që interneti të vazhdojë të funksionojë, edhe nëse një ofrues kishte probleme me rrjetin, ose harronte të paguante internetin, etj., dhe faktorë të tjerë njerëzorë.

Përshkruhet përvoja më e avancuar e përdoruesit në temën e multi-wan këtu për sistemin Mwan3 nën Openwrt. Kjo zgjidhje ka funksionalitet të pasur, por vendosja dhe funksionimi në përgjithësi për multi-wan është mjaft i mundimshëm. Vetëm një shembull: nëse vini në disa sajte nga dy adresa IP njëherësh, atëherë mund të mos ju pëlqejë, ata do të ndalojnë së punuari => "Interneti nuk po funksionon."

Duke pasur parasysh këtë përvojë, vendosa që multihoming nuk është ende një prioritet, vetëm dështim. Edhe pse duket se në versionet më të fundit të linux gjithçka duhet të funksionojë me një komandë si:

ip route add default 
    nexthop via 192.168.1.1 weight 10 
    nexthop via 192.168.2.1 weight 5

Pra, për të shmangur një pikë të vetme dështimi, marrim 2 BPI, secila lidhet me një ofrues, i lidhim së bashku dhe bëjmë komunikim me njëri-tjetrin të drejtuar në mënyrë dinamike përmes shpendëve / OSPF.

Më tej, në secilën shpallim të njëjtën adresë IP nëse shërbimi është i disponueshëm (Internet, DNS). Kjo do të thotë, ne nuk do ta vendosim vetë rrugën e paracaktuar, por përmes zogut. Zgjidhja spiunuar këtu .

Ky funksionalitet nuk është zbatuar ende, koronavirusi tinëzar u ngatërrua (jo gjithçka erdhi nga aliexpress; një dyqan tjetër në internet, Layta, premtoi të dorëzojë brenda një jave dhe ka kaluar më shumë se një muaj; ofruesi i dytë nuk arriti të zgjasë kabllo para karantinës, arriti të bënte vetëm një vrimë në mur për të shpuar kabllon).

Si të porosisni R64

Bordi vetë në dyqanin zyrtar SinoVoip.
Është gjithashtu më mirë të porosisni menjëherë:

  • ushqim + informoni standardin e prizës së BE-së ose SHBA-së
  • lavaman: radiatorë/tifoz; sepse edhe CPU-ja nxehet, edhe çipi i ndërprerësit
  • antenë wifi, për shembull

Ekziston një nuancë - çmimi i dorëzimit prej disa kohësh është bërë joadekuat i lartë në dyqanin zyrtar. Menaxheri Judy Huang më siguroi se nuk kishte asnjë gabim dhe mund të zgjidhni ePacket për 5 dollarë, por pashë që për Rusinë ka vetëm EMS për >33 dollarë. E pakëndshme, por jo kritike. Për më tepër, nëse zgjidhni ndonjë vend tjetër për dërgesë (kam kaluar nëpër të gjitha kontinentet), dërgesa do të kushtojë ~5$. Rusofobët?.. Por më pas zbulova se edhe për Francën çmimi i dërgesës është ~30$ dhe u qetësova.

Si rezultat, Judy ofroi të bënte një porosi, por jo të paguante (aluzion: vendosni më pak në kartë në mënyrë që pagesa të mos kryhet automatikisht); shkruani asaj dhe ajo do të ulë çmimin e transportit në normale. Sukses.

Çështjet

Jo gjithçka funksionon ende në mënyrë perfekte.

prodhimtari

Ansible=Komandat e Python-it ekzekutohen ngadalë, madje edhe ato boshe, për 20-30 sekonda; një rend i madhësisë më i gjatë se në një laptop x86. Për më tepër, në fillim ato kryhen mjaft shpejt, ~ 3 sekonda, pastaj ngadalësohen ndjeshëm. Ndoshta kjo është për shkak të ngrohjes së CPU (mbytjes). Kodi Go është gjithashtu i gjatë:

# запрос метрик для прометея из 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 funksionon, por ndalon në Armbian pas rreth një dite, shkruan:

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
...

Vetëm rinisja ndihmon. Duhet të shkojmë më tej zgjidh.

Ethernet

Ethernet funksionon, por pas ~ një dite paketat (DHCP) nga R64 nuk vijnë më.
Rinisja e ndërfaqes ndihmon:

ifdown br0; sleep 30; ifup br0

Shoferi eshte i ri, kerneli nuk eshte pranuar akoma, shpresoj se kinezi Landen Chao përfundoni.

Burimi: www.habr.com

Bleni një host të besueshëm për faqet me mbrojtje DDoS, serverë VPS VDS 🔥 Bleni hosting të besueshëm të faqeve të internetit me mbrojtje DDoS, servera VPS VDS | ProHoster