Llwybrydd Banana Pi R64 - Debian, Wireguard, RKN

Mae'r Banana Pi 64 yn gyfrifiadur un bwrdd tebyg i'r Raspberry Pi, ond gyda sawl porthladd Ethernet, sy'n ei gwneud hi'n bosibl ei droi'n llwybrydd yn seiliedig ar ddosbarthiad Linux pwrpas cyffredinol.

Llwybrydd Banana Pi R64 - Debian, Wireguard, RKN

Oes, mae Openwrt eisoes, ond mae ganddo ei broblemau ei hun, ei GUI a CLI; Mae yna Mikrotik, ond eto mae ganddo ei GUI/CLI ei hun, ac nid yw Wireguard yn gweithio allan o'r bocs... Yn gyffredinol, rydw i eisiau llwybrydd gyda gosodiadau hyblyg, tra'n aros o fewn fframwaith Linux safonol, rydych chi'n gweithio gyda phob dydd.

Yn yr erthygl o dan yr enwau BPI, R64, bwrdd sengl, byddaf yn golygu'r un peth - y Banana Pi R64 bwrdd sengl ei hun.

Dewis delwedd. Lawrlwythwch trwy eMMC

Y sgil gyntaf un y mae angen i chi ei hennill wrth weithio gyda SBC yn gyffredinol, a chyda'r R64 yn benodol, mae hyn yn golygu dysgu sut i lwytho system weithredu i mewn iddo a gallu rhyngweithio ag ef, oherwydd nid oes gan yr R64 borthladd ar gyfer monitor (HDMI, er enghraifft). Pan syrthiodd popeth i ffwrdd - stopiodd Wifi, Ethernet, Bluetooth, USB, ac ati. Mae UART, trwy'r rhyngwyneb y gallwch chi bob amser weld beth aeth o'i le, a hefyd rhedeg cwpl o orchmynion o'r consol, os oes angen.

Algorithm ar gyfer cysylltu â R64 trwy USB-UART:

  • rydym yn rhedeg i'r storfa rhannau radio ar gyfer cebl USB-UART (PL2303, Cyfresol-i-USB)
  • cysylltu un pen USB i'r cyfrifiadur, a'r llall, UART, i'r R64, gyda thair gwifren allan o bedair, fel yn y llun isod
  • rhedeg yn y consol cyfrifiadur sudo minicom

Ar ôl hyn, yn y rhan fwyaf o achosion bydd y consol bwrdd sengl yn ymddangos = llwyddiant.
Gallwch weld mwy o fanylion yma.

Llwybrydd Banana Pi R64 - Debian, Wireguard, RKN

Nesaf, y ffordd hawsaf yw llwytho'r system weithredu o gerdyn SD: lawrlwytho gan cyswllt delwedd a'i llenwi:

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

Rydyn ni'n mewnosod y cerdyn yn y slot R64 SD, yn ei droi ymlaen, ac yn arsylwi ar y consol cysylltiedig yn llwytho uboot cyntaf, yna llwytho Linux safonol.

Opsiwn cist amgen yw defnyddio cerdyn 64Gb sydd eisoes wedi'i gynnwys yn yr R8, o'r enw eMMC. Yn ôl y cyfarwyddiadau yn y wiki, rydym yn copïo'r ddelwedd i'r ddyfais
/dev/mmcblk0 i BPI, ailgychwyn, tynnwch y cerdyn SD, trowch BPI ymlaen eto ... ac nid yw'n gweithio. Sut i fynd yn ôl ac ymlaen Boot select paid a thrafferthu.

Y ffaith yw bod angen gosod baner arbennig ar gyfer BPI o leiaf er mwyn gallu cychwyn o yriant fflach mewnol:

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]

Nesaf, mae angen i chi ysgrifennu rhaglwythwr i raniad cist arbennig

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

Postiodd Gwneuthurwr R64 (Tsieina) y deuaidd hwn yma. Mae'r hyn y mae'n ei wneud yn anhysbys (nid oes codau ffynhonnell), ond ni fydd yn gweithio hebddo chwaith.

Yn gyffredinol, ar ôl hyn, mae'r delweddau'n dechrau llwytho o eMMC. Os ydych chi am ei ddatrys a chreu delweddau o'r dechrau, yna ar gyfer y ddau achos (SD / eMMC) mae angen i chi ysgrifennu sawl ffeil arall (preloader ar gyfer cerdyn SD, ATF, u-boot) dim ond i gyrraedd llwytho'r cnewyllyn. Mae'r pwnc hwn yn dal i fod yn datblygu, ond i ni y prif beth yw ei fod yn gweithio ac yn iawn.

Nawr rwy'n lawrlwytho trwy eMMC, a dweud y gwir, nid wyf yn ei ddefnyddio, mae cerdyn SD yn ddigon, ond treuliais gryn dipyn o amser yn ei gael i weithio, felly gadewch iddo fod yn yr erthygl.

Dewis system weithredu. Armbian

Y dasg ymgeisio gyntaf yw lansio VPN, yn naturiol Wireguard. Darganfuwyd ar unwaith nad oedd ar ochr y cnewyllyn wedi'i ymgynnull ac nid oedd unrhyw benawdau. Ailadeiladais y cnewyllyn ac, fel sy'n arferol gyda x86, cydosodais y modiwl cnewyllyn gan ddefnyddio DKMS. Fodd bynnag, roedd cyflymder adeiladu hyd yn oed cyfleustodau bach ar fraich64 wedi fy synnu'n annymunol. Ac yna roedd angen modiwl cnewyllyn arall, ac ati. Yn gyffredinol, mae'n ymddangos bod popeth sy'n ymwneud â'r cnewyllyn yn cael ei ymgynnull orau ar liniadur cynnes x86, yna'i drosglwyddo i'r R64 trwy gopïo syml, ei ailgychwyn a'i brofi.

Peth arall yw'r rhan gofod defnyddiwr. Yn fy achos i o ddewis Debian, mae popeth ar gyfer pensaernïaeth arm64 eisoes ar packages.debian.org ac nid oes angen ailadeiladu unrhyw beth.

Er mwyn peidio â chynhyrchu beic arall, rydw i porthedig armbian ar BPI R64.
Neu yn hytrach, hyn: Armbian yw'r rhan gofod defnyddiwr, a chymerir y cnewyllyn o'r ystorfa Frank-A. Gellir lawrlwytho'r ddelwedd ddiweddaraf yma.

Mae'r holl weithgaredd ar ddatblygiad y rhan meddalwedd o R64 yn cael ei wneud ar fforwm. Yn gyffredinol, mae'r gwneuthurwr ei hun yn ymdrechu i boblogeiddio'r llwybrydd ar gyfer Openwrt, ond diolch i weithgaredd y datblygwr Frank o'r Almaen, mae'r holl nodweddion yn dod i ben yn gyflym yn y cnewyllyn ar gyfer Debian. Yn syndod, mae Frank yn weithgar ym mhob edefyn fforwm.

Sefydliad gweithle: gwifrau

Ar wahân, hoffwn ddweud wrthych sut, yn ystod datblygiad / profi, gosod SBC (nid BPI yn unig) ar fwrdd er mwyn peidio â rhedeg cebl Ethernet iddo o ffynhonnell Rhyngrwyd ar draws yr ystafell / swyddfa gyfan. Y ffaith yw bod angen i chi, ar y naill law, ddarparu darn o galedwedd gyda Rhyngrwyd, ond ar y llaw arall, gall popeth yn y darn hwnnw o galedwedd dorri i lawr, ac yn gyntaf oll Wifi.

Yn gyntaf, penderfynais brynu “chwiban” USB-Wifi rhad, ei blygio i mewn i'r unig borthladd ar y BPI ac anghofio am y gwifrau. I wneud hyn, prynais TP-LINK TL-WN725N USB 2.0 rhad, ond yn fuan iawn daeth yn amlwg na fyddai'n codi: er mwyn i'r chwiban weithio, mae angen gyrrwr cnewyllyn arnoch chi, nad oedd, wrth gwrs, yno (yn ddiweddarach fe wnes i ymgynnull y gyrrwr RTL8XXXU angenrheidiol, ond mae'n dal i fod yn anymarferol). Ac fe ddifethodd y cebl Ethernet edrychiad yr ystafell am gyfnod.

O ganlyniad, llwyddais i gael gwared ar y cebl gyda chymorth Tenda MW3 (system rhwyll Wifi): gosodais un ciwb o dan y bwrdd a chysylltu'r BPI â phorthladd LAN yr olaf gyda chebl Ethernet metr o hyd. Llwyddiant.

Wireguard, RKN, Bird

Un o'r pethau rydw i eisiau defnyddio Banana PI ar ei gyfer yw cael mynediad am ddim i wefannau sydd wedi'u rhwystro gan RKN, yn benodol, fel y gall galwadau Telegram a Slack weithio. Mae erthyglau ar Habré eisoes wedi'u cynnig ar y pwnc hwn: amser, два, 3.

Defnyddiais yr union ateb hwn gan ddefnyddio Ansible: cyswllt.

Tybir bod y VPS yn rhedeg Ubuntu 18.04. Fe wnes i wirio ymarferoldeb dau westeiwr yn Ewrop: Amazon a Digital Ocean.

Felly, fe wnaethom osod yr Armbian uchod ar R64, mae'n hygyrch trwy ssh o dan yr enw hm-bananapi-1 ac mae ganddo fynediad i'r rhyngrwyd. Rydym yn defnyddio Ansible, sgriptiau awtomeiddio yn gyson ac yn lansio'r gosodiad ei hun ar 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

Nesaf, mae angen i chi ddefnyddio ein VPN i'r VPS yn yr un modd:

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

Yma mae'r ddadl bob amser yn gyfredol-vpn, ac mae'r enw VPS gwirioneddol wedi'i ffurfweddu mewn newidyn (yn yr achos hwn paris-vpn-aws-t2-micro-1 ydyw):

$ grep current_vpn group_vars/all 
current_vpn: paris-vpn-aws-t2-micro-1
#current_vpn: frankfurt-vpn-d0-starter-1

O ie, cyn yr holl weithrediadau hyn mae angen i chi gynhyrchu cyfrinachau (yn enwedig allweddi Wireguard) yn y ffolder ./secrets, dylai'r cyfeiriadur edrych fel felly.

Awtomeiddio Atebol yn Python

Efallai y byddwch yn sylwi, yn lle bod mewn fformat YAML, bod y gorchmynion Ansible wedi'u hamgodio mewn sgriptiau Python. Er mwyn cymharu, sut i alluogi'r ellyll adar yn y ffordd arferol:

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

a sut i wneud yr un peth trwy Python:

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

Mae ysgrifennu gorchmynion Ansible yn Python yn caniatáu ichi ailddefnyddio'r cod, ac yn gyffredinol mae'n agor holl bosibiliadau'r iaith gyffredinol. Er enghraifft, gosod aderyn ar R64 a VPS:

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

gweler y cod swyddogaeth gosod_bird().

Galwodd y nodwedd hon pybook gweithredu yma. Nid oes unrhyw ddogfennaeth ar pybook eto, ond byddaf yn trwsio'r mater hwn yn nes ymlaen.

Beth mae'n ei feddwl i fyny'r afon ar yr achlysur hwn.

Monitro. Prometheus

Cyfanswm: mae telegram yn gweithio, linkedin a pornhub hefyd, yn gyffredinol mae profiad y defnyddiwr yn iawn. Ond gall popeth dorri, gan gynnwys caledwedd Tsieineaidd.

Gall diweddariadau cnewyllyn fod yn ddiddorol hefyd: er enghraifft, roeddwn i eisiau diweddaru cnewyllyn 5.4 => 5.6, wel, mae Wireguard yno allan o'r bocs, nid oes angen clytio... Cyn gynted ag y dywedwyd na gwneud: trosglwyddais y clytiau o 5.4 yn ofalus i 5.6, dechreuodd y cnewyllyn i fyny, y twnnel i'r VPS pinged, ond ni all aderyn gysylltu â'r gwall "Gwall BGP" ... "Rwy'n rholio yn ôl mewn arswyd" (c) i 5.4; Gohiriwyd y symudiad i 5.6 yn TODO.

Felly, yn ogystal â gosod y llwybrydd a VPS, ychwanegais fonitro (ar x86 Ubuntu 18.04), sy'n cael ei osod ar westeiwr ar wahân gyda'r cydrannau canlynol:

  • prometheus, alertmanager, blackbox_exporter - i gyd yn docwr
  • Anfonir rhybuddion i'r sianel telegram gan ddefnyddio'r bot metalmatze/alertmanager-bot - hefyd yn Docker
  • tor ar gyfer y bot, fel y gall y bot rybuddio sefyllfaoedd pan fo Rhyngrwyd, ond nid yw Telegram yn gweithio o hyd, ac ni all y bot ei hun gysylltu
  • wedi'i gymhwyso rhybuddion: NodeVPNTtroubles (dim ping i VPS), BirdVPNTtroubles (dim sesiwn Adar), AntifilterDownloadTroubles (gwall wrth lwytho cyfeiriadau IP sydd wedi'u rhwystro), SiteTroubles (nid yw telegram anffodus ar gael)
  • rhybuddion system, er enghraifft, HostGrowingDiskReadLatency (mae cerdyn SD rhad yn dod yn annarllenadwy)

Enghraifft gosod monitro:

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

Mae Auto Discovery ar gyfer Prometheus wedi'i ffurfweddu yn y ffolder /etc/prometheus/auto_http, enghraifft o ychwanegu gwesteiwr at fonitro (ni chaiff gwesteiwyr eu monitro yn ddiofyn):

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 ddarparwr, 2 BPI, anycast failover

Yn ogystal â phopeth, roeddwn i'n bwriadu cysylltu â dau ddarparwr fel y byddai'r Rhyngrwyd yn parhau i weithio, hyd yn oed pe bai un darparwr yn cael problemau gyda'r rhwydwaith, neu'n anghofio talu am y Rhyngrwyd, ac ati, a ffactorau dynol eraill.

Disgrifir y profiad defnyddiwr mwyaf datblygedig ar bwnc aml-wan yma ar gyfer system Mwan3 o dan Openwrt. Mae gan yr ateb hwn ymarferoldeb cyfoethog, ond mae ei sefydlu a'i weithredu'n gyffredinol ar gyfer aml-wan yn eithaf trafferthus. Dim ond un enghraifft: os byddwch chi'n dod i rai gwefannau o ddau gyfeiriad IP ar unwaith, efallai na fyddant yn ei hoffi, byddant yn rhoi'r gorau i weithio => “Nid yw'r Rhyngrwyd yn gweithio.”

Gan ystyried y profiad hwn, penderfynais nad yw amlgartrefu yn flaenoriaeth eto, dim ond methiant. Er, mae'n ymddangos y dylai popeth yn y fersiynau diweddaraf o Linux weithio gydag un gorchymyn fel:

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

Felly, er mwyn osgoi un pwynt o fethiant, rydym yn cymryd 2 BPI, yn cysylltu pob un ag un darparwr, yn eu cysylltu â'i gilydd ac yn gwneud y cysylltiad â'i gilydd yn llwybro deinamig trwy aderyn / OSPF.

Nesaf, rydym yn hysbysebu'r un cyfeiriad IP ar bob un os yw'r gwasanaeth ar gael (Rhyngrwyd, DNS). Hynny yw, ni fyddwn yn gosod y llwybr rhagosodedig ein hunain, ond trwy adar. Rwy'n spied yr ateb yma .

Nid yw'r swyddogaeth hon wedi'i gweithredu eto, chwaraeodd y coronafirws llechwraidd dric yma (ni chyrhaeddodd popeth o Aliexpress; addawodd siop ar-lein arall, Layta, gyflawni mewn wythnos, ond mae mwy na mis wedi mynd heibio; nid oedd gan yr ail ddarparwr amser i ymestyn y cebl cyn cwarantîn, dim ond llwyddo i gael twll mewn dril i mewn i'r wal ar gyfer y cebl).

Sut i archebu R64

Mae'r bwrdd ei hun yn y siop swyddogol SinoVoip.
Mae hefyd yn well archebu ar unwaith:

  • maeth + hysbysu safon plwg yr UE neu'r UD
  • sinc gwres: rheiddiaduron/gefnogwyr; oherwydd bod y CPU a'r sglodyn switsh yn cynhesu
  • antena wifi, er enghraifft,

Mae yna naws - mae'r pris dosbarthu wedi dod yn annigonol o uchel yn y siop swyddogol ers peth amser. Fe wnaeth y rheolwr Judy Huang fy argyhoeddi nad oedd gwall, a gallech ddewis ePacket am $5, ond gwelais mai dim ond EMS ar gyfer>$33 sydd ar gyfer Rwsia. Annifyr, ond nid yn feirniadol. Ar ben hynny, os dewiswch unrhyw wlad arall i'w danfon (es i drwy'r holl gyfandiroedd), bydd y danfoniad yn costio ~$5. Russophobes?.. Ond yna canfûm fod y pris dosbarthu ar gyfer Ffrainc hefyd yn ~30$, ac ymdawelais.

O ganlyniad, cynigiodd Judy osod archeb, ond nid talu (awgrym: rhowch lai ar y cerdyn fel nad yw'r taliad awtomatig yn mynd drwodd); ysgrifennwch ati a bydd yn gostwng y pris dosbarthu i normal. Llwyddiant.

Materion

Nid yw popeth yn gweithio'n berffaith eto.

Cynhyrchiant

Ansible=Mae gorchmynion Python yn cael eu gweithredu'n araf, hyd yn oed rhai segur, am 20-30 eiliad; trefn maint yn hirach nag ar liniadur x86. Ar ben hynny, ar y dechrau maent yn cael eu gweithredu'n eithaf cyflym, ~ 3 eiliad, yna maent yn arafu'n sydyn. Gall hyn fod oherwydd bod y CPU yn cynhesu (gwthio). Mae'r cod Go hefyd yn cymryd amser hir i weithio:

# запрос метрик для прометея из 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

Mae Wifi yn gweithio, ond ar Armbian mae'n stopio ar ôl tua diwrnod, yn ysgrifennu:

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

Dim ond ailgychwyn sy'n helpu. Mae angen inni symud ymlaen gweithio fe allan.

Ethernet

Mae Ethernet yn gweithio, ond ar ôl ~ 64 awr pecynnau (DHCP) o RXNUMX rhoi'r gorau i gyrraedd.
Mae ailgychwyn y rhyngwyneb yn helpu:

ifdown br0; sleep 30; ifup br0

Mae'r gyrrwr yn newydd, nid yw wedi'i dderbyn i'r cnewyllyn eto, gobeithio mai Landen Chao Tsieineaidd ydyw yn ei orffen.

Ffynhonnell: hab.com

Ychwanegu sylw