Banana Pi 64 нь Raspberry Pi-тэй төстэй нэг самбарт компьютер боловч хэд хэдэн Ethernet порттой бөгөөд үүнийг ерөнхий зориулалтын Linux түгээлт дээр суурилсан чиглүүлэгч болгон хувиргах боломжтой болгодог.
Тийм ээ, аль хэдийн Openwrt байдаг, гэхдээ энэ нь өөрийн гэсэн асуудлуудтай, GUI болон CLI; Mikrotik байгаа, гэхдээ дахин өөрийн GUI/CLI-тай, Wireguard нь хайрцагнаас гарч ажиллахгүй байна ... Ерөнхийдөө би таны ажилладаг стандарт Линуксийн хүрээнд үлдэж, уян хатан тохиргоотой чиглүүлэгчийг хүсч байна. өдөр бүр хамт.
BPI, R64, нэг самбар гэсэн нэрийн дор бичсэн нийтлэлд би ижил зүйлийг хэлэх болно - Banana Pi R64 нэг самбар өөрөө.
Зураг сонгох. eMMC-ээр татаж авах
Ажиллаж байхдаа олж авах ёстой хамгийн эхний ур чадвар
USB-UART-ээр R64-тэй холбогдох алгоритм:
- Бид USB-UART кабель (PL2303, Serial-to-USB) авахаар радио сэлбэгийн дэлгүүрт очдог.
- Доорх зурган дээрх шиг нэг USB үзүүрийг компьютерт, нөгөө нь UART-ийг R64-д дөрөвөөс гурван утсаар холбоно.
- компьютерийн консол дээр ажиллуулах
sudo minicom
Үүний дараа ихэнх тохиолдолд нэг самбарт консол гарч ирэх болно = амжилт.
Та дэлгэрэнгүй мэдээллийг харах боломжтой
Дараа нь хамгийн хялбар арга бол үйлдлийн системийг SD картаас ачаалах явдал юм: татаж авах
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
Бид картыг R64 SD үүрэнд хийж, асааж, холбогдсон консол ачаалагдаж, эхлээд ачаалж, дараа нь стандарт Линукс ачаалагдаж байгааг ажиглана.
Өөр ачаалах сонголт бол eMMC гэж нэрлэгддэг R64-д суулгасан 8Gb картыг ашиглах явдал юм. Вики дэх зааврын дагуу бид зургийг төхөөрөмжид хуулж авдаг
/dev/mmcblk0-г BPI руу шилжүүлж, дахин ачаалж, SD картыг салгаад, BPI-г дахин асаана ... энэ нь ажиллахгүй байна. Яаж нааш цааш явах вэ Boot select
битгий санаа зов.
Баримт нь ядаж BPI-ийн хувьд дотоод флаш дискнээс ачаалахын тулд тусгай туг тавих хэрэгтэй.
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]
Дараа нь та тусгай ачаалах хуваалт руу preloader бичих хэрэгтэй
root@bpi-r64:~# echo 0 > /sys/block/mmcblk0boot0/force_ro
root@bpi-r64:~# dd if=preloader_evb7622_64_foremmc.bin of=/dev/mmcblk0boot0
Үйлдвэрлэгч R64 (Хятад) энэ хоёртын хувилбарыг нийтэлсэн
Ерөнхийдөө үүний дараа зургууд eMMC-ээс ачаалж эхэлдэг. Хэрэв та үүнийг ойлгож, эхнээс нь зураг үүсгэхийг хүсч байвал хоёр тохиолдолд (SD/eMMC) цөмийг ачаалахын тулд хэд хэдэн файл (SD картны урьдчилан ачаалагч, ATF, u-boot) бичих хэрэгтэй. Энэ сэдэв хэвээр байна
Одоо би eMMC-ээр татаж авдаг, үнэнийг хэлэхэд би үүнийг ашигладаггүй, SD карт хангалттай, гэхдээ үүнийг ажиллуулахын тулд би маш их цаг зарцуулсан тул нийтлэлд оруулаарай.
Үйлдлийн системийг сонгох. Армби
Аппликэйшний эхний ажил бол Wireguard-г эхлүүлэх явдал юм. Цөм талдаа угсраагүй, толгой байхгүй байгааг тэр даруй олж мэдсэн. Би цөмийг дахин бүтээж, x86-г ашигладаг зуршлынхаа дагуу DKMS ашиглан цөмийн модулийг угсарсан. Гэсэн хэдий ч arm64 дээр жижиг хэрэгслүүдийг барих хурд нь намайг тааламжгүй гайхшруулсан. Дараа нь өөр цөмийн модуль шаардлагатай байсан гэх мэт. Ерөнхийдөө цөмтэй холбоотой бүх зүйлийг дулаан x86 зөөврийн компьютер дээр хамгийн сайн угсарч, дараа нь энгийн хуулж, дахин ачаалж, туршиж үзээд R64 руу шилжүүлдэг нь харагдаж байна.
Өөр нэг зүйл бол хэрэглэгчийн орон зайн хэсэг юм. Миний хувьд Debian-г сонгосон тохиолдолд arm64 архитектурт зориулсан бүх зүйл packages.debian.org дээр байгаа бөгөөд юу ч дахин бүтээх шаардлагагүй.
Өөр унадаг дугуй үйлдвэрлэхгүйн тулд И
Өөрөөр хэлбэл, энэ нь: хэрэглэгчийн орон зай нь Armbian бөгөөд цөмийг репозитороос авсан болно.
R64 програм хангамжийн хэсгийг боловсруулах бүх үйл ажиллагаа явагдаж байна
Ажлын байрны зохион байгуулалт: утас
Би тус тусад нь, хөгжүүлэлт/туршилтын явцад SBC-г (зөвхөн BPI биш) хэрхэн ширээн дээр байрлуулж, интернетийн эх сурвалжаас Ethernet кабелийг өрөө/оффис даяар дамжуулахгүй байхыг танд хэлэхийг хүсч байна. Үнэн хэрэгтээ та нэг талаас интернетээр тоног төхөөрөмжөөр хангах хэрэгтэй, гэхдээ нөгөө талаас тэр техник хангамжийн бүх зүйл, юуны түрүүнд Wifi эвдэрч магадгүй юм.
Эхлээд би хямдхан USB-Wifi "шүгэл" худалдаж авахаар шийдсэн бөгөөд үүнийг BPI дээрх цорын ганц порт руу залгаад утсыг мартав. Үүнийг хийхийн тулд би хямд үнэтэй TP-LINK TL-WN725N USB 2.0 худалдаж авсан боловч удалгүй энэ нь салахгүй нь тодорхой болсон: шүгэл ажиллахын тулд танд цөмийн драйвер хэрэгтэй байсан нь мэдээжийн хэрэг тэнд байгаагүй. (дараа нь би шаардлагатай RTL8XXXU драйверийг угсарсан, гэхдээ энэ нь боломжгүй хэвээр байна). Мөн Ethernet кабель хэсэг хугацаанд өрөөний үзэмжийг сүйтгэсэн.
Үүний үр дүнд би Tenda MW3 (Wifi торон систем) -ийн тусламжтайгаар кабелиас салж чадсан: Би зүгээр л нэг кубыг ширээн доор байрлуулж, BPI-ийг метр урт Ethernet кабелиар сүүлийн LAN порт руу холбосон. Амжилт.
Утас хамгаалагч, RKN, Шувуу
Banana PI-г ашиглахыг хүсч байгаа зүйлсийн нэг бол RKN-ээс хаасан сайтууд руу үнэгүй нэвтрэх, ялангуяа Telegram болон Slack дуудлага хийх боломжтой байх явдал юм. Энэ сэдвээр Хабрегийн талаархи нийтлэлүүдийг аль хэдийн санал болгосон:
Би Ansible ашиглан яг энэ шийдлийг ашигласан:
VPS нь Ubuntu 18.04 үйлдлийн системтэй гэж таамаглаж байна. Би Европ дахь Amazon болон Digital Ocean гэсэн хоёр хостын ажиллагааг шалгасан.
Тиймээс, бид дээрх Armbian-ийг R64 дээр суулгасан бөгөөд энэ нь нэрээр ssh-ээр нэвтрэх боломжтой hm-bananapi-1
мөн интернэт холболттой. Бид Ansible, автоматжуулалтын скриптүүдийг байнга байрлуулж, 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
Дараа нь та манай VPN-г VPS-д дараах байдлаар байрлуулах хэрэгтэй.
ansible-playbook ./router.py -l current-vpn
Энд аргумент нь үргэлж одоогийн-vpn бөгөөд бодит VPS нэрийг хувьсагчаар тохируулсан байдаг (энэ тохиолдолд энэ нь 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
Өө тийм, эдгээр бүх үйлдлүүдийг хийхийн өмнө та хавтсанд нууц (ялангуяа Wireguard түлхүүр) үүсгэх хэрэгтэй. ./secrets
, лавлах нь иймэрхүү харагдах ёстой
Python дахь Ansible Automation
YAML форматын оронд Ansible командууд нь Python скриптэд кодлогдсон болохыг та анзаарсан байх. Харьцуулбал шувууны демоныг ердийн аргаар хэрхэн идэвхжүүлэх вэ:
- name: start bird
systemd:
name: bird
state: started
enabled: yes
мөн Python-ээр хэрхэн ижил зүйлийг хийх вэ:
with mapping:
append("name", "start bird")
with mapping("systemd"):
append("name", "bird")
append("state", "started")
append("enabled", "yes")
Python дээр Ansible командуудыг бичих нь кодыг дахин ашиглах боломжийг олгодог бөгөөд ерөнхийдөө ерөнхий зориулалтын хэлний бүх боломжийг нээж өгдөг. Жишээлбэл, R64 болон VPS дээр шувуу суулгах:
install_bird("router/bird.conf.j2")
install_bird("vpn/bird.conf.j2")
функцийн кодыг үзнэ үү
Энэ функцийг дуудсан pybook
хэрэгжүүлсэн
Тэр юу гэж бодож байна
Хяналт. Прометей
Нийт: telegram ажилладаг, linkedin болон pornhub, ерөнхийдөө хэрэглэгчийн туршлага зүгээр. Гэхдээ бүх зүйл эвдэрч болно, тэр дундаа Хятадын техник хангамж.
Цөмийн шинэчлэлтүүд бас сонирхолтой байж болно: жишээ нь, би цөмийн 5.4 => 5.6-г шинэчлэхийг хүссэн, сайн, Wireguard хайрцагнаас гарсан байна, нөхөөс хийх шаардлагагүй ... Хэсэг хугацааны дараа: Би 5.4-ээс засваруудыг маш их хичээнгүйлэн шилжүүлсэн. 5.6-д цөм ажиллаж, VPS-ийн хонгил дуугарсан боловч шувуу "BGP алдаа" гэсэн алдаатай холбогдож чадахгүй байна ... "Би аймаар буцаж эргэлээ" (в) 5.4 хүртэл; TODO-д 5.6 руу шилжихийг хойшлуулсан.
Тиймээс, чиглүүлэгч болон VPS суулгахаас гадна би дараах бүрэлдэхүүн хэсгүүдтэй тусдаа хост дээр суулгасан мониторингийг (x86 Ubuntu 18.04 дээр) нэмсэн.
- prometheus, alertmanager, blackbox_exporter - бүгд докер дээр
- Сэрэмжлүүлэгийг telegram суваг руу metalmatze/alertmanager-bot бот ашиглан илгээдэг - мөн Docker дээр
- tor-д зориулсан, ингэснээр bot нь интернет байгаа үед нөхцөл байдлыг сэрэмжлүүлэх боломжтой боловч Telegram ажиллахгүй байгаа бөгөөд бот өөрөө холбогдож чадахгүй байна.
- хэрэглэсэн
сэрэмжлүүлэг : NodeVPNtroubles (VPS-д ping хийхгүй), BirdVPNroubles (Шувууны сесс байхгүй), AntifilterDownloadTroubles (хаагдсан IP хаягуудыг ачаалахад алдаа), SiteTroubles (хөгжилтэй телеграм ашиглах боломжгүй) - системийн сэрэмжлүүлэг, жишээлбэл, HostGrowingDiskReadLatency (хямдхан SD карт унших боломжгүй болно)
Мониторинг суурилуулах жишээ:
ansible-playbook ./monitoring.py -l monitoring-preprod
Prometheus-д зориулсан Auto Discovery нь /etc/prometheus/auto_http хавтсанд тохируулагдсан бөгөөд энэ нь хяналтад хост нэмэх жишээ юм (хостуудыг анхдагчаар хянадаггүй):
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
ХИЙХ ХИЙХ: 2 үйлчилгээ үзүүлэгч, 2 BPI, дурын дамжуулалтын шилжүүлэлт
Бүх зүйлээс гадна нэг үйлчилгээ үзүүлэгчийн сүлжээнд асуудал гарсан, эсвэл интернетийн төлбөр төлөхөө мартсан ч гэсэн интернет үргэлжлүүлэн ажиллахын тулд би хоёр үйлчилгээ үзүүлэгчтэй холбогдохоор төлөвлөж байсан.
Multi-wan сэдвээр хамгийн дэвшилтэт хэрэглэгчийн туршлагыг тайлбарласан болно
Энэ туршлагыг харгалзан би multihoming нь нэн тэргүүний асуудал биш, зөвхөн бүтэлгүйтэл гэж шийдсэн. Гэсэн хэдий ч Linux-ийн хамгийн сүүлийн хувилбаруудад бүх зүйл нэг тушаалаар ажиллах ёстой юм шиг санагдаж байна:
ip route add default
nexthop via 192.168.1.1 weight 10
nexthop via 192.168.2.1 weight 5
Тиймээс, нэг цэгийн бүтэлгүйтлээс зайлсхийхийн тулд бид 2 BPI авч, тус бүрийг нэг үйлчилгээ үзүүлэгчтэй холбож, тэдгээрийг хооронд нь холбож, шувуу/OSPF-ээр дамжуулан динамик чиглүүлэлт хийдэг.
Дараа нь, хэрэв үйлчилгээ (Интернет, DNS) байгаа бол бид тус бүр дээр ижил IP хаягийг сурталчилдаг. Өөрөөр хэлбэл, бид анхдагч замыг өөрсдөө тогтоохгүй, харин шувуугаар дамжин өнгөрөх болно. Би шийдлийг тагнасан
Энэ функц хараахан хэрэгжээгүй, нууцлаг коронавирус энд заль мэх тоглосон (бүгд Aliexpress-ээс ирээгүй; өөр нэг онлайн дэлгүүр Лайта долоо хоногийн дараа хүргэнэ гэж амласан боловч нэг сар гаруй хугацаа өнгөрчээ; хоёр дахь үйлчилгээ үзүүлэгчд цаг зав гарсангүй. хорио цээрийн өмнө кабелийг сунгахын тулд зөвхөн кабелийн хананд өрөмдлөгийн нүх гаргаж чадсан).
R64 хэрхэн захиалах вэ
Самбар нь өөрөө албан ёсны дэлгүүрт байдаг
Мөн нэн даруй захиалах нь дээр:
хоол хүнс + ЕХ эсвэл АНУ-ын залгуурын стандартыг мэдээлэх- дулаан шингээгч: радиатор / сэнс; Учир нь CPU болон шилжүүлэгчийн чип хоёулаа халж байна
- wifi антен,
Жишээ нь
Нэг нюанс бий - хүргэлтийн үнэ хэсэг хугацаанд албан ёсны дэлгүүрт хангалтгүй өндөр болсон. Менежер Жуди Хуан намайг ямар ч алдаа байхгүй гэж итгүүлсэн бөгөөд та ePacket-ийг 5 доллараар сонгож болно, гэхдээ Орост зөвхөн 33 доллараас дээш үнэтэй EMS байдаг гэдгийг би харсан. Тааламжгүй, гэхдээ шүүмжлэлтэй биш. Түүгээр ч барахгүй, хэрэв та хүргэлт хийх өөр аль нэг улсыг сонговол (би бүх тивээр явсан) хүргэлтийн үнэ ~5 доллар болно. Орософууд уу?.. Харин дараа нь Францын хувьд хүргэлтийн үнэ нь бас ~30 доллар болохыг олж мэдээд тайвширлаа.
Үүний үр дүнд Жуди захиалга өгөхийг санал болгосон боловч төлөхгүй (сануулга: автомат төлбөр дамжихгүйн тулд картанд бага тавь); Түүнд бичээрэй, тэр хүргэлтийн үнийг хэвийн хэмжээнд хүртэл бууруулах болно. Амжилт.
асуудлууд
Одоохондоо бүх зүйл төгс ажиллаж чадахгүй байна.
Бүтээмж
Ansible=Python командуудыг 20-30 секундын турш удаан, сул зогсолттой байсан ч гэсэн гүйцэтгэдэг; x86 зөөврийн компьютерээс урт хэмжээний дараалал. Түүгээр ч барахгүй эхлээд тэд маш хурдан, ~ 3 секундын турш гүйцэтгэгдэж, дараа нь огцом удааширдаг. Энэ нь CPU халж байгаатай холбоотой байж болох юм. 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
51700
Wifi
Wifi ажилладаг, гэхдээ Armbian дээр нэг өдрийн дараа зогсдог гэж бичжээ.
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
...
Зөвхөн дахин эхлүүлэх нь тусалдаг. Бид цаашаа явах хэрэгтэй
Ethernet
Ethernet ажилладаг, гэхдээ ~64 цагийн дараа RXNUMX-ийн пакетууд (DHCP) ирэхээ болино.
Интерфэйсийг дахин эхлүүлэх нь дараахад тусална.
ifdown br0; sleep 30; ifup br0
Жолооч нь шинэ, энэ нь цөмд хараахан зөвшөөрөгдөөгүй байна, би Хятадын Ланден Чао байх гэж найдаж байна
Эх сурвалж: www.habr.com