Router Banana Pi R64 - Debian, Wireguard, RKN

Ny Banana Pi 64 dia solosaina tokana mitovy amin'ny Raspberry Pi, saingy misy seranana Ethernet maromaro, izay ahafahana mamadika azy ho router mifototra amin'ny fizarana Linux amin'ny ankapobeny.

Router Banana Pi R64 - Debian, Wireguard, RKN

Eny, misy ny Openwrt, saingy manana ny maha-izy azy manokana izy, ny GUI sy CLI-ny manokana; misy ny Mikrotik, saingy manana ny GUI/CLI-ny manokana ihany koa izy, ary Wireguard Tsy mandeha avy hatrany amin'ny boaty ilay izy... Raha fintinina, mila router misy fikirana azo ovaina aho, sady mijanona ao anatin'ny rafitry ny Linux mahazatra izay iasako isan'andro.

Ao amin'ny lahatsoratra eo ambanin'ny anarana BPI, R64, single-board, dia mitovy ny tiako holazaina - ny Banana Pi R64 single-board mihitsy.

Mifidy sary. Misintona amin'ny eMMC

Ny fahaizana voalohany tokony ho azonao rehefa miasa SBC amin'ny ankapobeny, ary amin'ny R64 manokana, izany dia midika hoe mianatra ny hampiditra rafitra miasa ao aminy ary afaka mifandray aminy, satria ny R64 dia tsy manana seranan-tsambo ho an'ny monitor (HDMI, ohatra). Rehefa nianjera ny zava-drehetra - Wifi, Ethernet, Bluetooth, USB, sns. Tsy miasa intsony ny UART, amin'ny alàlan'ny interface izay azonao jerena foana izay tsy nety, ary mihazakazaka baiko roa avy amin'ny console, raha ilaina.

Algorithm fampifandraisana amin'ny R64 amin'ny alàlan'ny USB-UART:

  • mandeha any amin'ny fivarotana kojakoja radio izahay mba hahazoana tariby USB-UART (PL2303, Serial-to-USB)
  • Ampifandraiso amin'ny ordinatera ny faran'ny USB iray, ary ny iray hafa, UART, amin'ny R64, miaraka amin'ny tariby telo amin'ny efatra, toy ny amin'ny sary etsy ambany.
  • mihazakazaka ao amin'ny console solosaina sudo minicom

Aorian'izany, amin'ny ankamaroan'ny tranga dia hiseho ny console tokana tokana = fahombiazana.
Afaka mahita antsipiriany bebe kokoa ianao eto.

Router Banana Pi R64 - Debian, Wireguard, RKN

Manaraka, ny fomba tsotra indrindra dia ny fampidinana ny rafitra miasa amin'ny karatra SD: alaina amin'ny rohy sary ary fenoy azy:

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

Ampidiro ao amin'ny slot R64 SD ny karatra, avereno izany, ary diniho ny console mifandray amin'ny fametrahana ny uboot voalohany, avy eo ny fandefasana Linux mahazatra.

Safidy baoritra hafa dia mampiasa karatra 64Gb efa namboarina tao amin'ny R8, antsoina hoe eMMC. Araka ny toromarika ao amin'ny wiki dia mandika ny sary amin'ny fitaovana izahay
/dev/mmcblk0 mankany amin'ny BPI, reboot, esory ny karatra SD, avereno indray ny BPI ... dia tsy mandeha. Ahoana ny fandehanana miverina Boot select aza manelingelina.

Ny zava-misy dia farafaharatsiny ho an'ny BPI dia mila mametraka saina manokana ianao mba hahafahanao manomboka amin'ny flash drive anatiny:

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]

Manaraka, mila manoratra preloader amin'ny fizarazarana boot manokana ianao

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

Ny mpanamboatra R64 (Shina) dia namoaka ity binary ity eto. Tsy fantatra ny ataony (tsy misy kaody loharano), saingy tsy mandeha koa izany raha tsy misy azy.

Amin'ny ankapobeny, aorian'izany dia manomboka mipetaka amin'ny eMMC ny sary. Raha te hamantatra izany ianao ary hamorona sary avy amin'ny scratch, dia ho an'ny tranga roa (SD/eMMC) dia mila manoratra rakitra maromaro kokoa ianao (preloader ho an'ny karatra SD, ATF, u-boot) mba hahazoana ny kernel. Mbola io lohahevitra io dia mivoatra, fa ho anay ny zava-dehibe dia ny miasa sy mety.

Ankehitriny aho dia misintona amin'ny alàlan'ny eMMC, raha ny marina, tsy mampiasa azy aho, karatra SD dia ampy, saingy nandany fotoana be aho mba hampandehanana azy, ka avelao ho ao amin'ny lahatsoratra.

Misafidiana rafitra miasa. Armeniana

Ny asa azo ampiharina voalohany dia ny fandefasana VPN, mazava ho azy WireguardHitako avy hatrany fa tsy voaangona tsara ny kernel, ary tsy nisy lohateny. Namboariko indray ny kernel ary, araka ny fahazarako amin'ny x86, dia nanamboatra module kernel aho tamin'ny fampiasana DKMS. Na izany aza, ny hafainganam-pandehan'ny fanamboarana amin'ny ARM64, na dia ho an'ny fitaovana kely aza, dia nahagaga tsy nampoizina. Avy eo dia nilaina ny module kernel hafa, sy ny sisa. Raha fintinina, hita fa ny zavatra rehetra mifandraika amin'ny kernel dia tsara kokoa ny manangona amin'ny solosaina finday x86 efa tonta, avy eo dia adika sy apetaka fotsiny ao amin'ny ARM64, averina averina ampiasaina, ary andramana.

Ny lafiny fampiasana toerana dia raharaha hafa. Raha ny amiko, ny safidy Debian, ny zava-drehetra ho an'ny maritrano arm64 dia efa ao anaty packages.debian.org ary tsy mila averina angonina intsony.

Mba tsy hamokatra bisikileta hafa, I aty Armeniana ny BPI R64.
Na ny marimarina kokoa, ity: ny faritra mpampiasa dia Armbian, ary ny kernel dia nalaina tao amin'ny tahiry Frank-A. Ny sary farany dia azo alaina eto.

Ny hetsika rehetra amin'ny fampandrosoana ny ampahany amin'ny rindrambaiko R64 dia tanterahana amin'ny ny forumAmin'ny ankapobeny, ny mpanamboatra mihitsy no miezaka mampalaza ny router ho an'ny OpenWrt, saingy noho ny asan'ny mpamorona Frank avy any Alemaina, dia haingana dia haingana ny endri-javatra rehetra dia tonga ao amin'ny kernel ho an'ny Debian-a. Mahagaga fa mavitrika amin'ny sehatra fifanakalozan-kevitra rehetra i Frank.

Fandaminana toeram-piasana: tariby

Misaraka, tiako ny hilaza aminao ny fomba, mandritra ny fivoarana/fitsapana, mametraka SBC (fa tsy BPI fotsiny) eo ambony latabatra mba tsy hampandehanana tariby Ethernet avy amin'ny loharano Internet manerana ny efitrano / birao iray manontolo. Ny zava-misy dia, amin'ny lafiny iray, mila manome fitaovana miaraka amin'ny Internet ianao, fa amin'ny lafiny iray, ny zavatra rehetra ao anatin'io fitaovana io dia mety ho rava, ary voalohany indrindra Wifi.

Voalohany, nanapa-kevitra ny hividy "sioka" USB-Wifi mora vidy aho, ampidiro ao amin'ny seranana tokana ao amin'ny BPI ary adino ny tariby. Mba hanaovana izany, dia nividy TP-LINK TL-WN725N USB 2.0 mora vidy aho, saingy tsy ela dia nazava fa tsy hiala izany: mila mpamily kernel ianao, izay mazava ho azy fa tsy teo. (Taty aoriana dia nanangona ny mpamily RTL8XXXU ilaina aho, saingy mbola tsy azo ampiharina izany). Ary ny tariby Ethernet dia nanimba ny endriky ny efitrano nandritra ny fotoana kelikely.

Vokatr'izany dia nahavita nanala ny tariby aho tamin'ny fanampian'ny Tenda MW3 (rafitra Wifi mesh): Nametraka goba iray fotsiny aho teo ambanin'ny latabatra ary nampifandray ny BPI tamin'ny seranan-tsambo LAN farany tamin'ny tariby Ethernet iray metatra. Fahombiazana.

Wireguard, RKN, Vorona

Ny iray amin'ireo zavatra tiako hampiasaina amin'ny Banana PI dia ny fahafahana miditra malalaka amin'ny tranokala voasakana RKN, indrindra indrindra, mba hahafahan'ny Telegram sy Slack antso. Ny lahatsoratra momba ny Habré dia efa naroso momba ity lohahevitra ity: fotoana, два, telo.

Nampiasa ity vahaolana ity aho tamin'ny fampiasana Ansible: rohy.

Heverina fa miasa eo ambanin'ny Ubuntu 18.04 Aprily. Notsapaiko tamin'ny mpamatsy fampiantranoana roa any Eoropa ny fiasany: Amazon sy Digital Ocean.

Noho izany, nametraka ny Armbian etsy ambony amin'ny R64 izahay, azo idirana amin'ny ssh eo ambanin'ny anarana hm-bananapi-1 ary manana fidirana aterineto. Mametraka tsy tapaka ansible, automatique scripts izahay ary manomboka ny fametrahana azy amin'ny 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

Manaraka, mila mametraka ny VPN amin'ny VPS amin'ny fomba mitovy ianao:

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

Eto ny tohan-kevitra dia amin'izao fotoana izao-vpn, ary ny tena anaran'ny VPS dia namboarina amin'ny fari-piainana (amin'ity tranga ity dia 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

Eny, alohan'ireo asa rehetra ireo dia mila mamorona tsiambaratelo ianao (indrindra fa ny fanalahidy) Wireguard) mankany amin'ny lahatahiry ./secrets, ny lahatahiry dia tokony ho toy ny toy izany.

Ansible Automation amin'ny Python

Mety ho tsikaritrareo fa raha tokony ho amin'ny endrika YAML, ny baiko Ansible dia voakodia amin'ny script Python. Ho fampitahana, ny fomba ahafahan'ny daemon vorona amin'ny fomba mahazatra:

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

ary ny fomba hanaovana izany amin'ny alàlan'ny Python:

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

Ny fanoratana baiko Ansible amin'ny Python dia ahafahanao mampiasa indray ny kaody, ary amin'ny ankapobeny dia manokatra ny fahafaha-manao rehetra amin'ny fiteny tanjona ankapobeny. Ohatra, fametrahana vorona amin'ny R64 sy VPS:

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

jereo ny kaody fiasa install_bird().

Ity endri-javatra antsoina hoe pybook ampiharina eto. Tsy mbola misy antontan-taratasy momba ny pybook, fa hamboariko io olana io any aoriana.

Inona no heveriny manokana eo ambony amin'ity fotoana ity.

Fanaraha-maso. Prometheus

Total: miasa telegrama, linkedin ary pornhub koa, amin'ny ankapobeny dia mety ny traikefan'ny mpampiasa. Saingy mety ho tapaka ny zava-drehetra, anisan'izany ny fitaovana sinoa.

Mety hahaliana ihany koa ny fanavaozana ny kernel: ohatra, te-hanavao ny kernel 5.4 => 5.6 aho, eny, eo Wireguard Vao avy novakiana, tsy mila manamboatra "patch" intsony... Vao vita ny voalaza dia vita: Namindra tamim-pitandremana ireo "patches" avy amin'ny 5.4 ho 5.6 aho, nanomboka ny kernel, ny "tunnel" mankany amin'ny ping VPS, saingy tsy afaka mifandray amin'ny fahadisoana "BGP Error" i Bird... "Tamin'ny horohoro, niverina aho" (c) ho 5.4; napetraka tao amin'ny TODO ny fifindrana ho 5.6.

Noho izany, ankoatra ny fametrahana ny router sy VPS, dia nanampy fanaraha-maso (amin'ny x86) aho. Ubuntu 18.04), izay napetraka amin'ny mpampiantrano misaraka miaraka amin'ireto singa manaraka ireto:

  • prometheus, alertmanager, blackbox_exporter - ao anaty docker daholo
  • Ny fampandrenesana dia alefa amin'ny fantsona telegrama amin'ny alàlan'ny metalmatze/alertmanager-bot bot - ao amin'ny Docker ihany koa
  • tor ho an'ny bot, mba ahafahan'ny bot mampitandrina ny toe-javatra misy ny Internet, saingy mbola tsy mandeha ny Telegram, ary tsy afaka mifandray ny bot.
  • ampiharina fanairana: NodeVPNTroubles (tsy misy ping amin'ny VPS), BirdVPNTroubles (tsy misy Bird session), AntifilterDownloadTroubles (tsy misy hadisoana amin'ny fametrahana ny adiresy IP voasakana), SiteTroubles (tsy misy ny telegrama ratsy)
  • fampandrenesana rafitra, ohatra, HostGrowingDiskReadLatency (tsy azo vakina ny karatra SD mora)

Ohatra fametrahana fanaraha-maso:

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

Auto Discovery for Prometheus dia natsangana tao amin'ny lahatahiry /etc/prometheus/auto_http, ohatra amin'ny fampidirana mpampiantrano amin'ny fanaraha-maso (tsy voara-maso ny mpampiantrano):

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: Mpanome 2, BPI 2, failover anycast

Ho fanampin'ny zava-drehetra, dia nikasa ny hifandray amin'ny mpamatsy roa aho mba hitohizan'ny Internet, na dia manana olana amin'ny tambajotra aza ny mpamatsy iray, na hadinony ny nandoa ny Internet, sns., sy ireo anton-javatra hafa momba ny olombelona.

Ny traikefan'ny mpampiasa mandroso indrindra momba ny lohahevitra momba ny multi-wan dia nofaritana eto ho an'ny rafitra Mwan3 eo ambanin'ny Openwrt. Ity vahaolana ity dia manana fiasa manankarena, fa ny fametrahana sy ny fampiasana azy amin'ny ankapobeny ho an'ny multi-wan dia tena manahirana. Ohatra iray fotsiny: raha tonga any amin'ny tranokala sasany avy amin'ny adiresy IP roa miaraka ianao, dia mety tsy ho tian'izy ireo izany, hijanona tsy hiasa => "tsy mandeha ny Internet."

Raha jerena ity traikefa ity dia nanapa-kevitra aho fa tsy laharam-pahamehana ny multihoming, fa failover ihany. Na izany aza, toa amin'ny dikan-teny farany amin'ny Linux dia tokony hiasa amin'ny baiko iray toy ny:

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

Noho izany, mba hialana amin'ny teboka iray tsy fahombiazana, dia maka 2 BPIs, mampifandray ny tsirairay amin'ny mpamatsy iray, mampifandray azy ireo amin'ny tsirairay ary manao ny fifandraisana amin'ny tsirairay dynamic routing amin'ny alalan'ny vorona / OSPF.

Manaraka, manao dokam-barotra mitovy amin'ny adiresy IP tsirairay izahay raha misy ny serivisy (Internet, DNS). Izany hoe, tsy ny tenantsika no hametraka ny lalana default, fa amin'ny alalan'ny vorona. Nijery ny vahaolana aho eto .

Mbola tsy nampiharina io fampiasa io, nanao fika teto ny coronavirus mamitaka (tsy tonga avy amin'ny Aliexpress daholo ny zava-drehetra; fivarotana an-tserasera iray hafa, Layta, nampanantena fa hanatitra ao anatin'ny herinandro, fa efa lasa iray volana mahery; tsy nanam-potoana ny mpamatsy faharoa. mba hanitarana ny telegrama alohan'ny hanaovana confinement, dia tsy nahavita nanao lavaka tao amin'ny rindrina ho an'ny tariby ihany).

Ahoana no hanafatra R64

Ny birao mihitsy dia ao amin'ny fivarotana ofisialy SinoVoip.
Aleo koa manafatra avy hatrany:

  • sakafo + ampahafantaro ny fenitra plug EU na US
  • fanapotehana: radiators/fants; satria samy mafana ny CPU sy ny chip switch
  • antena wifi, ohatra

Misy ny nuance - ny vidin'ny fanaterana dia nanjary tsy dia avo loatra tao amin'ny fivarotana ofisialy nandritra ny fotoana ela. Ny mpitantana Judy Huang dia nandresy lahatra ahy fa tsy misy hadisoana, ary azonao atao ny misafidy ePacket amin'ny $5, saingy hitako fa ho an'i Russia dia tsy misy afa-tsy EMS amin'ny> $33. Tsy mahafinaritra, fa tsy manakiana. Ambonin'izany, raha misafidy firenena hafa hanaterana ianao (namakivaky ny kaontinanta rehetra aho), dia mitentina ~ $5 ny fandefasana. Russophobes?.. Saingy hitako fa ho an'i Frantsa ny vidin'ny fanaterana koa dia ~30$, ary tony aho.

Vokatr'izany dia nanolotra baiko i Judy fa tsy nandoa (Soso-kevitra: asiana kely amin'ny karatra mba tsy handehanan'ny fandoavam-bola mandeha ho azy); manorata any aminy dia ahenany ho ara-dalàna ny vidin'ny fanaterana. Fahombiazana.

olana

Tsy mbola mandeha tsara ny zava-drehetra.

vokatra

Ansible=Ny baiko Python dia tanterahina miadana, na dia tsy miasa aza, mandritra ny 20-30 segondra; filaharana lehibe kokoa noho ny amin'ny solosaina finday x86. Ankoatr'izay, amin'ny voalohany dia novonoina haingana izy ireo, ~ 3 segondra, avy eo dia miadana mafy izy ireo. Mety ho noho ny fiakaran'ny hafanana (throttling) ny CPU. Mitaky fotoana maharitra ihany koa ny kaody 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

Miasa ny Wifi, fa amin'ny Armbian dia mijanona izany rehefa afaka iray andro, nanoratra hoe:

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

Ny famerenana ihany no manampy. Mila mandroso isika fantaro izany.

Ethernet

Miasa ny Ethernet, fa rehefa afaka ~ 64 ora fonosana (DHCP) avy amin'ny RXNUMX mijanona tsy tonga.
Ny famerenana indray ny interface dia manampy:

ifdown br0; sleep 30; ifup br0

Vaovao ny mpamily, mbola tsy nekena ho ao anaty kernel, manantena aho fa ilay Sinoa Landen Chao mamarana azy.

Source: www.habr.com

Mividiana fampiantranoana azo antoka ho an'ny tranokala misy fiarovana DDoS, mpizara VPS VDS 🔥 Mividiana fampiantranoana tranonkala azo antoka miaraka amin'ny fiarovana DDoS, mpizara VPS VDS | ProHoster