Ny Banana Pi 64 dia solosaina tokana mitovy amin'ny Raspberry Pi, saingy misy seranana Ethernet maromaro, izay ahafahana mamadika azy ho router mifototra amin'ny fizarana Linux amin'ny ankapobeny.

Eny, misy ny Openwrt, saingy manana ny maha-izy azy manokana izy, ny GUI sy CLI-ny manokana; misy ny Mikrotik, saingy manana ny GUI/CLI-ny manokana ihany koa izy, ary Wireguard Tsy mandeha avy hatrany amin'ny boaty ilay izy... Raha fintinina, mila router misy fikirana azo ovaina aho, sady mijanona ao anatin'ny rafitry ny Linux mahazatra izay iasako isan'andro.
Ao amin'ny lahatsoratra eo ambanin'ny anarana BPI, R64, single-board, dia mitovy ny tiako holazaina - ny Banana Pi R64 single-board mihitsy.
Mifidy sary. Misintona amin'ny eMMC
Ny fahaizana voalohany tokony ho azonao rehefa miasa amin'ny ankapobeny, ary amin'ny R64 manokana, izany dia midika hoe mianatra ny hampiditra rafitra miasa ao aminy ary afaka mifandray aminy, satria ny R64 dia tsy manana seranan-tsambo ho an'ny monitor (HDMI, ohatra). Rehefa nianjera ny zava-drehetra - Wifi, Ethernet, Bluetooth, USB, sns. Tsy miasa intsony ny UART, amin'ny alàlan'ny interface izay azonao jerena foana izay tsy nety, ary mihazakazaka baiko roa avy amin'ny console, raha ilaina.
Algorithm fampifandraisana amin'ny R64 amin'ny alàlan'ny USB-UART:
- mandeha any amin'ny fivarotana kojakoja radio izahay mba hahazoana tariby USB-UART (PL2303, Serial-to-USB)
- Ampifandraiso amin'ny ordinatera ny faran'ny USB iray, ary ny iray hafa, UART, amin'ny R64, miaraka amin'ny tariby telo amin'ny efatra, toy ny amin'ny sary etsy ambany.
- mihazakazaka ao amin'ny console solosaina
sudo minicom
Aorian'izany, amin'ny ankamaroan'ny tranga dia hiseho ny console tokana tokana = fahombiazana.
Afaka mahita antsipiriany bebe kokoa ianao .

Manaraka, ny fomba tsotra indrindra dia ny fampidinana ny rafitra miasa amin'ny karatra SD: alaina amin'ny sary ary fenoy azy:
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=noxferAmpidiro ao amin'ny slot R64 SD ny karatra, avereno izany, ary diniho ny console mifandray amin'ny fametrahana ny uboot voalohany, avy eo ny fandefasana Linux mahazatra.
Safidy baoritra hafa dia mampiasa karatra 64Gb efa namboarina tao amin'ny R8, antsoina hoe eMMC. Araka ny toromarika ao amin'ny wiki dia mandika ny sary amin'ny fitaovana izahay
/dev/mmcblk0 mankany amin'ny BPI, reboot, esory ny karatra SD, avereno indray ny BPI ... dia tsy mandeha. Ahoana ny fandehanana miverina Boot select aza manelingelina.
Ny zava-misy dia farafaharatsiny ho an'ny BPI dia mila mametraka saina manokana ianao mba hahafahanao manomboka amin'ny flash drive anatiny:
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]Manaraka, mila manoratra preloader amin'ny fizarazarana boot manokana ianao
root@bpi-r64:~# echo 0 > /sys/block/mmcblk0boot0/force_ro
root@bpi-r64:~# dd if=preloader_evb7622_64_foremmc.bin of=/dev/mmcblk0boot0Ny mpanamboatra R64 (Shina) dia namoaka ity binary ity . Tsy fantatra ny ataony (tsy misy kaody loharano), saingy tsy mandeha koa izany raha tsy misy azy.
Amin'ny ankapobeny, aorian'izany dia manomboka mipetaka amin'ny eMMC ny sary. Raha te hamantatra izany ianao ary hamorona sary avy amin'ny scratch, dia ho an'ny tranga roa (SD/eMMC) dia mila manoratra rakitra maromaro kokoa ianao (preloader ho an'ny karatra SD, ATF, u-boot) mba hahazoana ny kernel. Mbola io lohahevitra io , fa ho anay ny zava-dehibe dia ny miasa sy mety.
Ankehitriny aho dia misintona amin'ny alàlan'ny eMMC, raha ny marina, tsy mampiasa azy aho, karatra SD dia ampy, saingy nandany fotoana be aho mba hampandehanana azy, ka avelao ho ao amin'ny lahatsoratra.
Misafidiana rafitra miasa. Armeniana
Ny asa azo ampiharina voalohany dia ny fandefasana VPN, mazava ho azy WireguardHitako avy hatrany fa tsy voaangona tsara ny kernel, ary tsy nisy lohateny. Namboariko indray ny kernel ary, araka ny fahazarako amin'ny x86, dia nanamboatra module kernel aho tamin'ny fampiasana DKMS. Na izany aza, ny hafainganam-pandehan'ny fanamboarana amin'ny ARM64, na dia ho an'ny fitaovana kely aza, dia nahagaga tsy nampoizina. Avy eo dia nilaina ny module kernel hafa, sy ny sisa. Raha fintinina, hita fa ny zavatra rehetra mifandraika amin'ny kernel dia tsara kokoa ny manangona amin'ny solosaina finday x86 efa tonta, avy eo dia adika sy apetaka fotsiny ao amin'ny ARM64, averina averina ampiasaina, ary andramana.
Ny lafiny fampiasana toerana dia raharaha hafa. Raha ny amiko, ny safidy Debian, ny zava-drehetra ho an'ny maritrano arm64 dia efa ao anaty packages.debian.org ary tsy mila averina angonina intsony.
Mba tsy hamokatra bisikileta hafa, I ny BPI R64.
Na ny marimarina kokoa, ity: ny faritra mpampiasa dia Armbian, ary ny kernel dia nalaina tao amin'ny tahiry -A. Ny sary farany dia azo alaina .
Ny hetsika rehetra amin'ny fampandrosoana ny ampahany amin'ny rindrambaiko R64 dia tanterahana amin'ny Amin'ny ankapobeny, ny mpanamboatra mihitsy no miezaka mampalaza ny router ho an'ny OpenWrt, saingy noho ny asan'ny mpamorona Frank avy any Alemaina, dia haingana dia haingana ny endri-javatra rehetra dia tonga ao amin'ny kernel ho an'ny Debian-a. Mahagaga fa mavitrika amin'ny sehatra fifanakalozan-kevitra rehetra i Frank.
Fandaminana toeram-piasana: tariby
Misaraka, tiako ny hilaza aminao ny fomba, mandritra ny fivoarana/fitsapana, mametraka SBC (fa tsy BPI fotsiny) eo ambony latabatra mba tsy hampandehanana tariby Ethernet avy amin'ny loharano Internet manerana ny efitrano / birao iray manontolo. Ny zava-misy dia, amin'ny lafiny iray, mila manome fitaovana miaraka amin'ny Internet ianao, fa amin'ny lafiny iray, ny zavatra rehetra ao anatin'io fitaovana io dia mety ho rava, ary voalohany indrindra Wifi.
Voalohany, nanapa-kevitra ny hividy "sioka" USB-Wifi mora vidy aho, ampidiro ao amin'ny seranana tokana ao amin'ny BPI ary adino ny tariby. Mba hanaovana izany, dia nividy TP-LINK TL-WN725N USB 2.0 mora vidy aho, saingy tsy ela dia nazava fa tsy hiala izany: mila mpamily kernel ianao, izay mazava ho azy fa tsy teo. (Taty aoriana dia nanangona ny mpamily RTL8XXXU ilaina aho, saingy mbola tsy azo ampiharina izany). Ary ny tariby Ethernet dia nanimba ny endriky ny efitrano nandritra ny fotoana kelikely.
Vokatr'izany dia nahavita nanala ny tariby aho tamin'ny fanampian'ny Tenda MW3 (rafitra Wifi mesh): Nametraka goba iray fotsiny aho teo ambanin'ny latabatra ary nampifandray ny BPI tamin'ny seranan-tsambo LAN farany tamin'ny tariby Ethernet iray metatra. Fahombiazana.
Wireguard, RKN, Vorona
Ny iray amin'ireo zavatra tiako hampiasaina amin'ny Banana PI dia ny fahafahana miditra malalaka amin'ny tranokala voasakana RKN, indrindra indrindra, mba hahafahan'ny Telegram sy Slack antso. Ny lahatsoratra momba ny Habré dia efa naroso momba ity lohahevitra ity: , , .
Nampiasa ity vahaolana ity aho tamin'ny fampiasana Ansible: .
Heverina fa miasa eo ambanin'ny Ubuntu 18.04 Aprily. Notsapaiko tamin'ny mpamatsy fampiantranoana roa any Eoropa ny fiasany: Amazon sy Digital Ocean.
Noho izany, nametraka ny Armbian etsy ambony amin'ny R64 izahay, azo idirana amin'ny ssh eo ambanin'ny anarana hm-bananapi-1 ary manana fidirana aterineto. Mametraka tsy tapaka ansible, automatique scripts izahay ary manomboka ny fametrahana azy amin'ny 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-1Manaraka, mila mametraka ny VPN amin'ny VPS amin'ny fomba mitovy ianao:
ansible-playbook ./router.py -l current-vpnEto ny tohan-kevitra dia amin'izao fotoana izao-vpn, ary ny tena anaran'ny VPS dia namboarina amin'ny fari-piainana (amin'ity tranga ity dia 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-1Eny, alohan'ireo asa rehetra ireo dia mila mamorona tsiambaratelo ianao (indrindra fa ny fanalahidy) Wireguard) mankany amin'ny lahatahiry ./secrets, ny lahatahiry dia tokony ho toy ny .
Ansible Automation amin'ny Python
Mety ho tsikaritrareo fa raha tokony ho amin'ny endrika YAML, ny baiko Ansible dia voakodia amin'ny script Python. Ho fampitahana, ny fomba ahafahan'ny daemon vorona amin'ny fomba mahazatra:
- name: start bird
systemd:
name: bird
state: started
enabled: yesary ny fomba hanaovana izany amin'ny alàlan'ny Python:
with mapping:
append("name", "start bird")
with mapping("systemd"):
append("name", "bird")
append("state", "started")
append("enabled", "yes")Ny fanoratana baiko Ansible amin'ny Python dia ahafahanao mampiasa indray ny kaody, ary amin'ny ankapobeny dia manokatra ny fahafaha-manao rehetra amin'ny fiteny tanjona ankapobeny. Ohatra, fametrahana vorona amin'ny R64 sy VPS:
install_bird("router/bird.conf.j2")
install_bird("vpn/bird.conf.j2")jereo ny kaody fiasa .
Ity endri-javatra antsoina hoe pybook ampiharina . Tsy mbola misy antontan-taratasy momba ny pybook, fa hamboariko io olana io any aoriana.
Inona no heveriny amin'ity fotoana ity.
Fanaraha-maso. Prometheus
Total: miasa telegrama, linkedin ary pornhub koa, amin'ny ankapobeny dia mety ny traikefan'ny mpampiasa. Saingy mety ho tapaka ny zava-drehetra, anisan'izany ny fitaovana sinoa.
Mety hahaliana ihany koa ny fanavaozana ny kernel: ohatra, te-hanavao ny kernel 5.4 => 5.6 aho, eny, eo Wireguard Vao avy novakiana, tsy mila manamboatra "patch" intsony... Vao vita ny voalaza dia vita: Namindra tamim-pitandremana ireo "patches" avy amin'ny 5.4 ho 5.6 aho, nanomboka ny kernel, ny "tunnel" mankany amin'ny ping VPS, saingy tsy afaka mifandray amin'ny fahadisoana "BGP Error" i Bird... "Tamin'ny horohoro, niverina aho" (c) ho 5.4; napetraka tao amin'ny TODO ny fifindrana ho 5.6.
Noho izany, ankoatra ny fametrahana ny router sy VPS, dia nanampy fanaraha-maso (amin'ny x86) aho. Ubuntu 18.04), izay napetraka amin'ny mpampiantrano misaraka miaraka amin'ireto singa manaraka ireto:
- prometheus, alertmanager, blackbox_exporter - ao anaty docker daholo
- Ny fampandrenesana dia alefa amin'ny fantsona telegrama amin'ny alàlan'ny metalmatze/alertmanager-bot bot - ao amin'ny Docker ihany koa
- tor ho an'ny bot, mba ahafahan'ny bot mampitandrina ny toe-javatra misy ny Internet, saingy mbola tsy mandeha ny Telegram, ary tsy afaka mifandray ny bot.
- ampiharina : NodeVPNTroubles (tsy misy ping amin'ny VPS), BirdVPNTroubles (tsy misy Bird session), AntifilterDownloadTroubles (tsy misy hadisoana amin'ny fametrahana ny adiresy IP voasakana), SiteTroubles (tsy misy ny telegrama ratsy)
- fampandrenesana rafitra, ohatra, HostGrowingDiskReadLatency (tsy azo vakina ny karatra SD mora)
Ohatra fametrahana fanaraha-maso:
ansible-playbook ./monitoring.py -l monitoring-preprodAuto Discovery for Prometheus dia natsangana tao amin'ny lahatahiry /etc/prometheus/auto_http, ohatra amin'ny fampidirana mpampiantrano amin'ny fanaraha-maso (tsy voara-maso ny mpampiantrano):
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: Mpanome 2, BPI 2, failover anycast
Ho fanampin'ny zava-drehetra, dia nikasa ny hifandray amin'ny mpamatsy roa aho mba hitohizan'ny Internet, na dia manana olana amin'ny tambajotra aza ny mpamatsy iray, na hadinony ny nandoa ny Internet, sns., sy ireo anton-javatra hafa momba ny olombelona.
Ny traikefan'ny mpampiasa mandroso indrindra momba ny lohahevitra momba ny multi-wan dia nofaritana ho an'ny rafitra Mwan3 eo ambanin'ny Openwrt. Ity vahaolana ity dia manana fiasa manankarena, fa ny fametrahana sy ny fampiasana azy amin'ny ankapobeny ho an'ny multi-wan dia tena manahirana. Ohatra iray fotsiny: raha tonga any amin'ny tranokala sasany avy amin'ny adiresy IP roa miaraka ianao, dia mety tsy ho tian'izy ireo izany, hijanona tsy hiasa => "tsy mandeha ny Internet."
Raha jerena ity traikefa ity dia nanapa-kevitra aho fa tsy laharam-pahamehana ny multihoming, fa failover ihany. Na izany aza, toa amin'ny dikan-teny farany amin'ny Linux dia tokony hiasa amin'ny baiko iray toy ny:
ip route add default
nexthop via 192.168.1.1 weight 10
nexthop via 192.168.2.1 weight 5Noho izany, mba hialana amin'ny teboka iray tsy fahombiazana, dia maka 2 BPIs, mampifandray ny tsirairay amin'ny mpamatsy iray, mampifandray azy ireo amin'ny tsirairay ary manao ny fifandraisana amin'ny tsirairay dynamic routing amin'ny alalan'ny vorona / OSPF.
Manaraka, manao dokam-barotra mitovy amin'ny adiresy IP tsirairay izahay raha misy ny serivisy (Internet, DNS). Izany hoe, tsy ny tenantsika no hametraka ny lalana default, fa amin'ny alalan'ny vorona. Nijery ny vahaolana aho .
Mbola tsy nampiharina io fampiasa io, nanao fika teto ny coronavirus mamitaka (tsy tonga avy amin'ny Aliexpress daholo ny zava-drehetra; fivarotana an-tserasera iray hafa, Layta, nampanantena fa hanatitra ao anatin'ny herinandro, fa efa lasa iray volana mahery; tsy nanam-potoana ny mpamatsy faharoa. mba hanitarana ny telegrama alohan'ny hanaovana confinement, dia tsy nahavita nanao lavaka tao amin'ny rindrina ho an'ny tariby ihany).
Ahoana no hanafatra R64
Ny birao mihitsy dia ao amin'ny fivarotana ofisialy .
Aleo koa manafatra avy hatrany:
- + ampahafantaro ny fenitra plug EU na US
- fanapotehana: radiators/fants; satria samy mafana ny CPU sy ny chip switch
- antena wifi,
Misy ny nuance - ny vidin'ny fanaterana dia nanjary tsy dia avo loatra tao amin'ny fivarotana ofisialy nandritra ny fotoana ela. Ny mpitantana Judy Huang dia nandresy lahatra ahy fa tsy misy hadisoana, ary azonao atao ny misafidy ePacket amin'ny $5, saingy hitako fa ho an'i Russia dia tsy misy afa-tsy EMS amin'ny> $33. Tsy mahafinaritra, fa tsy manakiana. Ambonin'izany, raha misafidy firenena hafa hanaterana ianao (namakivaky ny kaontinanta rehetra aho), dia mitentina ~ $5 ny fandefasana. Russophobes?.. Saingy hitako fa ho an'i Frantsa ny vidin'ny fanaterana koa dia ~30$, ary tony aho.
Vokatr'izany dia nanolotra baiko i Judy fa tsy nandoa (Soso-kevitra: asiana kely amin'ny karatra mba tsy handehanan'ny fandoavam-bola mandeha ho azy); manorata any aminy dia ahenany ho ara-dalàna ny vidin'ny fanaterana. Fahombiazana.
olana
Tsy mbola mandeha tsara ny zava-drehetra.
vokatra
Ansible=Ny baiko Python dia tanterahina miadana, na dia tsy miasa aza, mandritra ny 20-30 segondra; filaharana lehibe kokoa noho ny amin'ny solosaina finday x86. Ankoatr'izay, amin'ny voalohany dia novonoina haingana izy ireo, ~ 3 segondra, avy eo dia miadana mafy izy ireo. Mety ho noho ny fiakaran'ny hafanana (throttling) ny CPU. Mitaky fotoana maharitra ihany koa ny kaody Go:
# запрос метрик для прометея из 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
Miasa ny Wifi, fa amin'ny Armbian dia mijanona izany rehefa afaka iray andro, nanoratra hoe:
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
...Ny famerenana ihany no manampy. Mila mandroso isika .
Ethernet
Miasa ny Ethernet, fa rehefa afaka ~ 64 ora fonosana (DHCP) avy amin'ny RXNUMX mijanona tsy tonga.
Ny famerenana indray ny interface dia manampy:
ifdown br0; sleep 30; ifup br0Vaovao ny mpamily, mbola tsy nekena ho ao anaty kernel, manantena aho fa ilay Sinoa Landen Chao .
Source: www.habr.com
