Banana Pi 64 minangka komputer papan siji sing padha karo Raspberry Pi, nanging kanthi sawetara port Ethernet, sing ndadekake iku bisa dadi router adhedhasar distribusi Linux umum.
Ya, wis ana Openwrt, nanging duwe masalah dhewe, GUI lan CLI; Ana Mikrotik, nanging maneh wis GUI dhewe / CLI, lan Wireguard ora bisa metu saka kothak ... Umumé, aku pengin router karo setelan fleksibel, nalika isih ing framework saka Linux standar, sing bisa digunakake. karo saben dina.
Ing artikel ing jeneng BPI, R64, siji-papan, Aku bakal ateges bab sing padha - Pisang Pi R64 single-papan dhewe.
Milih gambar. Ngundhuh liwat eMMC
Katrampilan pisanan sing kudu sampeyan entuk nalika nggarap SBC umume, lan R64 ing tartamtu, iki tegese sinau carane mbukak sistem operasi menyang lan bisa sesambungan karo, amarga R64 ora duwe port kanggo monitor (Contone, HDMI). Nalika kabeh ambruk - Wifi, Ethernet, Bluetooth, USB, etc.. Ana UART, liwat antarmuka sing tansah bisa ndeleng apa salah, lan uga mbukak saperangan printah saka console, yen perlu.
Algoritma kanggo nyambungake menyang R64 liwat USB-UART:
kita mbukak menyang toko komponen radio kanggo kabel USB-UART (PL2303, Serial-to-USB)
nyambungake siji mburi USB menyang komputer, lan liyane, UART, kanggo R64, karo telung kabel saka papat, minangka ing gambar ngisor
mbukak ing console komputer sudo minicom
Sawise iki, ing paling kasus console siji-papan bakal katon = sukses.
Sampeyan bisa ndeleng rincian liyane kene.
Sabanjure, cara paling gampang kanggo mbukak sistem operasi saka kertu SD: download dening link gambar lan isi:
Kita masang kertu menyang slot SD R64, nguripake, lan mirsani console disambungake loading pisanan uboot, banjur standar Linux loading.
Pilihan boot alternatif nggunakake kertu 64Gb wis dibangun ing R8, disebut eMMC. Miturut pandhuan ing wiki, kita nyalin gambar menyang piranti
/ dev / mmcblk0 kanggo BPI, urip maneh, mbusak kertu SD, nguripake BPI maneh ... lan ora bisa. Carane bali lan kasebut Boot select ora repot.
Kasunyatane, paling ora kanggo BPI sampeyan kudu nyetel gendera khusus supaya bisa boot saka flash drive internal:
Produsen R64 (China) ngirim binar iki kene. Apa ora dingerteni (ora ana kode sumber), nanging uga ora bisa digunakake.
Umumé, sawise iki, gambar wiwit dimuat saka eMMC. Yen sampeyan pengin ngerti lan nggawe gambar saka awal, banjur kanggo loro kasus (SD / eMMC) sampeyan kudu nulis sawetara file liyane (preloader kanggo kertu SD, ATF, u-boot) mung kanggo mbukak kernel. Topik iki isih berkembang, nanging kanggo kita sing utama yaiku kerjane lan oke.
Saiki aku ngundhuh liwat eMMC, jujur, aku ora nggunakake, kertu SD cukup, nanging aku ngginakaken cukup akèh wektu kanggo njaluk iku kanggo bisa, supaya iku ing artikel.
Milih sistem operasi. Armbian
Tugas aplikasi pisanan yaiku mbukak VPN, kanthi alami Wireguard. Langsung ditemokake yen ing sisih kernel ora dirakit lan ora ana header. Aku dibangun maneh kernel lan, minangka pakulinan karo x86, nglumpuk modul kernel nggunakake DKMS. Nanging, kacepetan mbangun malah keperluan cilik ing arm64 unpleasantly kaget kula. Banjur modul kernel liyane dibutuhake, lsp. Umumé, kabeh sing ana hubungane karo kernel paling apik dipasang ing laptop x86 sing anget, banjur ditransfer menyang R64 kanthi nyalin prasaja, reboot lan diuji.
Bab liya yaiku bagean pangguna. Ing kasus milih Debian, kabeh kanggo arsitektur arm64 wis ana ing packages.debian.org lan ora perlu mbangun maneh.
Supaya ora ngasilake sepedha liyane, aku portingArmbia ing BPI R64.
Utawa, iki: bagean pangguna yaiku Armbian, lan kernel dijupuk saka gudang Frank-A. Gambar paling anyar bisa didownload kene.
Kabeh kegiatan ing pangembangan bagean lunak R64 digawa metu ing forum. Umumé, pabrikan dhewe ngupayakake popularitas router kanggo Openwrt, nanging amarga kegiyatan pangembang Frank saka Jerman, kabeh fitur kasebut cepet rampung ing kernel kanggo Debian. Kaget, Frank aktif ing saben thread forum.
Organisasi ruang kerja: kabel
Dhewe, Aku kaya kanggo pitutur marang kowe carane, sak pembangunan / testing, nyeleh SBC (ora mung BPI) ing meja supaya ora kanggo mbukak kabel Ethernet saka sumber Internet tengen kabeh kamar / kantor. Kasunyatan iku, ing tangan siji, sampeyan kudu nyedhiyani Piece saka hardware karo Internet, nanging ing tangan liyane, kabeh ing Piece saka hardware bisa break mudhun, lan pisanan kabeh Wifi.
Kaping pisanan, aku mutusake kanggo tuku "singsot" USB-Wifi sing murah, pasang menyang port mung ing BPI lan lali babagan kabel. Kanggo nindakake iki, aku tuku TP-LINK TL-WN725N USB 2.0 sing murah, nanging rauh dadi jelas yen ora bakal mandheg: kanggo singsot, sampeyan butuh driver kernel, sing mesthi ora ana. (mengko aku nglumpuk driver RTL8XXXU perlu, nanging isih ora praktis). Lan kabel Ethernet ngrusak tampilan kamar kanggo sawetara wektu.
Akibaté, aku ngatur kanggo njaluk nyisihaken saka kabel karo bantuan saka Tenda MW3 (Sistem bolong Wifi): Aku mung diselehake siji kubus ing meja lan nyambung BPI menyang port LAN terakhir karo kabel Ethernet meter-dawa. Sukses.
Wireguard, RKN, Manuk
Salah sawijining perkara sing dakkarepake kanggo nggunakake Banana PI yaiku duwe akses gratis menyang situs sing diblokir dening RKN, utamane, supaya telpon Telegram lan Slack bisa digunakake. Artikel babagan Habré wis diusulake babagan topik iki: kaping, два, telu.
Aku nyebarake solusi iki kanthi nggunakake Ansible: pranala.
VPS dianggep mbukak Ubuntu 18.04. Aku mriksa fungsi ing loro hoster ing Eropah: Amazon lan Digital Ocean.
Dadi, kita nginstal Armbian ing ndhuwur ing R64, bisa diakses liwat ssh miturut jeneng kasebut hm-bananapi-1 lan nduweni akses internet. Kita terus-terusan masang skrip otomatis, Ansible lan miwiti instalasi kasebut ing 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
Sabanjure, sampeyan kudu masang VPN kita menyang VPS kanthi cara sing padha:
ansible-playbook ./router.py -l current-vpn
Ing kene argumen kasebut mesthi saiki-vpn, lan jeneng VPS sing nyata dikonfigurasi ing variabel (ing kasus iki yaiku paris-vpn-aws-t2-micro-1):
Oh ya, sadurunge kabeh operasi kasebut, sampeyan kudu nggawe rahasia (utamane kunci Wireguard) menyang folder kasebut ./secrets, direktori kudu katon kaya supaya.
Automation Ansible ing Python
Sampeyan bisa uga sok dong mirsani yen tinimbang ing format YAML, printah Ansible dienkode ing skrip Python. Kanggo mbandhingake, carane ngaktifake daemon manuk kanthi cara biasa:
with mapping:
append("name", "start bird")
with mapping("systemd"):
append("name", "bird")
append("state", "started")
append("enabled", "yes")
Nulis printah Ansible ing Python ngijini sampeyan kanggo nggunakake maneh kode, lan ing umum mbukak kabeh kemungkinan saka basa umum. Contone, nginstal manuk ing R64 lan VPS:
Total: karya telegram, linkedin lan pornhub uga, umume pengalaman pangguna ok. Nanging kabeh bisa rusak, kalebu hardware Cina.
Nganyari kernel uga bisa dadi menarik: contone, aku pengin nganyari kernel 5.4 => 5.6, uga Wireguard ana metu saka kothak, ora perlu patch ... Ora cepet ngandika saka rampung: Aku painstakingly nransfer patch saka 5.4 kanggo 5.6, kernel miwiti munggah, trowongan kanggo VPS pinged, nanging manuk ora bisa nyambung karo kesalahan "BGP Error" ... "Aku mbalek maneh ing medeni" (c) kanggo 5.4; Pindhah menyang 5.6 ditundha ing TODO.
Mulane, saliyane nginstal router lan VPS, aku nambah pemantauan (ing x86 Ubuntu 18.04), sing diinstal ing host sing kapisah karo komponen ing ngisor iki:
prometheus, alertmanager, blackbox_exporter - kabeh ing docker
Tandha dikirim menyang saluran telegram nggunakake bot metalmatze/alertmanager-bot - uga ing Docker
tor kanggo bot, supaya bot bisa menehi tandha kahanan nalika ana Internet, nanging telegram isih ora bisa, lan bot dhewe ora bisa nyambung
ditrapake tandha: NodeVPNTroubles (ora ana ping menyang VPS), BirdVPNTroubles (ora ana sesi Bird), AntifilterDownloadTroubles (kesalahan ngemot alamat IP sing diblokir), SiteTroubles (telegram sing ora ana nasibe ora kasedhiya)
tandha sistem, contone, HostGrowingDiskReadLatency (kertu SD murah dadi ora bisa diwaca)
Auto Discovery for Prometheus dikonfigurasi ing folder /etc/prometheus/auto_http, conto nambahake host kanggo ngawasi (host ora dipantau kanthi standar):
Saliyane kabeh, aku ngrancang kanggo nyambung menyang loro panyedhiya supaya Internet bakal terus bisa, sanajan siji panyedhiya duwe masalah karo jaringan, utawa padha kelalen mbayar Internet, etc., lan faktor manungsa liyane.
Pengalaman pangguna paling maju babagan topik multi-wan diterangake kene kanggo sistem Mwan3 ing Openwrt. Solusi iki nduweni fungsi sing sugih, nanging nyetel lan ngoperasikake umume kanggo multi-wan cukup nyusahake. Mung siji conto: yen sampeyan teka ing sawetara situs saka rong alamat IP bebarengan, bisa uga ora seneng, bakal mandheg mlaku => "Internet ora bisa digunakake."
Njupuk menyang akun pengalaman iki, Aku mutusaké sing multihoming durung prioritas, mung failover. Senajan, misale jek ing versi paling anyar saka Linux kabeh kudu bisa karo siji printah kaya:
ip route add default
nexthop via 192.168.1.1 weight 10
nexthop via 192.168.2.1 weight 5
Dadi, supaya titik siji saka Gagal, njupuk 2 BPIs, nyambung saben siji panyedhiya, nyambung menyang saben liyane lan nggawe sambungan karo saben rute dinamis liwat manuk / OSPF.
Sabanjure, kita ngiklanake alamat IP sing padha ing saben siji yen layanan kasedhiya (Internet, DNS). Yaiku, kita ora bakal nyetel rute standar dhewe, nanging liwat manuk. Aku spied solusi kene .
Fungsi iki durung dileksanakake, coronavirus insidious main trik ing kene (ora kabeh teka saka Aliexpress; toko online liyane, Layta, janji bakal dikirim sajrone seminggu, nanging luwih saka sasi wis liwati; panyedhiya nomer loro ora duwe wektu. kanggo ngluwihi kabel sadurunge quarantine, mung ngatur kanggo njaluk bolongan ing pengeboran menyang tembok kanggo kabel).
Carane supaya R64
Papan kasebut dhewe ana ing toko resmi SinoVoip.
Iku uga luwih apik kanggo pesen langsung:
Ana nuansa - rega pangiriman wis dadi ora cukup dhuwur ing toko resmi kanggo sawetara wektu. Manager Judy Huang nggawe percoyo kula sing ora ana kesalahan, lan sampeyan bisa milih ePacket kanggo $ 5, nanging aku weruh sing kanggo Rusia mung ana EMS kanggo> $ 33. Ora nyenengake, nanging ora kritis. Kajaba iku, yen sampeyan milih negara liya kanggo pangiriman (aku ngliwati kabeh bawana), pangiriman bakal biaya ~ $5. Russophobes?.. Nanging banjur aku ketemu sing kanggo Prancis rega pangiriman uga ~ 30$, lan aku calmed mudhun.
Akibaté, Judy nawarake pesenan, nanging ora mbayar (Petunjuk: sijine kurang ing kertu supaya pembayaran otomatis ora liwat); nulis kanggo dheweke lan dheweke bakal nyuda rega pangiriman menyang normal. Sukses.
masalah
Ora kabeh bisa digunakake kanthi sampurna.
Produktivitas
Ansible=Python printah dieksekusi alon-alon, malah nganggur, kanggo 20-30 detik; urutan gedhene luwih saka ing laptop x86. Kajaba iku, ing wiwitan dieksekusi kanthi cepet, ~ 3 detik, banjur alon-alon alon-alon. Iki bisa uga amarga CPU dadi panas (throttling). Kode Go uga butuh wektu suwe kanggo bisa digunakake:
# запрос метрик для прометея из 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 bisa digunakake, nanging ing Armbian mandheg sawise udakara sedina, nyerat: