ื ืชื‘ Banana Pi R64 - ื“ื‘ื™ืืŸ, Wireguard, RKN

ื”-Banana Pi 64 ื”ื•ื ืžื—ืฉื‘ ื‘ืขืœ ืœื•ื— ื‘ื•ื“ื“ ื”ื“ื•ืžื” ืœ-Raspberry Pi, ืืš ืขื ืžืกืคืจ ื™ืฆื™ืื•ืช Ethernet, ืžื” ืฉืžืืคืฉืจ ืœื”ืคื•ืš ืื•ืชื• ืœื ืชื‘ ื”ืžื‘ื•ืกืก ืขืœ ื”ืคืฆืช ืœื™ื ื•ืงืก ืœืฉื™ืžื•ืฉ ื›ืœืœื™.

ื ืชื‘ Banana Pi R64 - ื“ื‘ื™ืืŸ, Wireguard, RKN

ื›ืŸ, ื™ืฉ ื›ื‘ืจ Openwrt, ืื‘ืœ ื™ืฉ ืœื• ื‘ืขื™ื•ืช ืžืฉืœื•, GUI ื•-CLI ืฉืœื•; ื™ืฉ Mikrotik, ืื‘ืœ ืฉื•ื‘ ื™ืฉ ืœื• GUI/CLI ืžืฉืœื•, ื•-Wireguard ืœื ืขื•ื‘ื“ ืžื”ืงื•ืคืกื”... ื‘ืื•ืคืŸ ื›ืœืœื™, ืื ื™ ืจื•ืฆื” ื ืชื‘ ืขื ื”ื’ื“ืจื•ืช ื’ืžื™ืฉื•ืช, ืชื•ืš ื”ื™ืฉืืจื•ืช ื‘ืžืกื’ืจืช ืฉืœ ืœื™ื ื•ืงืก ืจื’ื™ืœื”, ืฉื‘ื” ืืชื” ืขื•ื‘ื“ ืขื ื›ืœ ื™ื•ื.

ื‘ืžืืžืจ ืชื—ืช ื”ืฉืžื•ืช BPI, R64, single-board, ืื ื™ ืืชื›ื•ื•ืŸ ืœืื•ืชื• ื“ื‘ืจ - ื”-Banana Pi R64 single-board ืขืฆืžื•.

ื‘ื—ื™ืจืช ืชืžื•ื ื”. ื”ื•ืจื“ ื“ืจืš eMMC

ื”ืžื™ื•ืžื ื•ืช ื”ืจืืฉื•ื ื” ืฉืืชื” ืฆืจื™ืš ืœืจื›ื•ืฉ ื›ืฉืขื•ื‘ื“ื™ื ืื™ืชื” SBC ื‘ื›ืœืœ, ื•ืขื ื”-R64 ื‘ืคืจื˜, ื–ื” ืื•ืžืจ ืœืœืžื•ื“ ืœื˜ืขื•ืŸ ืœืชื•ื›ื• ืžืขืจื›ืช ื”ืคืขืœื” ื•ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœื™ืฆื•ืจ ืื™ืชื” ืื™ื ื˜ืจืืงืฆื™ื”, ื›ื™ ืœ-R64 ืื™ืŸ ื™ืฆื™ืื” ืœืžืกืš (HDMI, ืœืžืฉืœ). ื›ืฉื”ื›ืœ ื ืคืœ - Wifi, Ethernet, ื‘ืœื•ื˜ื•ืช', USB ื•ื›ื•' ื”ืคืกื™ืงื• ืœืขื‘ื•ื“ ื™ืฉ UART ืฉื“ืจืš ื”ืžืžืฉืง ืฉืœื• ืชืžื™ื“ ืืคืฉืจ ืœืจืื•ืช ืžื” ื”ืฉืชื‘ืฉ ื•ื’ื ืœื”ืจื™ืฅ ื›ืžื” ืคืงื•ื“ื•ืช ืžื”ืงื•ื ืกื•ืœื” ืื ืฆืจื™ืš.

ืืœื’ื•ืจื™ืชื ืœื—ื™ื‘ื•ืจ ืœ-R64 ื‘ืืžืฆืขื•ืช USB-UART:

  • ืื ื• ืจืฆื™ื ืœื—ื ื•ืช ื—ืœืงื™ ื”ืจื“ื™ื• ืขื‘ื•ืจ ื›ื‘ืœ USB-UART (PL2303, Serial-to-USB)
  • ื—ื‘ืจ ืงืฆื” USB ืื—ื“ ืœืžื—ืฉื‘, ื•ื”ืฉื ื™, UART, ืœ-R64, ืขื ืฉืœื•ืฉื” ื—ื•ื˜ื™ื ืžืชื•ืš ืืจื‘ืขื”, ื›ืžื• ื‘ืชืžื•ื ื” ืœืžื˜ื”
  • ืœื”ืคืขื™ืœ ื‘ืงื•ื ืกื•ืœืช ื”ืžื—ืฉื‘ sudo minicom

ืœืื—ืจ ืžื›ืŸ, ื‘ืจื•ื‘ ื”ืžืงืจื™ื ืชื•ืคื™ืข ืงื•ื ืกื•ืœืช ื”ืœื•ื— ื”ื™ื—ื™ื“ = ื”ืฆืœื—ื”.
ืชื•ื›ืœ ืœืจืื•ืช ืคืจื˜ื™ื ื ื•ืกืคื™ื ื›ืืŸ.

ื ืชื‘ Banana Pi R64 - ื“ื‘ื™ืืŸ, Wireguard, RKN

ืœืื—ืจ ืžื›ืŸ, ื”ื“ืจืš ื”ืงืœื” ื‘ื™ื•ืชืจ ื”ื™ื ืœื˜ืขื•ืŸ ืืช ืžืขืจื›ืช ื”ื”ืคืขืœื” ืžื›ืจื˜ื™ืก SD: ื”ื•ืจื“ ืœืคื™ ืงืฉืจ ืชืžื•ื ื” ื•ืžืœื ืื•ืชื”:

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

ืื ื• ืžื›ื ื™ืกื™ื ืืช ื”ื›ืจื˜ื™ืก ืœื—ืจื™ืฅ SD R64, ืžืคืขื™ืœื™ื ืื•ืชื• ื•ืฆื•ืคื™ื ื‘ื˜ืขื™ื ืช ื”ืงื•ื ืกื•ืœื” ื”ืžื—ื•ื‘ืจืช ืชื—ื™ืœื” ื‘-uboot, ื•ืœืื—ืจ ืžื›ืŸ ื‘ื˜ืขื™ื ืช ืœื™ื ื•ืงืก ืจื’ื™ืœื”.

ืืคืฉืจื•ืช ืืชื—ื•ืœ ื—ืœื•ืคื™ืช ื”ื™ื ืฉื™ืžื•ืฉ ื‘ื›ืจื˜ื™ืก 64Gb ืฉื›ื‘ืจ ืžื•ื‘ื ื” ื‘-R8, ื”ื ืงืจื eMMC. ืœืคื™ ื”ื”ื•ืจืื•ืช ื‘ื•ื™ืงื™, ืื ื• ืžืขืชื™ืงื™ื ืืช ื”ืชืžื•ื ื” ืœืžื›ืฉื™ืจ
/dev/mmcblk0 ืœ-BPI, ื”ืคืขืœ ืžื—ื“ืฉ, ื”ืกืจ ืืช ื›ืจื˜ื™ืก ื”-SD, ื”ืคืขืœ ืฉื•ื‘ ืืช BPI... ื•ื–ื” ืœื ืขื•ื‘ื“. ืื™ืš ืœืœื›ืช ืงื“ื™ืžื” ื•ืื—ื•ืจื” Boot select ืืœ ืชื˜ืจื—.

ื”ืขื•ื‘ื“ื” ื”ื™ื ืฉืœืคื—ื•ืช ืขื‘ื•ืจ BPI ืืชื” ืฆืจื™ืš ืœื”ื’ื“ื™ืจ ื“ื’ืœ ืžื™ื•ื—ื“ ื›ื“ื™ ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœืืชื—ืœ ืžื›ื•ื ืŸ ื”ื‘ื–ืง ืคื ื™ืžื™:

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]

ืœืื—ืจ ืžื›ืŸ, ืขืœื™ืš ืœื›ืชื•ื‘ ื˜ื•ืขืŸ ืžืจืืฉ ืœืžื—ื™ืฆืช ืืชื—ื•ืœ ืžื™ื•ื—ื“ืช

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

ื”ื™ืฆืจืŸ R64 (ืกื™ืŸ) ืคืจืกื ื‘ื™ื ืืจื™ ื–ื” ื›ืืŸ. ืžื” ื–ื” ืขื•ืฉื” ืœื ื™ื“ื•ืข (ืื™ืŸ ืงื•ื“ื™ ืžืงื•ืจ), ืื‘ืœ ื–ื” ืœื ื™ืขื‘ื•ื“ ื’ื ื‘ืœืขื“ื™ื•.

ื‘ืื•ืคืŸ ื›ืœืœื™, ืœืื—ืจ ืžื›ืŸ, ื”ืชืžื•ื ื•ืช ืžืชื—ื™ืœื•ืช ืœื”ื™ื˜ืขืŸ ืž-eMMC. ืื ืืชื” ืจื•ืฆื” ืœื”ื‘ื™ืŸ ืืช ื–ื” ื•ืœื™ืฆื•ืจ ืชืžื•ื ื•ืช ืžืืคืก, ืื– ื‘ืฉื ื™ ื”ืžืงืจื™ื (SD/eMMC) ืืชื” ืฆืจื™ืš ืœื›ืชื•ื‘ ืขื•ื“ ื›ืžื” ืงื‘ืฆื™ื (ื˜ื•ืขืŸ ืžืจืืฉ ืœื›ืจื˜ื™ืก SD, ATF, u-boot) ืจืง ื›ื“ื™ ืœื”ื’ื™ืข ืœื˜ืขื™ื ืช ื”ืงืจื ืœ. ื”ื ื•ืฉื ื”ื–ื” ืขื“ื™ื™ืŸ ืžืชืคืชื—, ืื‘ืœ ืืฆืœื ื• ื”ืขื™ืงืจ ืฉื–ื” ืขื•ื‘ื“ ื•ื‘ืกื“ืจ.

ืขื›ืฉื™ื• ืื ื™ ืžื•ืจื™ื“ ื“ืจืš eMMC, ืœืžืขืŸ ื”ืืžืช, ืื ื™ ืœื ืžืฉืชืžืฉ ื‘ื–ื”, ืžืกืคื™ืง ื›ืจื˜ื™ืก SD, ืื‘ืœ ื‘ื™ืœื™ืชื™ ื“ื™ ื”ืจื‘ื” ื–ืžืŸ ื›ื“ื™ ืฉื–ื” ื™ืคืขืœ, ืื– ืชืŸ ืœื–ื” ืœื”ื™ื•ืช ื‘ืžืืžืจ.

ื‘ื—ื™ืจืช ืžืขืจื›ืช ื”ืคืขืœื”. ืืจืžื‘ื™ืืŸ

ืžืฉื™ืžืช ื”ื™ื™ืฉื•ื ื”ืจืืฉื•ื ื” ื”ื™ื ืœื”ืฉื™ืง VPN, ื›ืžื•ื‘ืŸ Wireguard. ืžื™ื“ ื”ืชื’ืœื” ืฉื‘ืฆื“ ื”ื’ืจืขื™ืŸ ื”ื•ื ืœื ื”ื•ืจื›ื‘ ื•ืœื ื”ื™ื• ื›ื•ืชืจื•ืช. ื‘ื ื™ืชื™ ืžื—ื“ืฉ ืืช ื”ืœื™ื‘ื”, ื•ื›ื”ืจื’ืœื™ ืขื x86, ื”ืจื›ื‘ืชื™ ืืช ืžื•ื“ื•ืœ ื”ืœื™ื‘ื” ื‘ืืžืฆืขื•ืช DKMS. ืขื ื–ืืช, ื”ืžื”ื™ืจื•ืช ืฉืœ ื‘ื ื™ื™ืช ืืคื™ืœื• ื›ืœื™ ืขื–ืจ ืงื˜ื ื™ื ืขืœ arm64 ื”ืคืชื™ืขื” ืื•ืชื™ ื‘ืฆื•ืจื” ืœื ื ืขื™ืžื”. ื•ืื– ื ื“ืจืฉ ืžื•ื“ื•ืœ ืงืจื ืœ ื ื•ืกืฃ ื•ื›ื•'. ื‘ืื•ืคืŸ ื›ืœืœื™, ืžืกืชื‘ืจ ืฉื›ืœ ืžื” ืฉืงืฉื•ืจ ืœืงืจื ืœ ืขื“ื™ืฃ ืœื”ืจื›ื™ื‘ ืขืœ ืžื—ืฉื‘ ื ื™ื™ื“ x86 ื—ื, ื•ืœืื—ืจ ืžื›ืŸ ืœื”ืขื‘ื™ืจ ืœ-R64 ืขืœ ื™ื“ื™ ื”ืขืชืงื” ืคืฉื•ื˜ื”, ื”ืคืขืœื” ืžื—ื“ืฉ ื•ื‘ื“ื™ืงื”.

ื“ื‘ืจ ื ื•ืกืฃ ื”ื•ื ื”ื—ืœืง ืฉืœ ืžืจื—ื‘ ื”ืžืฉืชืžืฉ. ื‘ืžืงืจื” ืฉืœื™ ืฉืœ ื”ื‘ื—ื™ืจื” ื‘ื“ื‘ื™ืืŸ, ื”ื›ืœ ืขื‘ื•ืจ ืืจื›ื™ื˜ืงื˜ื•ืจืช arm64 ื›ื‘ืจ ื ืžืฆื ื‘-packages.debian.org ื•ืื™ืŸ ืฆื•ืจืš ืœื‘ื ื•ืช ืฉื•ื ื“ื‘ืจ ืžื—ื“ืฉ.

ื›ื“ื™ ืœื ืœื™ื™ืฆืจ ืขื•ื“ ืื•ืคื ื™ื™ื, ืื ื™ ืžื•ืขื‘ืจ ืืจืžื‘ื™ืช ืขืœ BPI R64.
ืื• ืœื™ืชืจ ื“ื™ื•ืง, ื–ื”: ื”ื—ืœืง ืฉืœ ืžืจื—ื‘ ื”ืžืฉืชืžืฉ ื”ื•ื Armbian, ื•ื”ืงืจื ืœ ื ืœืงื— ืžื”ืžืื’ืจ ื›ืŸ-ื. ื ื™ืชืŸ ืœื”ื•ืจื™ื“ ืืช ื”ืชืžื•ื ื” ื”ืขื“ื›ื ื™ืช ื‘ื™ื•ืชืจ ื›ืืŸ.

ื›ืœ ื”ืคืขื™ืœื•ืช ื‘ืคื™ืชื•ื— ื—ืœืง ื”ืชื•ื›ื ื” ืฉืœ R64 ืžืชื‘ืฆืขืช ืขืœ ืคื•ืจื•ื. ื‘ืื•ืคืŸ ื›ืœืœื™, ื”ื™ืฆืจืŸ ืขืฆืžื• ืฉื•ืืฃ ืœื”ืคื•ืš ืืช ื”ื ืชื‘ ืœืคื•ืคื•ืœืจื™ ืขื‘ื•ืจ Openwrt, ืืš ื”ื•ื“ื•ืช ืœืคืขื™ืœื•ืชื• ืฉืœ ื”ืžืคืชื— ืคืจื ืง ืžื’ืจืžื ื™ื”, ื›ืœ ื”ืคื™ืฆ'ืจื™ื ืžื’ื™ืขื™ื ื‘ืžื”ื™ืจื•ืช ื‘ืงืจื ืœ ืฉืœ ื“ื‘ื™ืืŸ. ื‘ืื•ืคืŸ ืžืคืชื™ืข, ืคืจื ืง ืคืขื™ืœ ื‘ื›ืœ ืฉืจืฉื•ืจ ื‘ืคื•ืจื•ื.

ืืจื’ื•ืŸ ืกื‘ื™ื‘ืช ื”ืขื‘ื•ื“ื”: ื—ื•ื˜ื™ื

ื‘ื ืคืจื“, ื‘ืจืฆื•ื ื™ ืœืกืคืจ ืœื›ื ื›ื™ืฆื“ ื‘ืžื”ืœืš ืคื™ืชื•ื—/ื‘ื“ื™ืงื” ืžื ื™ื—ื™ื SBC (ืœื ืจืง BPI) ืขืœ ืฉื•ืœื—ืŸ ื›ื“ื™ ืœื ืœื”ืคืขื™ืœ ืืœื™ื• ื›ื‘ืœ Ethernet ืžืžืงื•ืจ ืื™ื ื˜ืจื ื˜ ืขืœ ืคื ื™ ื›ืœ ื”ื—ื“ืจ/ืžืฉืจื“. ื”ืขื•ื‘ื“ื” ื”ื™ื ืฉืžืฆื“ ืื—ื“ ืืชื” ืฆืจื™ืš ืœืกืคืง ืืช ืคื™ืกืช ื”ื—ื•ืžืจื” ืขื ืื™ื ื˜ืจื ื˜, ืื‘ืœ ืžืฆื“ ืฉื ื™, ื›ืœ ื“ื‘ืจ ื‘ืจื›ื™ื‘ ื”ื—ื•ืžืจื” ื”ื–ื” ื™ื›ื•ืœ ืœื”ืชืงืœืงืœ, ื•ืงื•ื“ื ื›ืœ Wifi.

ืจืืฉื™ืช, ื”ื—ืœื˜ืชื™ ืœืงื ื•ืช "ืžืฉืจื•ืงื™ืช" USB-Wifi ื–ื•ืœื”, ืœื—ื‘ืจ ืื•ืชื” ืœื™ืฆื™ืื” ื”ื™ื—ื™ื“ื” ื‘-BPI ื•ืœืฉื›ื•ื— ืžื”ื—ื•ื˜ื™ื. ืœืฉื ื›ืš ืจื›ืฉืชื™ TP-LINK TL-WN725N USB 2.0 ื–ื•ืœ, ืื‘ืœ ืžื”ืจ ืžืื•ื“ ื”ืชื‘ืจืจ ืฉื”ื•ื ืœื ื™ืžืจื™ื: ื›ื“ื™ ืฉื”ืžืฉืจื•ืงื™ืช ืชืขื‘ื•ื“, ืืชื” ืฆืจื™ืš ื“ืจื™ื™ื‘ืจ ื’ืจืขื™ืŸ, ืฉื›ืžื•ื‘ืŸ ืœื ื”ื™ื” ืฉื (ืžืื•ื—ืจ ื™ื•ืชืจ ื”ืจื›ื‘ืชื™ ืืช ื”ื“ืจื™ื™ื‘ืจ ื”ื“ืจื•ืฉ RTL8XXXU, ืื‘ืœ ื–ื” ืขื“ื™ื™ืŸ ืœื ืžืขืฉื™). ื•ื›ื‘ืœ ื”-Ethernet ืงืœืงืœ ืืช ืžืจืื” ื”ื—ื“ืจ ืœื–ืžืŸ ืžื”.

ื›ืชื•ืฆืื” ืžื›ืš, ื”ืฆืœื—ืชื™ ืœื”ื™ืคื˜ืจ ืžื”ื›ื‘ืœ ื‘ืขื–ืจืช Tenda MW3 (ืžืขืจื›ืช Wifi Mesh): ืคืฉื•ื˜ ื”ื ื—ืชื™ ืงื•ื‘ื™ื™ื” ืื—ืช ืžืชื—ืช ืœืฉื•ืœื—ืŸ ื•ื—ื™ื‘ืจืชื™ ืืช ื”-BPI ืœื™ืฆื™ืืช ื”-LAN ืฉืœ ื”ืื—ืจื•ืŸ ืขื ื›ื‘ืœ Ethernet ื‘ืื•ืจืš ืžื˜ืจ. ื”ึทืฆืœึธื—ึธื”.

Wireguard, RKN, Bird

ืื—ื“ ื”ื“ื‘ืจื™ื ืฉืื ื™ ืจื•ืฆื” ืœื”ืฉืชืžืฉ ืขื‘ื•ืจื ื‘-Banana PI ื”ื•ื ืœืงื‘ืœ ื’ื™ืฉื” ื—ื•ืคืฉื™ืช ืœืืชืจื™ื ื—ืกื•ืžื™ื ืขืœ ื™ื“ื™ RKN, ื‘ืคืจื˜, ื›ื“ื™ ืฉืฉื™ื—ื•ืช ื˜ืœื’ืจื ื•-Slack ื™ื•ื›ืœื• ืœืขื‘ื•ื“. ืžืืžืจื™ื ืขืœ Habrรฉ ื›ื‘ืจ ื”ื•ืฆืขื• ื‘ื ื•ืฉื ื–ื”: ื–ืžืŸ, ะดะฒะฐ, ืฉืœื•ืฉ.

ืคืจืกืชื™ ื‘ื“ื™ื•ืง ืืช ื”ืคืชืจื•ืŸ ื”ื–ื” ื‘ืืžืฆืขื•ืช Ansible: ืงืฉืจ.

ื”ื”ื ื—ื” ื”ื™ื ืฉื”-VPS ืžืจื™ืฅ ืืช ืื•ื‘ื•ื ื˜ื• 18.04. ื‘ื“ืงืชื™ ืืช ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื‘ืฉื ื™ ืžืืจื—ื™ื ื‘ืื™ืจื•ืคื”: ืืžื–ื•ืŸ ื•-Digital Ocean.

ืื–, ื”ืชืงื ื• ืืช Armbian ืœืขื™ืœ ืขืœ R64, ื–ื” ื ื’ื™ืฉ ื“ืจืš ssh ืชื—ืช ื”ืฉื hm-bananapi-1 ื•ื™ืฉ ืœื• ื’ื™ืฉื” ืœืื™ื ื˜ืจื ื˜. ืื ื• ืคื•ืจืกื™ื ื‘ืื•ืคืŸ ืขืงื‘ื™ ืกืงืจื™ืคื˜ื™ื ืฉืœ Ansible, ืื•ื˜ื•ืžืฆื™ื” ื•ืžืฉื™ืงื™ื ืืช ื”ื”ืชืงื ื” ืขืฆืžื” ื‘-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

ืœืื—ืจ ืžื›ืŸ, ืขืœื™ืš ืœืคืจื•ืก ืืช ื”-VPN ืฉืœื ื• ืœ-VPS ื‘ืื•ืชื• ืื•ืคืŸ:

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

ื›ืืŸ ื”ืืจื’ื•ืžื ื˜ ื”ื•ื ืชืžื™ื“ current-vpn, ื•ืฉื ื”-VPS ื‘ืคื•ืขืœ ืžื•ื’ื“ืจ ื‘ืžืฉืชื ื” (ื‘ืžืงืจื” ื–ื” ื”ื•ื 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

ืื” ื›ืŸ, ืœืคื ื™ ื›ืœ ื”ืคืขื•ืœื•ืช ื”ืืœื” ืืชื” ืฆืจื™ืš ืœื™ืฆื•ืจ ืกื•ื“ื•ืช (ื‘ืคืจื˜ ืžืคืชื—ื•ืช Wireguard) ืœืชื•ืš ื”ืชื™ืงื™ื” ./secrets, ื”ืกืคืจื™ื™ื” ืืžื•ืจื” ืœื”ื™ืจืื•ืช ื›ืš.

ืื•ื˜ื•ืžืฆื™ื” Ansible ื‘- Python

ื™ื™ืชื›ืŸ ืฉืชื‘ื—ื™ืŸ ืฉื‘ืžืงื•ื ืœื”ื™ื•ืช ื‘ืคื•ืจืžื˜ YAML, ื”ืคืงื•ื“ื•ืช ืฉืœ Ansible ืžืงื•ื“ื“ื•ืช ื‘ืกืงืจื™ืคื˜ื™ื ืฉืœ Python. ืœืฉื ื”ืฉื•ื•ืื”, ื›ื™ืฆื“ ืœื”ืคืขื™ืœ ืืช ื“ืžื•ืŸ ื”ืฆื™ืคื•ืจื™ื ื‘ื“ืจืš ื”ืจื’ื™ืœื”:

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

ื•ืื™ืš ืœืขืฉื•ืช ืืช ืื•ืชื• ื”ื“ื‘ืจ ื“ืจืš Python:

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

ื›ืชื™ื‘ืช ืคืงื•ื“ื•ืช Ansible ื‘-Python ืžืืคืฉืจืช ืœืขืฉื•ืช ืฉื™ืžื•ืฉ ื—ื•ื–ืจ ื‘ืงื•ื“, ื•ื‘ืื•ืคืŸ ื›ืœืœื™ ืคื•ืชื—ืช ืืช ื›ืœ ื”ืืคืฉืจื•ื™ื•ืช ืฉืœ ื”ืฉืคื” ื”ืชื›ืœื™ืชื™ืช. ืœื“ื•ื’ืžื”, ื”ืชืงื ืช bird ืขืœ R64 ื•-VPS:

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

ืจืื” ืืช ืงื•ื“ ื”ืคื•ื ืงืฆื™ื” install_bird().

ืชื›ื•ื ื” ื–ื• ื ืงืจืืช pybook ืžื•ื˜ืžืข ื›ืืŸ. ืื™ืŸ ืขื“ื™ื™ืŸ ืชื™ืขื•ื“ ืขืœ pybook, ืื‘ืœ ืื ื™ ืืชืงืŸ ื‘ืขื™ื” ื–ื• ืžืื•ื—ืจ ื™ื•ืชืจ.

ืžื” ื”ื•ื ื—ื•ืฉื‘ ื‘ึผึฐืžึทืขึฒืœึถื” ื”ึทื–ึถืจึถื ื‘ื”ื–ื“ืžื ื•ืช ื–ื•.

ื ื™ื˜ื•ืจ. ืคืจื•ืžืชืื•ืก

ืกื”"ื›: ื˜ืœื’ืจื ืขื•ื‘ื“, ื’ื linkedin ื•- pornhub, ื‘ืื•ืคืŸ ื›ืœืœื™ ื—ื•ื•ื™ืช ื”ืžืฉืชืžืฉ ื‘ืกื“ืจ. ืื‘ืœ ื”ื›ืœ ื™ื›ื•ืœ ืœื”ื™ืฉื‘ืจ, ื›ื•ืœืœ ื—ื•ืžืจื” ืกื™ื ื™ืช.

ื’ื ืขื“ื›ื•ื ื™ ืœื™ื‘ื” ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ืžืขื ื™ื™ื ื™ื: ืœื“ื•ื’ืžื, ืจืฆื™ืชื™ ืœืขื“ื›ืŸ ืืช ื”ื’ืจืขื™ืŸ 5.4 => 5.6, ื•ื‘ื›ืŸ, Wireguard ื ืžืฆื ืฉื ืžื—ื•ืฅ ืœืงื•ืคืกื”, ืื™ืŸ ืฆื•ืจืš ืœื‘ืฆืข ืชื™ืงื•ืŸ... ืœื ืžื•ืงื“ื ื™ื•ืชืจ ืžืืฉืจ ื ืขืฉื”: ื”ืขื‘ืจืชื™ ื‘ืงืคื™ื“ื” ืืช ื”ืชื™ืงื•ื ื™ื ืžื’ืจืกื” 5.4 ืœ-5.6, ื”ืœื™ื‘ื” ื”ืชื—ื™ืœื” ืœืคืขื•ืœ, ื”ืžื ื”ืจื” ืœ-VPS ืคื ืชื”, ืื‘ืœ bird ืœื ื™ื›ื•ืœื” ืœื”ืชื—ื‘ืจ ืœืฉื’ื™ืื” "BGP Error"... "ื—ื–ืจืชื™ ื‘ืื™ืžื”" (ื’) ืœ-5.4; ื”ืžืขื‘ืจ ืœ-5.6 ื ื“ื—ื” ื‘-TODO.

ืœื›ืŸ, ื‘ื ื•ืกืฃ ืœื”ืชืงื ืช ื”ื ืชื‘ ื•ื”-VPS, ื”ื•ืกืคืชื™ ื ื™ื˜ื•ืจ (ื‘-x86 Ubuntu 18.04), ื”ืžื•ืชืงืŸ ืขืœ ืžืืจื— ื ืคืจื“ ืขื ื”ืจื›ื™ื‘ื™ื ื”ื‘ืื™ื:

  • prometheus, alertmanager, blackbox_exporter - ื”ื›ืœ ื‘-docker
  • ื”ืชืจืื•ืช ื ืฉืœื—ื•ืช ืœืขืจื•ืฅ ื”ื˜ืœื’ืจื ื‘ืืžืฆืขื•ืช ื”ื‘ื•ื˜ metalmatze/alertmanager-bot - ื’ื ื‘-Docker
  • tor ืขื‘ื•ืจ ื”ื‘ื•ื˜, ื›ืš ืฉื”ื‘ื•ื˜ ื™ื•ื›ืœ ืœื”ืชืจื™ืข ืขืœ ืžืฆื‘ื™ื ื›ืืฉืจ ื™ืฉ ืื™ื ื˜ืจื ื˜, ืื‘ืœ ื˜ืœื’ืจื ืขื“ื™ื™ืŸ ืœื ืขื•ื‘ื“, ื•ื”ื‘ื•ื˜ ืขืฆืžื• ืœื ื™ื›ื•ืœ ืœื”ืชื—ื‘ืจ
  • ื”ื•ื—ืœ ื”ืชืจืื•ืช: NodeVPNTroubles (ืœืœื ืคื™ื ื’ ืœ-VPS), BirdVPNTroubles (ืœืœื ื”ืคืขืœืช Bird), AntifilterDownloadTroubles (ืฉื’ื™ืื” ื‘ื˜ืขื™ื ืช ื›ืชื•ื‘ื•ืช IP ื—ืกื•ืžื•ืช), SiteTroubles (ื˜ืœื’ืจื ืœื ื–ืžื™ืŸ)
  • ื”ืชืจืื•ืช ืžืขืจื›ืช, ืœืžืฉืœ, HostGrowingDiskReadLatency (ื›ืจื˜ื™ืก SD ื–ื•ืœ ื”ื•ืคืš ืœื‘ืœืชื™ ืงืจื™ื)

ื“ื•ื’ืžื” ืœื”ื’ื“ืจืช ื ื™ื˜ื•ืจ:

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

ื’ื™ืœื•ื™ ืื•ื˜ื•ืžื˜ื™ ืขื‘ื•ืจ Prometheus ืžื•ื’ื“ืจ ื‘ืชื™ืงื™ื™ื” /etc/prometheus/auto_http, ื“ื•ื’ืžื” ืœื”ื•ืกืคืช ืžืืจื— ืœื ื™ื˜ื•ืจ (ืžืืจื—ื™ื ืื™ื ื ืžื ื•ื˜ืจื™ื ื›ื‘ืจื™ืจืช ืžื—ื“ืœ):

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 ืกืคืงื™ื, 2 BPI, anycast failover

ื‘ื ื•ืกืฃ ืœื”ื›ืœ, ืชื›ื ื ืชื™ ืœื”ืชื—ื‘ืจ ืœืฉื ื™ ืกืคืงื™ื ื›ื“ื™ ืฉื”ืื™ื ื˜ืจื ื˜ ื™ืžืฉื™ืš ืœืขื‘ื•ื“, ื’ื ืื ืœืกืคืง ืื—ื“ ื™ืฉ ื‘ืขื™ื•ืช ื‘ืจืฉืช, ืื• ืฉืฉื›ื—ื• ืœืฉืœื ืขืœ ื”ืื™ื ื˜ืจื ื˜ ื•ื›ื•' ื•ืขื•ื“ ื’ื•ืจืžื™ื ืื ื•ืฉื™ื™ื.

ืžืชื•ืืจืช ื—ื•ื•ื™ืช ื”ืžืฉืชืžืฉ ื”ืžืชืงื“ืžืช ื‘ื™ื•ืชืจ ื‘ื ื•ืฉื ืจื™ื‘ื•ื™ ื•ื•ืืŸ ื›ืืŸ ืขื‘ื•ืจ ืžืขืจื›ืช Mwan3 ืชื—ืช Openwrt. ืœืคืชืจื•ืŸ ื”ื–ื” ื™ืฉ ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืขืฉื™ืจื”, ืื‘ืœ ื”ื”ื’ื“ืจื” ื•ื”ื”ืคืขืœื” ืฉืœื• ื‘ืื•ืคืŸ ื›ืœืœื™ ืขื‘ื•ืจ multi-wan ื”ื™ื ื“ื™ ื‘ืขื™ื™ืชื™ืช. ืจืง ื“ื•ื’ืžื” ืื—ืช: ืื ืืชื” ืžื’ื™ืข ืœืืชืจื™ื ืžืกื•ื™ืžื™ื ืžืฉืชื™ ื›ืชื•ื‘ื•ืช IP ื‘ื•-ื–ืžื ื™ืช, ื™ื™ืชื›ืŸ ืฉื”ื ืœื ื™ืื”ื‘ื• ืืช ื–ื”, ื”ื ื™ืคืกื™ืงื• ืœืขื‘ื•ื“ => "ื”ืื™ื ื˜ืจื ื˜ ืœื ืขื•ื‘ื“."

ื‘ื”ืชื—ืฉื‘ ื‘ื ื™ืกื™ื•ืŸ ื”ื–ื”, ื”ื—ืœื˜ืชื™ ืฉ-multihoming ืขื“ื™ื™ืŸ ืœื ื‘ืจืืฉ ืกื“ืจ ื”ืขื“ื™ืคื•ื™ื•ืช, ืืœื ืจืง ื›ืฉืœ ื‘ื›ืฉืœ. ืืžื ื, ื ืจืื” ืฉื‘ื’ืจืกืื•ืช ื”ืื—ืจื•ื ื•ืช ืฉืœ ืœื™ื ื•ืงืก ื”ื›ืœ ืืžื•ืจ ืœืขื‘ื•ื“ ืขื ืคืงื•ื“ื” ืื—ืช ื›ืžื•:

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

ืœื›ืŸ, ืขืœ ืžื ืช ืœืžื ื•ืข ื ืงื•ื“ืช ื›ืฉืœ ื‘ื•ื“ื“ืช, ืื ื• ืœื•ืงื—ื™ื 2 BPIs, ืžื—ื‘ืจื™ื ื›ืœ ืื—ื“ ืœืกืคืง ืื—ื“, ืžื—ื‘ืจื™ื ืื•ืชื ื–ื” ืœื–ื” ื•ื™ื•ืฆืจื™ื ืืช ื”ื—ื™ื‘ื•ืจ ืื—ื“ ืขื ื”ืฉื ื™ ืœื ื™ืชื•ื‘ ื“ื™ื ืžื™ ื‘ืืžืฆืขื•ืช bird/OSPF.

ืœืื—ืจ ืžื›ืŸ, ืื ื• ืžืคืจืกืžื™ื ืืช ืื•ืชื” ื›ืชื•ื‘ืช IP ื‘ื›ืœ ืื—ืช ืžื”ืŸ ืื ื”ืฉื™ืจื•ืช ื–ืžื™ืŸ (ืื™ื ื˜ืจื ื˜, DNS). ื›ืœื•ืžืจ, ืœื ื ื’ื“ื™ืจ ืืช ืžืกืœื•ืœ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื‘ืขืฆืžื ื•, ืืœื ื“ืจืš bird. ื—ื™ืคืฉืชื™ ืืช ื”ืคืชืจื•ืŸ ื›ืืŸ .

ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื”ื–ื• ืขื“ื™ื™ืŸ ืœื ื™ื•ืฉืžื”, ื•ื™ืจื•ืก ื”ืงื•ืจื•ื ื” ื”ืขืจืžื•ืžื™ ืฉื™ื—ืง ื›ืืŸ (ืœื ื”ื›ืœ ื”ื’ื™ืข ืžืืœื™ืืงืกืคืจืก; ื—ื ื•ืช ืžืงื•ื•ื ืช ืื—ืจืช, Layta, ื”ื‘ื˜ื™ื—ื” ืœืกืคืง ืชื•ืš ืฉื‘ื•ืข, ืื‘ืœ ืขื‘ืจ ื™ื•ืชืจ ืžื—ื•ื“ืฉ; ืœืกืคืง ื”ืฉื ื™ ืœื ื”ื™ื” ื–ืžืŸ ืœื”ืืจื™ืš ืืช ื”ื›ื‘ืœ ืœืคื ื™ ื”ื”ืกื’ืจ, ืจืง ื”ืฆืœื™ื— ืœื”ืฉื™ื’ ื—ื•ืจ ื‘ืžืงื“ื—ื” ืœืชื•ืš ื”ืงื™ืจ ืขื‘ื•ืจ ื”ื›ื‘ืœ).

ื›ื™ืฆื“ ืœื”ื–ืžื™ืŸ R64

ื”ืœื•ื— ืขืฆืžื• ื ืžืฆื ื‘ื—ื ื•ืช ื”ืจืฉืžื™ืช SinoVoip.
ืขื“ื™ืฃ ื’ื ืœื”ื–ืžื™ืŸ ืžื™ื“:

  • ืชื–ื•ื ื” + ืœื™ื™ื“ืข ืืช ืชืงืŸ ื”ืชืงืข ื‘ืื™ื—ื•ื“ ื”ืื™ืจื•ืคื™ ืื• ื‘ืืจื”"ื‘
  • ื’ื•ืฃ ืงื™ืจื•ืจ: ืจื“ื™ืื˜ื•ืจื™ื/ืžืื•ื•ืจืจื™ื; ื›ื™ ื’ื ื”ืžืขื‘ื“ ื•ื’ื ืฉื‘ื‘ ื”ืžืชื’ ืžืชื—ืžืžื™ื
  • ืื ื˜ื ืช wifi, ืœื“ื•ื’ืžื”

ื™ืฉ ื ื™ื•ืื ืก - ืžื—ื™ืจ ื”ืžืฉืœื•ื— ื”ืคืš ื’ื‘ื•ื” ื‘ืžื™ื“ื” ืžืกืคืงืช ื‘ื—ื ื•ืช ื”ืจืฉืžื™ืช ื‘ืžืฉืš ื–ืžืŸ ืžื”. ื”ืžื ื”ืœืช ื’'ื•ื“ื™ ื”ื•ืื ื’ ืฉื›ื ืขื” ืื•ืชื™ ืฉืื™ืŸ ืฉื’ื™ืื”, ื•ืืชื” ื™ื›ื•ืœ ืœื‘ื—ื•ืจ ePacket ื‘-$5, ืื‘ืœ ืจืื™ืชื™ ืฉืœืจื•ืกื™ื” ื™ืฉ ืจืง EMS ื‘->33$. ืœื ื ืขื™ื, ืื‘ืœ ืœื ืงืจื™ื˜ื™. ื™ืชืจื” ืžื›ืš, ืื ืชื‘ื—ืจ ื‘ื›ืœ ืžื“ื™ื ื” ืื—ืจืช ืœืžืฉืœื•ื— (ืขื‘ืจืชื™ ื‘ื›ืœ ื”ื™ื‘ืฉื•ืช), ื”ืžืฉืœื•ื— ื™ืขืœื” ~$5. ืจื•ืกื•ืคื•ื‘ื™ื?.. ืื‘ืœ ืื– ื’ื™ืœื™ืชื™ ืฉืœืฆืจืคืช ืžื—ื™ืจ ื”ืžืฉืœื•ื— ื”ื•ื ื’ื ~30$, ื•ื ืจื’ืขืชื™.

ื›ืชื•ืฆืื” ืžื›ืš, ื’'ื•ื“ื™ ื”ืฆื™ืขื” ืœื‘ืฆืข ื”ื–ืžื ื”, ืืš ืœื ืœืฉืœื (ืœืจืžื•ื–: ืฉื™ื ืคื—ื•ืช ืขืœ ื”ื›ืจื˜ื™ืก ื›ื“ื™ ืฉื”ืชืฉืœื•ื ื”ืื•ื˜ื•ืžื˜ื™ ืœื ื™ืขื‘ื•ืจ); ื›ืชื‘ื• ืœื” ื•ื”ื™ื ืชื•ืจื™ื“ ืืช ืžื—ื™ืจ ื”ืžืฉืœื•ื— ืœืฉื’ืจื”. ื”ึทืฆืœึธื—ึธื”.

ื ื•ืฉืื™ื

ืขื“ื™ื™ืŸ ืœื ื”ื›ืœ ืขื•ื‘ื“ ื‘ืฆื•ืจื” ืžื•ืฉืœืžืช.

ืคืจื•ื“ื•ืงื˜ื™ื‘ื™ื•ืช

Ansible=ืคืงื•ื“ื•ืช Python ืžื‘ื•ืฆืขื•ืช ื‘ืื™ื˜ื™ื•ืช, ืืคื™ืœื• ื‘ื˜ืœื•ืช, ืœืžืฉืš 20-30 ืฉื ื™ื•ืช; ื™ื•ืชืจ ื‘ืกื“ืจ ื’ื•ื“ืœ ืžืืฉืจ ื‘ืžื—ืฉื‘ ื ื™ื™ื“ x86. ื™ืชืจ ืขืœ ื›ืŸ, ื‘ื”ืชื—ืœื” ื”ื ืžื‘ื•ืฆืขื™ื ื“ื™ ืžื”ืจ, ~3 ืฉื ื™ื•ืช, ื•ืื– ื”ื ืžืื˜ื™ื ื‘ื—ื“ื•ืช. ื™ื™ืชื›ืŸ ืฉื”ืกื™ื‘ื” ืœื›ืš ื”ื™ื ื”ืชื—ืžืžื•ืช ื”ืžืขื‘ื“ (ืžื—ืกื ืช). ื’ื ืœืงื•ื“ ื”-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

Wifi ืขื•ื‘ื“, ืื‘ืœ ื‘ืืจืžื‘ื™ืืŸ ื–ื” ืžืคืกื™ืง ืื—ืจื™ ื™ื•ื ื‘ืขืจืš, ื›ื•ืชื‘:

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

ืจืง ื”ืคืขืœื” ืžื—ื“ืฉ ืขื•ื–ืจืช. ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื”ืžืฉื™ืš ื”ืœืื” ืœื”ื‘ื™ืŸ.

Ethernet

Ethernet ืขื•ื‘ื“, ืื‘ืœ ืœืื—ืจ ~64 ืฉืขื•ืช ืžื ื•ืช (DHCP) ืž-RXNUMX ืžืคืกื™ืงื•ืช ืœื”ื’ื™ืข.
ื”ืคืขืœื” ืžื—ื“ืฉ ืฉืœ ื”ืžืžืฉืง ืขื•ื–ืจืช:

ifdown br0; sleep 30; ifup br0

ื”ื“ืจื™ื™ื‘ืจ ื—ื“ืฉ, ื”ื•ื ืขื“ื™ื™ืŸ ืœื ื”ืชืงื‘ืœ ืœื’ืจืขื™ืŸ, ืื ื™ ืžืงื•ื•ื” ืฉื–ื” ืœื ื“ืŸ ืฆ'ืื• ื”ืกื™ื ื™ืช ืžืกื™ื™ื ืืช ื–ื”.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”