Router Banana Pi R64 - Debian, Wireguard, RKN

Tha am Banana Pi 64 na choimpiutair aon-bhòrd coltach ris an Raspberry Pi, ach le grunn phuirt Ethernet, a tha ga dhèanamh comasach a thionndadh gu router stèidhichte air cuairteachadh Linux adhbhar coitcheann.

Router Banana Pi R64 - Debian, Wireguard, RKN

Tha, tha Openwrt ann mu thràth, ach tha na duilgheadasan aige fhèin, a GUI agus CLI; Tha Mikrotik ann, ach a-rithist tha an GUI / CLI aige fhèin, agus chan obraich Wireguard a-mach às a’ bhogsa... San fharsaingeachd, tha mi ag iarraidh router le suidheachaidhean sùbailte, fhad ‘s a dh’ fhuiricheas tu taobh a-staigh frèam àbhaisteach Linux, a bhios tu ag obair leis a h-uile latha.

Anns an artaigil fo na h-ainmean BPI, R64, aon-bhòrd, bidh mi a 'ciallachadh an aon rud - am bòrd singilte Banana Pi R64 fhèin.

A 'taghadh ìomhaigh. Luchdaich a-nuas tro eMMC

Is e a’ chiad sgil a dh’ fheumas tu fhaighinn nuair a bhios tu ag obair leis SBC san fharsaingeachd, agus leis an R64 gu sònraichte, tha seo a’ ciallachadh ionnsachadh mar a chuireas tu siostam obrachaidh a-steach ann agus a bhith comasach air eadar-obrachadh leis, leis nach eil port aig an R64 airson monitor (HDMI, mar eisimpleir). Nuair a thuit a h-uile càil dheth - sguir Wifi, Ethernet, Bluetooth, USB, msaa a bhith ag obair Tha UART ann, tron ​​​​eadar-aghaidh far am faic thu an-còmhnaidh dè chaidh ceàrr, agus cuideachd ruith òrdugh no dhà bhon consol, ma tha sin riatanach.

Algorithm airson ceangal ri R64 tro USB-UART:

  • bidh sinn a’ ruith chun stòr pàirtean rèidio airson càball USB-UART (PL2303, Serial-to-USB)
  • ceangail aon cheann USB ris a 'choimpiutair, agus am fear eile, UART, ris an R64, le trì uèirichean a-mach à ceithir, mar a tha san dealbh gu h-ìosal
  • ruith ann an consol a’ choimpiutair sudo minicom

Às deidh seo, sa mhòr-chuid de chùisean nochdaidh an consol aon-bhòrd = soirbheachas.
Chì thu barrachd mion-fhiosrachaidh an seo.

Router Banana Pi R64 - Debian, Wireguard, RKN

An ath rud, is e an dòigh as fhasa an siostam obrachaidh a luchdachadh bho chairt SD: luchdaich sìos le cheangal dealbh, agus lìon i :

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

Bidh sinn a’ cuir a-steach a’ chairt a-steach don t-slot R64 SD, ga tionndadh air, agus a’ faicinn a’ chonsail ceangailte a’ luchdachadh an toiseach uboot, an uairsin a’ luchdachadh àbhaisteach Linux.

Tha roghainn bròg eile a’ cleachdadh cairt 64Gb a chaidh a thogail a-steach don R8 mar-thà, ris an canar eMMC. A rèir an stiùiridh san uicidh, bidh sinn a’ dèanamh lethbhreac den ìomhaigh chun inneal
/ dev/mmcblk0 gu BPI, ath-thòisich, thoir air falbh a’ chairt SD, tionndaidh air BPI a-rithist ... agus chan obraich e. Ciamar a dhol air ais is air adhart Boot select na gabh dragh.

Is e an fhìrinn gum feum thu co-dhiù airson BPI bratach sònraichte a shuidheachadh gus an urrainn dhut bròg bho dhràibhear flash a-staigh:

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]

An ath rud, feumaidh tu preloader a sgrìobhadh a-steach do sgaradh bròg sònraichte

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

Chuir an neach-dèanamh R64 (Sìona) am binary seo an seo. Chan eil fios dè a nì e (chan eil còdan stòr ann), ach chan obraich e às aonais nas motha.

San fharsaingeachd, às deidh seo, tòisichidh na h-ìomhaighean a luchdachadh bho eMMC. Ma tha thu airson a dhèanamh a-mach agus ìomhaighean a chruthachadh bhon fhìor thoiseach, an uairsin airson an dà chùis (SD / eMMC) feumaidh tu grunn fhaidhlichean a bharrachd a sgrìobhadh (preloader airson cairt SD, ATF, u-boot) dìreach gus an kernel a luchdachadh. Tha an cuspair seo fhathast a ’leasachadh, ach dhuinne is e am prìomh rud gu bheil e ag obair agus ceart gu leòr.

A-nis bidh mi a’ luchdachadh sìos tro eMMC, le bhith onarach, cha bhith mi ga chleachdadh, tha cairt SD gu leòr, ach chuir mi seachad tòrr ùine ga fhaighinn a dh’ obair, mar sin leig leis a bhith san artaigil.

A 'taghadh siostam-obrachaidh. Armailteach

Is e a’ chiad obair tagraidh VPN a chuir air bhog, gu nàdarrach Wireguard. Chaidh a lorg sa bhad nach robh e air a chruinneachadh air taobh an kernel agus nach robh cinn-cinn ann. Thog mi an kernel agus, mar as àbhaist le x86, chruinnich mi am modal kernel a’ cleachdadh DKMS. Ach, chuir astar togail eadhon goireasan beaga air gàirdean64 iongnadh mì-thlachdmhor orm. Agus an uairsin bha feum air modal kernel eile, msaa. San fharsaingeachd, tha e coltach gu bheil a h-uile dad co-cheangailte ris an kernel air a chruinneachadh nas fheàrr air laptop blàth x86, an uairsin air a ghluasad chun R64 le bhith a’ dèanamh lethbhreac sìmplidh, ath-thòiseachadh agus deuchainn.

Is e rud eile am pàirt userspace. Anns a 'chùis agam mu bhith a' taghadh Debian, tha a h-uile dad airson ailtireachd arm64 mu thràth air packages.debian.org agus chan eil feum air dad ath-thogail.

Gus nach dèan thu baidhsagal eile, I portach Armailteach air BPI R64.
No an àite sin, seo: is e Armbian am pàirt àite-cleachdaidh, agus tha an kernel air a thoirt bhon stòr Frank-A. Faodar an dealbh mu dheireadh a luchdachadh sìos an seo.

Thathas a’ dèanamh a h-uile gnìomh air leasachadh pàirt bathar-bog R64 fòram. San fharsaingeachd, bidh an neach-dèanamh fhèin a’ feuchainn ri mòr-chòrdte a dhèanamh air an router airson Openwrt, ach le taing do ghnìomhachd an leasaiche Frank às a’ Ghearmailt, bidh na feartan uile gu sgiobalta a ’tighinn gu crìch anns an kernel airson Debian. Gu h-iongantach, tha Frank gnìomhach anns a h-uile snàithlean fòram.

Eagrachadh àite-obrach: uèirichean

Air leth, bu mhath leam innse dhut mar a chuireas tu, rè leasachadh / deuchainn, SBC (chan e dìreach BPI) air bòrd gus nach ruith càball Ethernet thuige bho stòr eadar-lìn air feadh an t-seòmair / oifis gu lèir. Is e an fhìrinn, air an aon làimh, gum feum thu pìos bathar-cruaidh a thoirt seachad leis an eadar-lìn, ach air an làimh eile, faodaidh a h-uile dad anns a ’phìos bathar-cruaidh sin briseadh sìos, agus an toiseach Wifi.

An toiseach, chuir mi romham “feadag” USB-Wifi saor a cheannach, plug a-steach don aon phort air a ’BPI agus dìochuimhnich mu na uèirichean. Gus seo a dhèanamh, cheannaich mi TP-LINK TL-WN725N USB 2.0 saor, ach gu math luath thàinig e am follais nach toireadh e dheth: airson an fhìdeag a bhith ag obair, feumaidh tu draibhear kernel, nach robh, gu dearbh, ann (nas fhaide air adhart chruinnich mi an draibhear RTL8XXXU riatanach, ach tha e fhathast neo-phractaigeach). Agus rinn an càball Ethernet milleadh air coltas an t-seòmair airson greis.

Mar thoradh air an sin, fhuair mi air falbh an càball le cuideachadh bho Tenda MW3 (siostam mogaill Wifi): chuir mi dìreach aon chiùb fon bhòrd agus cheangail mi am BPI ri port LAN an tè mu dheireadh le càball Ethernet meatair de dh'fhaid. Soirbheachas.

Geàrd-uèir, RKN, Eun

Is e aon de na rudan a tha mi airson Banana PI a chleachdadh a bhith a’ faighinn cothrom an-asgaidh air làraich air am bacadh le RKN, gu sònraichte, gus an obraich gairmean Telegram agus Slack. Chaidh artaigilean air Habré a mholadh air a’ chuspair seo mu thràth: amannan, два, trì.

Chleachd mi am fuasgladh seo gu dìreach a’ cleachdadh Ansible: ceangal.

Thathas a’ gabhail ris gu bheil an VPS a’ ruith Ubuntu 18.04. Thug mi sùil air comasachd dà neach-aoigheachd san Roinn Eòrpa: Amazon agus Digital Ocean.

Mar sin, chuir sinn a-steach an Armbian gu h-àrd air R64, tha e ruigsinneach tro ssh fon ainm hm-bananapi-1 agus tha cothrom air an eadar-lìon. Bidh sinn gu cunbhalach a’ cleachdadh Ansible, sgriobtaichean fèin-ghluasaid agus a’ cur air bhog an stàladh fhèin air 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

An ath rud, feumaidh tu ar VPN a chuir gu VPS san aon dòigh:

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

An seo tha an argamaid an-còmhnaidh gnàthach-vpn, agus tha an fhìor ainm VPS air a rèiteachadh ann an caochladair (sa chùis seo is e paris-vpn-aws-t2-micro-1 a th’ ann):

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

O tha, ro na h-obraichean sin uile feumaidh tu dìomhaireachdan a ghineadh (gu sònraichte iuchraichean Wireguard) a-steach don phasgan ./secrets, bu chòir gum biodh an eòlaire coltach mar sin.

Automation iomchaidh ann am Python

Is dòcha gu mothaich thu, an àite a bhith ann an cruth YAML, gu bheil na h-òrdughan Ansible air an còdachadh ann an sgriobtaichean Python. Airson coimeas a dhèanamh, mar a chuireas tu an daemon an sàs san dòigh àbhaisteach:

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

agus mar a nì thu an aon rud tro Python:

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

Le bhith a’ sgrìobhadh òrdughan Ansible ann am Python leigidh sin leat an còd ath-chleachdadh, agus san fharsaingeachd a’ fosgladh a h-uile comas a th’ aig a’ chànan coitcheann. Mar eisimpleir, stàladh eun air R64 agus VPS:

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

faic an còd gnìomh install_bird().

Tha am feart seo ris an canar pybook air a chur an gnìomh an seo. Chan eil sgrìobhainnean sam bith air pybook fhathast, ach socraichidh mi a’ chùis seo nas fhaide air adhart.

Dè tha e a’ smaoineachadh shuas an abhainn mu dheidhinn seo.

A' cumail sùil. Prometheus

Iomlan: teileagram ag obair, linkedin agus pornhub cuideachd, san fharsaingeachd tha eòlas an neach-cleachdaidh ceart gu leòr. Ach faodaidh a h-uile dad briseadh, a’ toirt a-steach bathar-cruaidh Sìneach.

Faodaidh ùrachaidhean kernel a bhith inntinneach cuideachd: mar eisimpleir, bha mi airson kernel 5.4 => 5.6 ùrachadh, uill, tha Wireguard ann a-mach às a’ bhogsa, chan eil feum air paisteadh... gu 5.4, thòisich an kernel suas, an tunail chun an VPS pinged, ach chan urrainn don eun ceangal a dhèanamh ris a’ mhearachd “Mearachd BGP” ... “Rolaig mi air ais ann an uamhas” (c) gu 5.6; Chaidh an gluasad gu 5.4 a chuir dheth ann an TODO.

Mar sin, a bharrachd air a bhith a’ stàladh an router agus VPS, chuir mi sùil ris (air x86 Ubuntu 18.04), a tha air a chuir a-steach air aoigheachd air leth leis na pàirtean a leanas:

  • prometheus, manaidsear rabhaidh, blackbox_exporter - uile ann an docker
  • Bithear a’ cur rabhaidhean chun t-sianail teileagram a’ cleachdadh am bot metalmatze/alertmanager-bot - cuideachd ann an Docker
  • tor airson a’ bot, gus an urrainn don bot rabhadh a thoirt dha suidheachaidhean nuair a tha eadar-lìn ann, ach chan eil teileagram fhathast ag obair, agus chan urrainn don bot fhèin ceangal a dhèanamh
  • air a chur an sàs rabhaidhean: NodeVPNTtroubles (gun ping gu VPS), BirdVPNTtroubles (gun seisean eòin), AntifilterDownloadTroubles (mearachd a’ luchdachadh seòlaidhean IP a chaidh a bhacadh), SiteTroubles (chan eil teileagram mì-fhortanach ri fhaighinn)
  • rabhaidhean siostam, mar eisimpleir, HostGrowingDiskReadLatency (cairt SD saor gu bhith neo-leughaidh)

Eisimpleir stàlaidh sgrùdaidh:

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

Tha Auto Discovery airson Prometheus air a rèiteachadh sa phasgan /etc/prometheus/auto_http, eisimpleir de bhith a’ cur aoigheachd ri sgrùdadh (chan eilear a’ cumail sùil air luchd-aoigheachd gu bunaiteach):

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 sholaraiche, 2 BPI, fàilligeadh sam bith

A bharrachd air a h-uile càil, bha mi an dùil ceangal a dhèanamh ri dà sholaraiche gus an leanadh an eadar-lìn ag obair, eadhon ged a bhiodh duilgheadas aig aon sholaraiche leis an lìonra, no ma dhìochuimhnich iad pàigheadh ​​​​airson an eadar-lìn, msaa, agus factaran daonna eile.

Thathas a’ toirt cunntas air an eòlas cleachdaiche as adhartaiche air cuspair ioma-wan an seo airson siostam Mwan3 fo Openwrt. Tha comas-gnìomh beairteach aig an fhuasgladh seo, ach tha e gu math duilich a stèidheachadh agus obrachadh san fharsaingeachd airson ioma-wan. Dìreach aon eisimpleir: ma thig thu gu cuid de làraich bho dhà sheòladh IP aig an aon àm, is dòcha nach toil leotha e, stadaidh iad ag obair => “chan eil an eadar-lìn ag obair.”

A’ toirt aire don eòlas seo, cho-dhùin mi nach e prìomhachas a th’ ann an ioma-sheòrsachd fhathast, dìreach fàilligeadh. Ged, tha e coltach gum bu chòir anns na dreachan as ùire de Linux a h-uile càil obrachadh le aon àithne mar:

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

Mar sin, gus aon phuing fàiligeadh a sheachnadh, bidh sinn a’ gabhail 2 BPIs, a’ ceangal gach fear ri aon sholaraiche, gan ceangal ri chèile agus a’ dèanamh ceangal ri chèile a’ gluasad gu fiùghantach tro eun/OSPF.

An ath rud, bidh sinn a’ sanasachadh an aon sheòladh IP air gach fear ma tha an t-seirbheis ri fhaighinn (Eadar-lìon, DNS). Is e sin, cha shuidhich sinn an t-slighe bunaiteach sinn fhìn, ach tro eun. Chleachd mi am fuasgladh an seo .

Cha deach an gnìomh seo a chuir an gnìomh fhathast, chluich an coronavirus brùideil cleas an seo (cha tàinig a h-uile càil bho Aliexpress; gheall stòr air-loidhne eile, Layta, lìbhrigeadh ann an seachdain, ach tha còrr air mìos air a dhol seachad; cha robh ùine aig an dàrna solaraiche gus an càball a leudachadh ro cuarantine, cha deach aige air ach toll ann an drile fhaighinn a-steach don bhalla airson a’ chàball).

Mar a nì thu òrdugh R64

Tha am bòrd fhèin anns a’ bhùth oifigeil SinVoip.
Tha e nas fheàrr cuideachd òrdachadh sa bhad:

  • beathachadh + cuir fios gu inbhe plug an EU no na SA
  • sinc teas: rèididheatoran/luchd-leantainn; oir tha an dà chuid an CPU agus a’ chip suidse a’ teasachadh suas
  • antenna wifi, mar eisimpleir

Tha nuance ann - tha a ’phrìs lìbhrigidh air fàs gu math àrd anns a’ bhùth oifigeil airson ùine. Thug am manaidsear Judy Huang cinnteach dhomh nach robh mearachd ann, agus dh’ fhaodadh tu ePacket a thaghadh airson $5, ach chunnaic mi nach eil ann airson an Ruis ach EMS airson> $33. Mì-thlachdmhor, ach chan eil e riatanach. A bharrachd air an sin, ma thaghas tu dùthaich sam bith eile airson lìbhrigeadh (chaidh mi tro na mòr-thìrean gu lèir), cosgaidh lìbhrigeadh ~ $ 5. Russophobes?..

Mar thoradh air an sin, thairg Judy òrdugh a chuir, ach gun a bhith a’ pàigheadh ​​(blasad: cuir nas lugha air a 'chairt gus nach tèid am pàigheadh ​​​​fèin-ghluasadach troimhe); sgrìobh thuice agus lughdaichidh i a’ phrìs lìbhrigidh gu àbhaisteach. Soirbheachas.

cùisean

Chan eil a h-uile dad ag obair gu foirfe fhathast.

Coileanadh

Ansible=Thèid òrdughan Python a chur an gnìomh gu slaodach, eadhon feadhainn leisg, airson 20-30 diog; òrdugh meud nas fhaide na air laptop x86. A bharrachd air an sin, an toiseach bidh iad air an cur gu bàs gu math luath, ~ 3 diogan, an uairsin bidh iad a ’slaodadh sìos gu sgiobalta. Dh'fhaodadh seo a bhith mar thoradh air an CPU teasachadh suas (smeòrach). Bidh an còd Go cuideachd a’ toirt ùine mhòr airson obrachadh:

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

Bidh Wifi ag obair, ach air Armbian stadaidh e às deidh timcheall air latha, tha e a’ sgrìobhadh:

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

Chan eil ach ath-thòiseachadh na chuideachadh. Feumaidh sinn gluasad air adhart Rèitich.

Ethernet

Bidh Ethernet ag obair, ach às deidh ~ pacaidean 64 uair (DHCP) bho RXNUMX stad air ruighinn.
Cuidichidh ath-thòiseachadh an eadar-aghaidh:

ifdown br0; sleep 30; ifup br0

Tha an draibhear ùr, cha deach gabhail ris a-steach don kernel fhathast, tha mi an dòchas gur e Landen Chao Sìneach a th’ ann cuir crìoch air.

Source: www.habr.com

Cuir beachd ann