Banana Pi 64 mangrupikeun komputer papan tunggal anu sami sareng Raspberry Pi, tapi kalayan sababaraha palabuhan Ethernet, anu ngamungkinkeun anjeun ngarobih kana router dumasar kana distribusi Linux tujuan umum.
Sumuhun, geus aya Openwrt, tapi boga masalah sorangan, GUI na CLI; Aya Mikrotik, tapi deui boga GUI sorangan / CLI, sarta Wireguard teu dianggo out of the box ... Sacara umum, abdi hoyong router kalawan setélan fléksibel, bari tetep dina kerangka Linux Ubuntu baku, nu anjeun damel. kalawan unggal poé.
Dina tulisan dina nami BPI, R64, single-board, kuring bakal hartosna hal anu sami - Banana Pi R64 single-board sorangan.
Milih hiji gambar. Unduh via eMMC
Kaahlian anu pangheulana anjeun kedah kéngingkeun nalika damel KTSP sacara umum, tur kalawan R64 hususna, ieu hartina diajar kumaha ngamuat hiji sistem operasi kana eta sarta bisa berinteraksi sareng eta, sabab R64 teu boga port pikeun monitor a (Contona, HDMI). Nalika sagalana murag - Wifi, Ethernet, Bluetooth, USB, jsb dieureunkeun gawé. Aya UART, ngaliwatan antarbeungeut nu salawasna bisa ningali naon nu salah, sarta ngajalankeun sababaraha paréntah ti konsol, upami diperlukeun.
Algoritma pikeun nyambungkeun ka R64 via USB-UART:
urang ngajalankeun ka toko bagian radio pikeun kabel USB-UART (PL2303, Serial-to-USB)
sambungkeun hiji tungtung USB ka komputer, sarta séjén, UART, mun R64, kalawan tilu kawat kaluar opat, sakumaha dina gambar di handap ieu.
ngajalankeun dina konsol komputer sudo minicom
Saatos ieu, dina kalolobaan kasus bakal muncul konsol papan tunggal = sukses.
Anjeun tiasa ningali langkung rinci di dieu.
Salajengna, cara panggampangna nyaéta pikeun ngamuat sistem operasi tina kartu SD: unduh ku link gambar sareng eusian:
Urang selapkeun kartu kana slot R64 SD, hurungkeun, sarta nitenan konsol disambungkeun loading uboot munggaran, lajeng loading Linux Ubuntu.
Hiji pilihan boot alternatif ngagunakeun kartu 64Gb geus diwangun kana R8, disebut eMMC. Numutkeun petunjuk dina wiki, urang nyalin gambar ka alat
/ dev / mmcblk0 mun BPI, reboot, nyabut kartu SD, ngahurungkeun BPI deui ... na teu dianggo. Kumaha mun mudik Boot select ulah ngaganggu.
Kanyataanna nyaéta sahenteuna pikeun BPI anjeun kedah nyetél bandéra khusus supados tiasa boot ti flash drive internal:
Produsén R64 (Cina) dipasang binér ieu di dieu. Naon anu teu dipikanyaho (teu aya kodeu sumber), tapi moal tiasa dianggo tanpa éta.
Sacara umum, saatos ieu, gambar mimiti dimuat tina eMMC. Upami anjeun hoyong terang sareng nyiptakeun gambar ti mimiti, teras pikeun dua kasus (SD / eMMC) anjeun kedah nyerat sababaraha file deui (preloader pikeun kartu SD, ATF, u-boot) ngan ukur pikeun ngamuat kernel. Topik ieu masih ngembang, Tapi pikeun urang hal utama anu gawéna sarta oke.
Ayeuna kuring unduh via eMMC, jujur, kuring henteu nganggo éta, kartu SD cekap, tapi kuring nyéépkeun seueur waktos pikeun damel, janten dina tulisan éta.
Milih hiji sistem operasi. Arbian
Tugas aplikasi anu munggaran nyaéta ngaluncurkeun VPN, sacara alami Wireguard. Langsung kapanggih yén di sisi kernel éta henteu dirakit sareng henteu aya header. Kuring ngawangun deui kernel sareng, sakumaha kabiasaan kuring sareng x86, ngarakit modul kernel nganggo DKMS. Sanajan kitu, laju ngawangun malah Utiliti leutik on arm64 unpleasantly kaget kuring. Lajeng modul kernel sejen diperlukeun, jsb. Sacara umum, tétéla yén sagalana nu patali jeung kernel pangalusna dirakit dina laptop x86 haneut, lajeng dipindahkeun ka R64 ku nyalin basajan, rebooted sarta diuji.
Hal anu sanés nyaéta bagian ruang pangguna. Dina kasus kuring milih Debian, sadayana pikeun arsitéktur arm64 parantos aya dina packages.debian.org sareng henteu kedah ngawangun deui nanaon.
Supaya henteu ngahasilkeun sapédah sanés, kuring portingArbian dina BPI R64.
Atawa rada, ieu: bagian userspace nyaeta Armbian, sarta kernel dicokot tina Repository nu terus terang-A. Gambar panganyarna tiasa diunduh di dieu.
Sadaya kagiatan dina ngembangkeun bagian software R64 dilumangsungkeun dina forum. Sacara umum, produsén sorangan narékahan pikeun ngapopulérkeun router pikeun Openwrt, tapi berkat kagiatan pamekar Frank ti Jerman, sadaya fitur gancang ditungtungan dina kernel pikeun Debian. Ahéng, Frank aktip dina unggal thread forum.
Organisasi workspace: kawat
Kapisah, Abdi hoyong ngabejaan ka maneh kumaha, salila ngembangkeun / nguji, nempatkeun hiji SBC (teu ngan BPI) dina méja ku kituna teu ngajalankeun kabel Ethernet ka dinya ti sumber Internet sakuliah sakabéh kamar / kantor. Nyatana, di hiji sisi, anjeun kedah nyayogikeun sapotong hardware nganggo Internét, tapi di sisi anu sanés, sadayana dina sapotong hardware éta tiasa ngarecah, sareng mimitina Wifi.
Mimiti, kuring mutuskeun mésér "pisel" USB-Wifi anu murah, nyolok kana hiji-hijina port dina BPI sareng hilap kabelna. Jang ngalampahkeun ieu, kuring ngagaleuh TP-LINK TL-WN725N USB 2.0 anu murah, tapi pas janten jelas yén éta moal pareum: pikeun suling damel, anjeun peryogi supir kernel, anu, tangtosna, henteu aya. (engké kuring dirakit supir RTL8XXXU perlu, tapi masih praktis). Jeung kabel Ethernet manja katingal kamar bari.
Hasilna, kuring junun meunang leupas tina kabel kalayan bantuan Tenda MW3 (Sistim bolong Wifi): Kuring ngan nempatkeun hiji kubus handapeun méja tur nyambungkeun BPI ka port LAN kiwari dimungkinkeun ku kabel Ethernet méter-lila. Kasuksésan.
Wireguard, RKN, Manuk
Salah sahiji hal anu kuring hoyong nganggo Banana PI nyaéta gaduh aksés gratis kana situs anu diblokir ku RKN, khususna, supados telepon Telegram sareng Slack tiasa jalan. Artikel ngeunaan Habré parantos diusulkeun ngeunaan topik ieu: waktu, два, tilu.
Kuring nyebarkeun persis solusi ieu nganggo Ansible: link.
VPS dianggap ngajalankeun Ubuntu 18.04. Kuring pariksa pungsionalitasna dina dua hoster di Éropa: Amazon sareng Digital Ocean.
Janten, urang pasang Armbian di luhur dina R64, éta tiasa diaksés via ssh handapeun nami hm-bananapi-1 sarta boga aksés internét. Urang konsistén nyebarkeun Ansible, skrip automation sareng ngaluncurkeun pamasangan sorangan dina 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
Salajengna, anjeun kedah nyebarkeun VPN kami ka VPS dina cara anu sami:
ansible-playbook ./router.py -l current-vpn
Di dieu argumenna salawasna ayeuna-vpn, sareng nami VPS saleresna dikonpigurasi dina variabel (dina hal ieu paris-vpn-aws-t2-micro-1):
Oh enya, sateuacan sadaya operasi ieu anjeun kedah ngahasilkeun rusiah (khususna konci Wireguard) kana polder ./secrets, diréktori kudu kasampak kawas janten.
Automation Ansible dina Python
Anjeun tiasa perhatikeun yén tinimbang dina format YAML, paréntah Ansible disandikeun dina skrip Python. Pikeun babandingan, kumaha cara ngaktipkeun daemon manuk ku cara biasa:
with mapping:
append("name", "start bird")
with mapping("systemd"):
append("name", "bird")
append("state", "started")
append("enabled", "yes")
Nulis paréntah Ansible di Python ngidinan Anjeun pikeun make deui kode, sarta sacara umum muka nepi sagala kemungkinan tina basa tujuan umum. Salaku conto, masang manuk dina R64 sareng VPS:
Total: karya telegram, linkedin sareng pornhub ogé, sacara umum pangalaman pangguna henteu kunanaon. Tapi sagalana bisa megatkeun, kaasup hardware Cina.
Pembaruan kernel ogé tiasa pikaresepeun: contona, kuring hoyong ngamutahirkeun kernel 5.4 => 5.6, ogé Wireguard aya di luar kotak, teu kedah ditambal... Teu lami-lami saurna: Kuring teras-terasan mindahkeun patches tina 5.4. ka 5.6, kernel dimimitian nepi, torowongan ka VPS pinged, tapi manuk teu bisa nyambung jeung kasalahan "BGP Kasalahan" ... "Kuring digulung deui horor" (c) ka 5.4; Pindah ka 5.6 ditunda di TODO.
Ku alatan éta, salian masang router sareng VPS, kuring nambihan monitoring (dina x86 Ubuntu 18.04), anu dipasang dina host anu misah sareng komponén ieu:
prometheus, alertmanager, blackbox_exporter - sadayana di docker
Tanda dikirim ka saluran telegram nganggo bot metalmatze/alertmanager-bot - ogé dina Docker
tor pikeun bot, ku kituna bot tiasa waspada kaayaan nalika aya Internet, tapi Telegram masih teu jalan, sarta bot sorangan teu bisa nyambung.
dilarapkeun panggeuing: NodeVPNTroubles (euweuh ping kana VPS), BirdVPNTroubles (euweuh sesi Manuk), AntifilterDownloadTroubles (kasalahan ngamuat alamat IP anu diblokir), SiteTroubles (telegram anu teu aya nasibna henteu sayogi)
panggeuing sistem, contona, HostGrowingDiskReadLatency (kartu SD mirah janten teu tiasa dibaca)
Auto Discovery for Prometheus dikonpigurasi dina folder /etc/prometheus/auto_http, conto nambahkeun host pikeun ngawaskeun (host henteu diawaskeun sacara standar):
Salian sagalana, abdi rencanana pikeun nyambung ka dua panyadia ambéh Internet bakal neruskeun dianggo, sanajan hiji panyadia boga masalah sareng jaringan, atawa maranéhna poho mayar Internet, jsb, sarta faktor manusa séjén.
Pangalaman pangguna anu paling maju dina topik multi-wan dijelaskeun di dieu pikeun sistem Mwan3 handapeun Openwrt. Solusi ieu ngagaduhan fungsionalitas anu beunghar, tapi netepkeun sareng ngoperasikeunana sacara umum pikeun multi-wan cukup nyusahkeun. Ngan hiji conto: lamun datang ka sababaraha situs ti dua alamat IP sakaligus, maranéhna bisa jadi teu resep, maranéhna bakal eureun gawé => "Internet teu jalan."
Nyandak kana akun pangalaman ieu, abdi mutuskeun yén multihoming teu prioritas acan, ngan failover. Sanajan, sigana dina versi panganyarna tina Linux Ubuntu sagalana kedah dianggo kalayan hiji paréntah kawas:
ip route add default
nexthop via 192.168.1.1 weight 10
nexthop via 192.168.2.1 weight 5
Ku kituna, dina urutan ulah hiji titik gagalna, urang nyandak 2 BPIs, sambungkeun unggal hiji panyadia, sambungkeun ka silih tur nyieun sambungan saling routing dinamis via manuk / OSPF.
Salajengna, urang ngiklankeun alamat IP anu sami dina masing-masing upami jasana sayogi (Internet, DNS). Nyaéta, urang moal nyetél jalur standar sorangan, tapi ngaliwatan manuk. Kuring nempo solusi di dieu .
Fungsionalitas ieu henteu acan dilaksanakeun, coronavirus insidious maénkeun trik di dieu (henteu sadayana sumping ti Aliexpress; toko online anu sanés, Layta, jangji bakal nganteurkeun dina saminggu, tapi langkung ti sabulan parantos kalangkung; panyadia kadua henteu gaduh waktos. pikeun manjangkeun kabel saméméh karantina, ukur liang dina bor kana témbok pikeun kabel).
Kumaha mesen R64
Papan sorangan aya di toko resmi SinoVoip.
Éta ogé hadé pikeun mesen langsung:
Aya nuansa - harga pangiriman geus jadi inadequately tinggi di toko resmi pikeun sawatara waktu. Manajer Judy Huang ngayakinkeun kuring yén teu aya kasalahan, sareng anjeun tiasa milih ePacket pikeun $ 5, tapi kuring ningali yén pikeun Rusia ngan aya EMS pikeun> $ 33. Teu pikaresepeun, tapi henteu kritis. Sumawona, upami anjeun milih nagara sanés pikeun pangiriman (kuring ngalangkungan sadaya buana), pangiriman bakal ngarugikeun ~ $ 5. Russophobes?.. Tapi lajeng kuring manggihan yén pikeun Perancis harga pangiriman ogé ~ 30 $, sarta kuring calmed handap.
Hasilna, Judy nawiskeun pesenan, tapi henteu mayar (pitunjuk: nempatkeun kirang dina kartu supados pamayaran otomatis teu ngaliwat); nyeratna sareng anjeunna bakal ngirangan harga pangiriman ka normal. Kasuksésan.
isu
Henteu sadayana tiasa dianggo sampurna acan.
kakuwatan keur ngasilkeun
Ansible=Paréntah Python dieksekusi lalaunan, sanajan dianggurkeun, salila 20-30 detik; urutan gedena leuwih panjang batan dina laptop x86. Leuwih ti éta, mimitina aranjeunna dieksekusi rada gancang, ~ 3 detik, teras ngalambatkeun turun sharply. Ieu tiasa disababkeun ku pemanasan CPU (throttling). Kodeu Go ogé peryogi waktos anu lami kanggo damel:
# запрос метрик для прометея из 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 berpungsi, tapi dina Armbian lirén saatos sadinten, nyerat: