Router Banana Pi R64 - Debian, Wireguard, RKN

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.

Router Banana Pi R64 - Debian, Wireguard, RKN

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.

Router Banana Pi R64 - Debian, Wireguard, RKN

Sabanjure, cara paling gampang kanggo mbukak sistem operasi saka kertu SD: download dening link gambar lan isi:

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

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:

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]

Sabanjure, sampeyan kudu nulis preloader menyang partisi boot khusus

root@bpi-r64:~# echo 0 > /sys/block/mmcblk0boot0/force_ro 
root@bpi-r64:~# dd if=preloader_evb7622_64_foremmc.bin of=/dev/mmcblk0boot0

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 porting Armbia 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):

$ grep current_vpn group_vars/all 
current_vpn: paris-vpn-aws-t2-micro-1
#current_vpn: frankfurt-vpn-d0-starter-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:

- name: start bird
  systemd:
    name: bird
    state: started
    enabled: yes

lan carane nindakake padha liwat Python:

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:

install_bird("router/bird.conf.j2")
install_bird("vpn/bird.conf.j2")

ndeleng kode fungsi install_bird().

Fitur iki diarani pybook dileksanakake kene. Durung ana dokumentasi ing pybook, nanging aku bakal ndandani masalah iki mengko.

Apa dheweke mikir hulu ing kalodhangan iki.

Ngawasi. Prometheus

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)

Contoh setup monitoring:

ansible-playbook ./monitoring.py -l monitoring-preprod

Auto Discovery for Prometheus dikonfigurasi ing folder /etc/prometheus/auto_http, conto nambahake host kanggo ngawasi (host ora dipantau kanthi standar):

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

TODO: 2 panyedhiya, 2 BPI, anycast failover

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:

  • nutrisi + ngandhani standar plug EU utawa AS
  • sink panas: radiator / penggemar; amarga loro CPU lan chip ngalih dadi panas
  • antena wifi, contone

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:

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
...

Mung miwiti maneh mbantu. We kudu nerusake ngurutake.

Ethernet

Ethernet bisa digunakake, nanging sawise ~ 64 jam paket (DHCP) saka RXNUMX mandheg teka.
Wiwiti maneh antarmuka mbantu:

ifdown br0; sleep 30; ifup br0

Sopir anyar, durung ketampa kernel, muga-muga wong Cina landen Chao. rampung iku.

Source: www.habr.com

Add a comment