Banana Pi 64-ը Raspberry Pi-ին նման մեկ տախտակով համակարգիչ է, բայց մի քանի Ethernet պորտերով, ինչը հնարավորություն է տալիս այն վերածել երթուղիչի՝ հիմնված Linux-ի ընդհանուր նշանակության բաշխման վրա:
Այո, արդեն կա Openwrt, բայց այն ունի իր խնդիրները՝ իր GUI-ն և CLI-ն; Mikrotik-ը կա, բայց նորից իր GUI/CLI-ն ունի, ու Wireguard-ը դուրս չի գալիս... Ընդհանրապես, ես ուզում եմ ճկուն կարգավորումներով երթուղիչ, մինչդեռ մնա ստանդարտ Linux-ի շրջանակում, որը դու ես աշխատում. ամեն օրվա հետ։
BPI, R64, մեկ տախտակ անուններով հոդվածում ես նկատի կունենամ նույն բանը՝ հենց ինքը Banana Pi R64 մեկ տախտակը:
Պատկերի ընտրություն. Ներբեռնեք eMMC-ի միջոցով
Առաջին հմտությունը, որը դուք պետք է ձեռք բերեք հետ աշխատելիս SBC ընդհանուր առմամբ, և մասնավորապես R64-ի դեպքում, դա նշանակում է սովորել, թե ինչպես բեռնել օպերացիոն համակարգը դրա մեջ և կարողանալ շփվել դրա հետ, քանի որ R64-ը չունի մոնիտորի համար պորտ (օրինակ, HDMI): Երբ ամեն ինչ ընկավ՝ Wifi-ը, Ethernet-ը, Bluetooth-ը, USB-ն և այլն, դադարեցին աշխատել: Կա UART, որի ինտերֆեյսի միջոցով դուք միշտ կարող եք տեսնել, թե ինչն է սխալվել, ինչպես նաև, անհրաժեշտության դեպքում, մի քանի հրաման գործարկել վահանակից:
USB-UART-ի միջոցով R64-ին միանալու ալգորիթմ.
մենք վազում ենք ռադիոյի մասերի խանութ USB-UART մալուխի համար (PL2303, Սերիական-USB)
USB մի ծայրը միացրեք համակարգչին, իսկ մյուսը՝ UART-ը, R64-ին, չորսից երեք լարով, ինչպես ստորև նկարում
գործարկել համակարգչային վահանակում sudo minicom
Դրանից հետո շատ դեպքերում կհայտնվի մեկ տախտակի վահանակ = հաջողություն:
Դուք կարող եք տեսնել ավելի մանրամասն այստեղ.
Հաջորդը, ամենահեշտ ձևը օպերացիոն համակարգը SD քարտից բեռնելն է ՈՒղեցույց պատկերը և լրացրեք այն.
Մենք քարտը տեղադրում ենք R64 SD բնիկի մեջ, միացնում ենք այն և դիտում ենք կապակցված վահանակի բեռնումը նախ uboot, ապա ստանդարտ Linux բեռնում:
Բեռնման այլընտրանքային տարբերակն օգտագործում է R64-ում արդեն ներկառուցված 8 Գբ քարտ, որը կոչվում է eMMC: Վիքիում նշված ցուցումների համաձայն՝ պատկերը պատճենում ենք սարքին
/dev/mmcblk0 դեպի BPI, վերագործարկեք, հեռացրեք SD քարտը, նորից միացրեք BPI-ն... և այն չի աշխատում: Ինչպես հետ ու առաջ գնալ Boot select մի անհանգստացեք.
Փաստն այն է, որ առնվազն BPI-ի համար անհրաժեշտ է հատուկ դրոշ դնել, որպեսզի կարողանաք բեռնել ներքին ֆլեշ կրիչից.
Արտադրող R64-ը (Չինաստան) տեղադրել է այս երկուական տարբերակը այստեղ. Այն, ինչ անում է, անհայտ է (աղբյուրային կոդեր չկան), բայց առանց դրա նույնպես չի աշխատի:
Ընդհանուր առմամբ, սրանից հետո պատկերները սկսում են բեռնվել eMMC-ից։ Եթե ցանկանում եք դա պարզել և զրոյից պատկերներ ստեղծել, ապա երկու դեպքում էլ (SD/eMMC) պետք է գրել ևս մի քանի ֆայլ (նախաբեռնիչ SD քարտի համար, ATF, u-boot), որպեսզի հասնեք միջուկը բեռնելուն: Այս թեման դեռ զարգանում է, բայց մեզ համար գլխավորն այն է, որ այն աշխատում է և լավ է:
Այժմ ես ներբեռնում եմ eMMC-ի միջոցով, ճիշտն ասած, չեմ օգտագործում այն, բավական է SD քարտը, բայց ես բավականին շատ ժամանակ եմ ծախսել, որպեսզի այն աշխատի, այնպես որ թող լինի հոդվածում:
Օպերացիոն համակարգի ընտրություն: Արմբյանը
Ծրագրի առաջին խնդիրն է գործարկել VPN, բնականաբար, Wireguard: Անմիջապես պարզվեց, որ միջուկի կողմից այն հավաքված չէր և վերնագրեր չկան: Ես վերակառուցեցի միջուկը և, ինչպես սովորություն էի x86-ի հետ, հավաքեցի միջուկի մոդուլը՝ օգտագործելով DKMS: Սակայն arm64-ի վրա նույնիսկ փոքր կոմունալ ծառայությունների կառուցման արագությունն ինձ տհաճորեն զարմացրեց։ Եվ հետո պահանջվեց մեկ այլ միջուկի մոդուլ և այլն: Ընդհանուր առմամբ, պարզվում է, որ միջուկի հետ կապված ամեն ինչ լավագույնս հավաքվում է տաք x86 նոութբուքի վրա, այնուհետև տեղափոխվում է R64՝ պարզ պատճենահանման միջոցով, վերագործարկվում և փորձարկվում:
Մեկ այլ բան օգտվողների տարածքի մասն է: Debian-ի ընտրության դեպքում, arm64 ճարտարապետության համար ամեն ինչ արդեն առկա է packages.debian.org-ում և կարիք չկա որևէ բան վերակառուցելու:
Այլ հեծանիվ չարտադրելու համար Ի տեղափոխվածՀայբ BPI R64-ի վրա:
Ավելի ճիշտ՝ սա՝ userspace մասը Armbian է, իսկ միջուկը վերցված է պահոցից։ Անկեղծ-Ա. Վերջին պատկերը կարելի է ներբեռնել այստեղ.
R64-ի ծրագրային մասի մշակման ողջ գործունեությունը իրականացվում է ֆորում. Ընդհանուր առմամբ, արտադրողն ինքն է ձգտում հանրահռչակել Openwrt-ի երթուղիչը, սակայն Գերմանիայից Ֆրանկ մշակողի գործունեության շնորհիվ բոլոր հնարավորությունները արագ հայտնվում են Debian-ի միջուկում: Զարմանալիորեն, Ֆրենկն ակտիվ է ֆորումի յուրաքանչյուր թեմայում:
Աշխատանքային տարածքի կազմակերպում` լարեր
Առանձին-առանձին, ես կցանկանայի ձեզ պատմել, թե ինչպես մշակման/փորձարկման ընթացքում սեղանի վրա տեղադրել SBC (ոչ միայն BPI), որպեսզի ինտերնետ աղբյուրից Ethernet մալուխ չանցկացվի ամբողջ սենյակում/գրասենյակում: Փաստն այն է, որ մի կողմից պետք է ինտերնետով ապահովել սարքավորում, բայց մյուս կողմից այդ սարքավորման մեջ ամեն ինչ կարող է փչանալ, և առաջին հերթին Wifi-ը։
Նախ, ես որոշեցի գնել էժան USB-Wifi «սուլիչ», միացնել այն BPI-ի միակ պորտին և մոռանալ լարերի մասին: Դա անելու համար ես գնեցի էժան TP-LINK TL-WN725N USB 2.0, բայց շատ շուտով պարզ դարձավ, որ այն չի հեռանա. սուլիչն աշխատելու համար ձեզ անհրաժեշտ է միջուկի վարորդ, որն, իհարկե, այնտեղ չկար: (հետագայում ես հավաքեցի անհրաժեշտ RTL8XXXU դրայվերը, բայց դա դեռ անիրագործելի է): Իսկ Ethernet մալուխը որոշ ժամանակ փչացրեց սենյակի տեսքը։
Արդյունքում ինձ հաջողվեց ազատվել մալուխից Tenda MW3 (Wifi mesh համակարգ) օգնությամբ. ես պարզապես մեկ խորանարդ դրեցի սեղանի տակ և BPI-ն միացրեցի վերջինիս LAN պորտին մետր երկարությամբ Ethernet մալուխով: Հաջողություն.
Wireguard, RKN, Bird
Բանան PI-ն օգտագործելու բաներից մեկը, մասնավորապես, RKN-ի կողմից արգելափակված կայքերին անվճար մուտք ունենալն է, որպեսզի Telegram-ի և Slack-ի զանգերը կարողանան աշխատել: Habré-ի վերաբերյալ հոդվածներ արդեն առաջարկվել են այս թեմայով. ժամանակ, два, երեք.
Ես տեղադրեցի հենց այս լուծումը՝ օգտագործելով 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 է).
Օհ, այո, այս բոլոր գործողություններից առաջ անհրաժեշտ է թղթապանակում գաղտնիքներ ստեղծել (մասնավորապես, Wireguard ստեղները): ./secrets, գրացուցակը պետք է նման լինի այնքան.
Ansible ավտոմատացում Python-ում
Դուք կարող եք նկատել, որ YAML ձևաչափով լինելու փոխարեն, Ansible հրամանները կոդավորված են Python սկրիպտներում: Համեմատության համար, թե ինչպես կարելի է միացնել թռչնի դեյմոնը սովորական ձևով.
with mapping:
append("name", "start bird")
with mapping("systemd"):
append("name", "bird")
append("state", "started")
append("enabled", "yes")
Python-ում Ansible հրամաններ գրելը թույլ է տալիս նորից օգտագործել կոդը և, ընդհանուր առմամբ, բացում է ընդհանուր նշանակության լեզվի բոլոր հնարավորությունները: Օրինակ, թռչնի տեղադրումը R64-ի և VPS-ի վրա.
Ընդամենը. Telegram-ը աշխատում է, linkedin-ը և pornhub-ը նույնպես, ընդհանուր առմամբ, օգտագործողի փորձը լավ է: Բայց ամեն ինչ կարող է կոտրվել, ներառյալ չինական ապարատը:
Միջուկի թարմացումները նույնպես կարող են հետաքրքիր լինել. օրինակ, ես ուզում էի թարմացնել միջուկը 5.4 => 5.6, դե, Wireguard-ը դուրս է տուփից, կարկատելու կարիք չկա... Անմիջապես ասացի. մինչև 5.4, միջուկը գործարկվեց, թունելը դեպի VPS ping-ը, բայց թռչունը չի կարող միանալ «BGP Error» սխալի հետ... «Ես սարսափով հետ գլորվեցի» (c) մինչև 5.6; TODO-ում հետաձգվել է 5.4-ի անցումը:
Հետևաբար, բացի երթուղիչի և VPS-ի տեղադրումից, ես ավելացրեցի մոնիտորինգ (x86 Ubuntu 18.04-ում), որը տեղադրված է առանձին հոսթի վրա հետևյալ բաղադրիչներով.
prometheus, alertmanager, blackbox_exporter - բոլորը դոկերում
Ահազանգերը ուղարկվում են հեռագրային ալիք՝ օգտագործելով metalmatze/alertmanager-bot բոտը, ինչպես նաև Docker-ում:
tor bot-ի համար, որպեսզի բոտը կարողանա զգուշացնել իրավիճակների մասին, երբ կա ինտերնետ, բայց telegram-ը դեռ չի աշխատում, և բոտն ինքը չի կարող միանալ
դիմել է ահազանգերNodeVPNTroubles (առանց VPS-ի ping), BirdVPNT խնդիրներ (առանց Bird նիստի), AntifilterDownloadTroubles (արգելափակված IP հասցեների բեռնման սխալ), SiteTroubles (չարաբաստիկ հեռագիրն անհասանելի է)
համակարգի ծանուցումներ, օրինակ՝ HostGrowingDiskReadLatency (էժան SD քարտը դառնում է անընթեռնելի)
Prometheus-ի համար Auto Discovery-ը կազմաձևված է /etc/prometheus/auto_http թղթապանակում, մոնիտորինգին հոսթ ավելացնելու օրինակ (հոսթները լռելյայն չեն վերահսկվում).
Ի հավելումն ամեն ինչի, ես նախատեսում էի միանալ երկու պրովայդերների, որպեսզի ինտերնետը շարունակի աշխատել, եթե նույնիսկ մեկ պրովայդերն խնդիրներ ունենա ցանցի հետ, կամ նրանք մոռացել են վճարել ինտերնետի համար և այլն, և այլ մարդկային գործոններ:
Նկարագրված է մուլտի-վան թեմայի վերաբերյալ օգտագործողների առավել առաջադեմ փորձը այստեղ Openwrt-ի ներքո Mwan3 համակարգի համար: Այս լուծումն ունի հարուստ ֆունկցիոնալություն, սակայն այն կարգավորելն ու գործարկելն ընդհանրապես բազմա-վանի համար բավականին անհանգիստ է: Միայն մեկ օրինակ. եթե դուք միանգամից երկու IP հասցեից հայտնվեք որոշ կայքերի վրա, դա նրանց կարող է դուր չգալ, նրանք կդադարեն աշխատել => «Ինտերնետը չի աշխատում»:
Հաշվի առնելով այս փորձը՝ ես որոշեցի, որ բազմաբնակարանային աշխատանքը դեռ առաջնահերթություն չէ, այլ միայն ձախողում: Չնայած, թվում է, որ Linux-ի վերջին տարբերակներում ամեն ինչ պետք է աշխատի մեկ հրամանով, ինչպիսին է.
ip route add default
nexthop via 192.168.1.1 weight 10
nexthop via 192.168.2.1 weight 5
Այսպիսով, մեկ խափանման կետից խուսափելու համար մենք վերցնում ենք 2 BPI, յուրաքանչյուրը միացնում ենք մեկ մատակարարի, միացնում դրանք միմյանց և միմյանց հետ կապը դարձնում դինամիկ երթուղի bird/OSPF-ի միջոցով:
Հաջորդը, մենք գովազդում ենք նույն IP հասցեն յուրաքանչյուրի վրա, եթե ծառայությունը հասանելի է (Ինտերնետ, DNS): Այսինքն՝ մենք ինքներս չենք սահմանելու լռելյայն երթուղին, այլ թռչնի միջով։ Ես նկատեցի լուծումը այստեղ .
Այս ֆունկցիոնալությունը դեռ չի իրականացվել, ստոր կորոնավիրուսն այստեղ խաբել է (ամեն ինչ չէ, որ հասել է Aliexpress-ից. մեկ այլ առցանց խանութ՝ Layta-ն, խոստացել է առաքել մեկ շաբաթից, բայց անցել է ավելի քան մեկ ամիս, երկրորդ մատակարարը ժամանակ չի ունեցել։ մալուխը կարանտինից առաջ երկարացնելու համար, միայն հաջողվեց անցք բացել պատի մեջ մալուխի համար):
Ինչպես պատվիրել R64
Տախտակն ինքնին գտնվում է պաշտոնական խանութում SinoVoip.
Ավելի լավ է նաև անմիջապես պատվիրել.
սնունդ + տեղեկացրեք ԵՄ-ի կամ ԱՄՆ-ի վարդակից ստանդարտին
ջերմատախտակ՝ ռադիատորներ/օդափոխիչներ; քանի որ և՛ պրոցեսորը, և՛ անջատիչի չիպը տաքանում են
Մի նրբերանգ կա՝ առաքման գինը որոշ ժամանակով դարձել է ոչ ադեկվատ բարձր պաշտոնական խանութում։ Մենեջեր Ջուդի Հուանգը ինձ համոզեց, որ սխալ չկա, և դուք կարող եք ընտրել ePacket-ը $5-ով, բայց ես տեսա, որ Ռուսաստանի համար կա միայն EMS-ը >33 դոլարով: Տհաճ, բայց ոչ քննադատական: Ավելին, եթե առաքման համար ընտրեք որևէ այլ երկիր (ես անցել եմ բոլոր մայրցամաքներով), ապա առաքումը կարժենա ~5$։ Ռուսոֆոբե՞ր.. Բայց հետո գտա, որ Ֆրանսիայի համար էլ առաքման գինը ~30$ է, ու հանգստացա։
Արդյունքում Ջուդին առաջարկեց պատվիրել, բայց չվճարել (ակնարկՔարտի վրա ավելի քիչ դրեք, որպեսզի ավտոմատ վճարումը չանցնի); գրեք նրան, և նա կիջեցնի առաքման գինը նորմալ: Հաջողություն.
Հարցեր
Դեռ ամեն ինչ չէ, որ կատարյալ է աշխատում։
Արտադրողականություն
Ansible=Python հրամանները կատարվում են դանդաղ, նույնիսկ անգործուն, 20-30 վայրկյան; մեծության կարգով ավելի երկար, քան x86 նոութբուքի վրա: Ընդ որում, սկզբում դրանք կատարվում են բավականին արագ՝ ~3 վայրկյան, հետո կտրուկ դանդաղում են։ Դա կարող է պայմանավորված լինել պրոցեսորի տաքացումով (խեղդում): 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-ում մոտ մեկ օր հետո դադարում է, գրում է.