Muuska Pi R64 router – Debian, Wireguard, RKN

Banana Pi 64 waa kombuyuutar hal-board ah oo la mid ah Raspberry Pi, laakiin leh dhowr dekedood oo Ethernet ah, taas oo suurtogal ka dhigaysa in loo rogo router ku salaysan qaybinta guud ee Linux.

Muuska Pi R64 router – Debian, Wireguard, RKN

Haa, waxaa horay u jiray Openwrt, laakiin waxay leedahay dhibaatooyinkeeda, GUI iyo CLI; Waxaa jira Mikrotik, laakiin mar kale waxay leedahay GUI / CLI u gaar ah, iyo Wireguard kama shaqeynayo sanduuqa ... Guud ahaan, waxaan rabaa router leh goobo dabacsan, inta lagu jiro qaabka Linux caadiga ah, oo aad shaqeyso leh maalin kasta.

Maqaalka hoos yimaada magacyada BPI, R64, hal-board, waxaan ula jeedaa wax la mid ah - Banana Pi R64 hal-board laftiisa.

Doorashada sawirka. Ku soo deji eMMC

Xirfadda ugu horreysa ee aad u baahan tahay inaad hesho markaad la shaqaynayso SBC guud ahaan, gaar ahaan R64, tani waxay ka dhigan tahay inaad barato sida loogu shubo nidaamka hawlgalka iyo inaad awood u leedahay inaad la falgasho, sababtoo ah R64 ma laha deked loogu talagalay kormeeraha (HDMI, tusaale ahaan). Markii ay wax walba dhaceen - Wifi, Ethernet, Bluetooth, USB, iwm. ayaa joojiyay shaqada, waxaa jira UART, iyada oo loo marayo interface-ka kaas oo aad had iyo jeer ka arki karto wixii khaldamay, oo sidoo kale ku maamula dhowr amar oo ka soo baxa console-ka, haddii loo baahdo.

Algorithm ee ku xidhidhiyaha R64 ee USB-UART:

  • Waxaan ku ordanaa dukaanka qaybaha raadiyaha si aan u helno fiilada USB-UART (PL2303, Serial-to-USB)
  • ku xidh hal dhamaadka USB kombayutarka, ka kalena, UART, R64, oo leh saddex fiilood oo afar ah, sida sawirka hoose.
  • ku dhex ordi kombayuutarka sudo minicom

Taas ka dib, inta badan kiisaska konsole-ka-koobku wuxuu soo muuqan doonaa = guul.
Waxaad arki kartaa faahfaahin dheeraad ah halkan.

Muuska Pi R64 router – Debian, Wireguard, RKN

Marka xigta, sida ugu fudud ayaa ah in nidaamka qalliinka laga soo dejiyo kaarka SD: soo dejiso link sawirka oo buuxi:

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

Kaarka waxaan gelinaa booska R64 SD, shid, oo aan ilaalinayno konsole-ku-xiran loading uboot marka hore, ka dibna loading Linux caadiga ah.

Ikhtiyaarka bootinta ee kale ayaa isticmaalaya kaarka 64Gb ee horay loogu dhex dhisay R8, oo loo yaqaan eMMC. Sida ku cad tilmaamaha wiki, waxaan ku koobiyayna sawirka qalabka
/dev/mmcblk0 ilaa BPI, reboot, saar kaadhka SD, shid BPI mar kale... mana shaqaynayso. Sida loo noqdo iyo gadaal Boot select ha isku dhibin.

Xaqiiqdu waxay tahay in ugu yaraan BPI aad u baahan tahay inaad dejiso calan gaar ah si aad awood ugu yeelatid inaad ka soo saarto darawalka gudaha:

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]

Marka xigta, waxaad u baahan tahay inaad ku qorto preloader qaybta boot gaarka ah

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

Soo saaraha R64 (Shiinaha) ayaa dhejiyay binary-gan halkan. Waxa ay qabato lama yaqaan (ma jiraan kood isha), laakiin la'aanteedna ma shaqayn doonto.

Guud ahaan, tan ka dib, sawiradu waxay bilaabaan inay ka soo degaan eMMC. Haddii aad rabto inaad ogaato oo aad sawirro ka abuurto xoq, markaa labada kiis (SD/eMMC) waxaad u baahan tahay inaad qorto dhowr faylal oo dheeraad ah (horey u soo dejiyaha kaarka SD, ATF, u-boot) si aad u gasho kernel-ka. Mawduucan wali waa jiraa horumarisa, laakiin anaga waxa ugu weyn waa in ay shaqeyso oo ay okay.

Hadda waxaan ku soo dejiyaa eMMC, si daacad ah, ma isticmaalo, kaarka SD ayaa ku filan, laakiin waqti badan ayaan ku qaatay sidii aan u shaqeyn lahaa, markaa ha ku jirto maqaalka.

Doorashada nidaamka hawlgalka. Armiya

Hawsha codsiga ugu horeeya waa in la bilaabo VPN, dabiici ahaan Wireguard. Isla markiiba waxaa la ogaaday in dhinaca kernel-ka aan la isku uruurin oo aysan jirin wax madax ah. Waxa aan dib u dhisay kernel-kii, sida caadadayda x86, waxa aan soo ururiyay module-ka kernel-ka aniga oo isticmaalaya DKMS. Si kastaba ha ahaatee, xawaaraha lagu dhisayo xitaa yutiilitooyinka yaryar ee arm64 ayaa si aan fiicneyn iiga yaabiyay. Kadibna module kale oo kernel ah ayaa loo baahan yahay, iwm. Guud ahaan, waxa soo baxday in wax kasta oo la xidhiidha kernel-ka ay si fiican isugu geeyeen kombuyuutar x86 diirran, ka dibna loo wareejiyo R64 iyada oo si fudud loo koobi karo, dib loo bilaabay oo la tijaabiyey.

Wax kale waa qaybta userspace. Xaaladdayda doorashada Debian, wax kasta oo loogu talagalay naqshadaha arm64 waxay mar hore ku yaalliin packs.debian.org oo looma baahna in wax dib loo dhiso.

Si aan loo soo saarin baaskiil kale, I xamaali Armiya BPI R64.
Ama halkii, tan: qaybta adeegsaduhu waa Armbian, iyo kernel-ka ayaa laga soo qaatay kaydka Frank-A. Sawirkii ugu dambeeyay waa la soo dejisan karaa halkan.

Dhammaan hawlaha horumarinta qaybta software ee R64 waxaa lagu fuliyaa on kulanka. Guud ahaan, soo-saaraha laftiisa ayaa ku dadaalaya inuu ku faafiyo router-ka Openwrt, laakiin waxaa mahad leh waxqabadka horumariyaha Frank oo ka yimid Jarmalka, dhammaan astaamaha si dhakhso leh ayey ugu dambeeyaan kernel-ka Debian. Waxa la yaab leh, Frank waa firfircoon yahay dunta forum kasta.

Ururka goobta shaqada: fiilooyinka

Si gooni ah, waxaan jeclaan lahaa inaan kuu sheego sida, inta lagu jiro horumarka/tijaabada, dhig SBC (ma ahan kaliya BPI) miiska si aysan ugu socon fiilada Ethernet-ka ee isha internetka ee qolka / xafiiska oo dhan. Xaqiiqdu waxay tahay, dhinaca kale, waxaad u baahan tahay inaad bixiso qayb ka mid ah qalabka internetka, laakiin dhinaca kale, wax kasta oo qalabkaas ku jira ayaa jabi kara, oo marka hore Wifi.

Marka hore, waxaan go'aansaday in aan iibsado USB-Wifi "firi" raqiis ah, ku dheji dekedda kaliya ee BPI oo illow fiilooyinka. Si tan loo sameeyo, waxaan soo iibsaday TP-LINK TL-WN725N USB 2.0 ah oo aan qaali ahayn, laakiin ugu dhakhsaha badan waxay caddaatay in aysan ka bixi doonin: foorida si ay u shaqeyso, waxaad u baahan tahay darawal kernel ah, kaas oo, dabcan, ma joogin halkaas. (ka dib waxaan soo ururiyay darawalkii lagama maarmaanka u ahaa RTL8XXXU, laakiin wali waa wax aan macquul ahayn). Fiilada Ethernet-na waxa ay xumaysay muuqaalka qolka in muddo ah.

Natiijo ahaan, waxaan ku guuleystey inaan ka takhaluso fiilada iyadoo la kaashanayo Tenda MW3 (Nidaamka mesh Wifi): Waxaan si fudud u dhigay hal cube miiska hoostiisa waxaanan ku xiray BPI dekedda LAN ee dambe oo leh fiilo mitir ah oo Ethernet ah. Guul

Wireguard, RKN, Shimbir

Mid ka mid ah waxyaabaha aan rabo in aan u isticmaalo Banana PI waa in aan si bilaash ah u galo goobaha ay RKN xannibeen, gaar ahaan, si Telegram iyo Slack call ay u shaqeeyaan. Maqaallo ku saabsan HabrΓ© ayaa horay loo soo jeediyay mowduucan: jeer, Π΄Π²Π°, saddex.

Waxaan si sax ah u dejiyay xalkan anigoo isticmaalaya macquul: ссылка.

VPS waxaa loo maleynayaa inuu ku shaqeynayo Ubuntu 18.04. Waxaan hubiyay shaqada labada martigeliyaha ee Yurub: Amazon iyo Digital Ocean.

Marka, waxaan ku rakibnay Armbian-ka sare ee R64, waxaa lagu heli karaa ssh magaca hoostiisa hm-bananapi-1 oo uu leeyahay marin internet. Waxaan si joogto ah u hawlgelinaa qoraallada suurtagalka ah, otomaatiga ah waxaanan bilownay rakibaadda lafteeda 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

Marka xigta, waxaad u baahan tahay inaad u dirto VPN-yada VPS si la mid ah:

ansible-playbook ./router.py -l current-vpn

Halkan dooda had iyo jeer waa hadda-vpn, iyo magaca VPS ee dhabta ah waxaa lagu habeeyay doorsoome (kiiskan waa 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

Haa, dhammaan hawlgalladan ka hor waxaad u baahan tahay inaad abuurto siraha (gaar ahaan furayaasha Wireguard) galka ./secrets, buuggu waa inuu u ekaado sidaas darteed.

Automation macquul ah oo ku jira Python

Waxaad ogaan kartaa in halkii aad ku jiri lahayd qaabka YAML, amarada macquulka ah ay ku qoran yihiin qoraallada Python. Marka la barbardhigo, sida loo awoodo daemon shimbireedka sida caadiga ah:

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

iyo sida loo sameeyo isla Python:

with mapping:
    append("name", "start bird")
    with mapping("systemd"):
        append("name",  "bird")
        append("state", "started")
        append("enabled", "yes")

Ku qorista amarada macquulka ah ee Python waxay kuu ogolaaneysaa inaad dib u isticmaasho koodka, iyo guud ahaan waxay fureysaa dhammaan suurtagalnimada luqadda ujeedada guud. Tusaale ahaan, ku rakibida shimbiraha R64 iyo VPS:

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

eeg xeerka shaqada install_bird().

Sifadan oo lagu magacaabo pybook la fuliyay halkan. Weli ma jiro wax dukumeenti ah oo ku qoran pybook, laakiin arrintan mar dambe ayaan xallin doonaa.

Muxuu qabaa kheyraad munaasabadan.

Kormeerka. Prometheus

Wadarta: telegram wuu shaqeeyaa, linkedin iyo pornhub sidoo kale, guud ahaan khibrada isticmaaluhu waa ok. Laakiin wax walba way jabi karaan, oo ay ku jiraan qalabka Shiinaha.

Cusbooneysiinta Kernel waxay sidoo kale noqon kartaa mid xiiso leh: tusaale ahaan, waxaan rabay inaan cusbooneysiiyo kernel 5.4 => 5.6, si fiican, Wireguard waa ka baxsan yahay sanduuqa, looma baahna in la dhajiyo ilaa 5.4, kernel-ku wuu bilaabmay, tunnel-ka VPS pinged, laakiin shimbiruhu kuma xidhi karaan qaladka "BGP Error" ... "Waxaan dib ugu soo laabtay cabsi" (c) ilaa 5.6; U dhaqaaqista 5.4 ayaa dib loo dhigay TODO.

Sidaa darteed, marka lagu daro rakibidda router iyo VPS, waxaan ku daray la socodka (x86 Ubuntu 18.04), kaas oo lagu rakibay marti-gal gaar ah oo leh qaybaha soo socda:

  • prometheus, maareeyaha digniinta, blackbox_exporter - dhamaantood waxay ku jiraan docker
  • Ogeysiisyada waxaa loo diraa kanaalka telegram-ka iyadoo la adeegsanayo birta-maareeyaha-bot-bot-sidoo kale gudaha Docker
  • tor for bot, si bot-ku uu uga digtoonaado xaaladaha marka uu jiro internetka, laakiin telegram wali ma shaqeeyo, bot laftiisana ma xiriiri karo
  • codsatay digniino: NodeVPNTroubles (no ping to VPS), BirdVPNTroubles (wax shimbir ah oo aan lahayn), AntifilterDownload Dhibaatooyin (qallad la xirayo cinwaannada IP), SiteTroubles (telegram-ka xun lama heli karo)
  • Ogeysiisyada nidaamka, tusaale ahaan, HostGrowingDiskReadLatency (kaarka SD raqiis ah waxa uu noqdaa mid aan la akhrin karin)

Tusaalaha rakibida la socodka:

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

Helitaanka otomaatiga ah ee Prometheus waxaa lagu habeeyay faylka /etc/prometheus/auto_http, tusaale ahaan ku darista martigeliyaha kormeerka (martigaliyayaasha si caadi ah loolama socdo):

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 bixiye, 2 BPI, mid kasta oo ku fashilmay

Marka laga soo tago wax walba, waxaan qorsheeyay in aan ku xidho laba bixiyeyaal si internetka uu u sii shaqeeyo, xitaa haddii mid ka mid ah bixiyeyaashu ay dhibaato ku qabaan shabakadda, ama ay illoobeen inay bixiyaan internetka, iwm, iyo arrimo kale oo aadanaha ah.

Khibrada isticmaale ee ugu horumarsan mawduuca multi-wan ayaa lagu sifeeyay halkan ee nidaamka Mwan3 ee hoos yimaada Openwrt. Xalkani waxa uu leeyahay hawlkarnimo qani ah, laakiin u samaynta iyo ku shaqaynta guud ahaan wan-yada kala duwan waa arrin dhib badan. Kaliya hal tusaale: haddii aad ka timaaddo boggaga qaarkood laba ciwaan IP hal mar, waxaa laga yaabaa inaysan jeclayn, waxay joojin doonaan shaqada => "Internetka ma shaqeynayo."

Anigoo tixgelinaya waayo-aragnimadan, waxaan go'aansaday in multihoming aysan ahayn mudnaan weli, kaliya guul-darradu. In kasta oo, ay u muuqato in noocyadii ugu dambeeyay ee Linux wax walba ay tahay inay ku shaqeeyaan hal amar sida:

ip route add default 
    nexthop via 192.168.1.1 weight 10 
    nexthop via 192.168.2.1 weight 5

Markaa, si aan uga fogaano hal dhibic oo guul darro ah, waxaanu qaadanaa 2 BPIs, waxaanu mid walba ku xidhaa hal bixiye, waxaanu isku xidhaa midba midka kale oo aanu xidhiidhka midba midka kale ka samaynaa habayn firfircooni ah iyada oo loo marayo shimbir/OSPF.

Marka xigta, waxaan ku xayeysiineynaa isla cinwaanka IP-ga mid kasta haddii adeegga la heli karo (Internet, DNS). Taasi waa, ma dejin doono dariiqa caadiga ah nafteena, laakiin iyada oo loo marayo shimbiraha. Xalka waan basaasay halkan .

Shaqadan wali lama hirgelin, coronavirus-ka khiyaanada leh ayaa halkan ku ciyaaray khiyaano (wax walba kama iman Aliexpress; dukaan kale oo internetka ah, Layta, ayaa ballan qaaday inuu ku keeno usbuuc gudihiis, laakiin in ka badan hal bil ayaa ka soo wareegtay; bixiyaha labaad ma helin waqti in la dheereeyo fiilada ka hor karantiil, kaliya waxa u suurtagashay in ay dalool ka soo gasho darbiga fiilada).

Sida loo dalbado R64

Looxa laftiisa ayaa ku jira dukaanka rasmiga ah SinoVoip.
Waxa kale oo fiican inaad si degdeg ah u dalbato:

  • nafaqada + ogeysii heerka plug-ka EU ama US
  • weelka kulaylka: radiatoor/taageerayaal; sababtoo ah CPU-ga iyo chip-ka shisheeyaha labaduba way kululaanayaan
  • anteenada wifi, tusaale ahaan

Waxaa jira nuance - qiimaha gaarsiintu wuxuu noqday mid aan ku filnayn dukaanka rasmiga ah in muddo ah. Maamulaha Judy Huang wuxuu igu qanciyay inaysan jirin qalad, oo waxaad dooran kartaa ePacket $ 5, laakiin waxaan u arkay in Ruushka uu jiro EMS kaliya> $ 33. Aan wacnayn, laakiin aan muhiim ahayn. Waxaa intaa dheer, haddii aad doorato waddan kale oo lagu geynayo (waxaan soo maray dhammaan qaaradaha), gaarsiinta waxay ku kici doontaa ~ $ 5. Russophobes? .. Laakiin markaa waxaan ogaaday in Faransiiska qiimaha gaarsiinta uu sidoo kale yahay ~ 30$, oo waan dejiyay.

Natiijo ahaan, Judy waxay soo bandhigtay inay bixiso amar, laakiin ma bixinayso (tilmaan: wax yar saar kaadhka si aanay lacagta tooska ah u dhicin); warqad u qor oo waxay hoos u dhigi doontaa qiimaha dhalmada si caadi ah. Guul

Arrimaha

Weli wax walba si fiican uma shaqeeyaan.

Wax-soo-saarka

Aansible=Amarka Python waxaa loo fuliyaa si tartiib ah, xitaa kuwa aan shaqayn, 20-30 ilbiriqsi; Amarka cabbirka ka dheer kan laptop-ka x86. Intaa waxaa dheer, marka hore si dhakhso ah ayaa loo fuliyay, ~ 3 ilbiriqsi, ka dibna si tartiib ah ayey u yareeyaan. Tan waxa laga yaabaa inay sabab u tahay kululaynta CPU (cudurada). Koodhka Go sidoo kale wuxuu qaataa waqti dheer inuu shaqeeyo:

# запрос ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ для промСтСя ΠΈΠ· 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

Wifigu wuu shaqeeyaa, laakiin Armbianku wuxuu joogsadaa maalin ka dib, wuxuu qoray:

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

Kaliya dib u bilow ayaa ku caawinaysa. Waxaan u baahanahay inaan horay u sii socono kala sooc.

Ethernet

Ethernet wuu shaqeeyaa, laakiin ka dib ~64 saacadood xidhmooyin (DHCP) ka RXNUMX joogsada imaatinka.
Dib u bilaabida is-dhexgalka ayaa kaa caawinaysa:

ifdown br0; sleep 30; ifup br0

Darawalku waa cusub yahay, weli lama aqbalin kernel-ka, waxaan rajeynayaa inuu yahay Shiinaha Landen Chao wuu dhammeeyaa.

Source: www.habr.com

Add a comment