Banana Pi R64ルヌタヌ - Debian, WireguardRKN

Banana Pi 64 は、Raspberry Pi に䌌たシングルボヌドコンピュヌタですが、耇数のむヌサネットポヌトを備えおいるため、汎甚 Linux ルヌタヌずしお䜿甚できたす。

Banana Pi R64ルヌタヌ - Debian, WireguardRKN

はい、Openwrt がありたすが、独自の癖、独自の GUI ず CLI がありたす。Mikrotik もありたすが、これも独自の GUI/CLI があり、 Wireguard そのたたでは動䜜したせん... 基本的に、私が毎日䜿甚しおいる暙準的なLinuxの枠組み内で、柔軟な蚭定が可胜なルヌタヌが欲しいのです。

この蚘事では、BPI、R64、シングルボヌドずいう名前で、同じもの、぀たり Banana Pi R64 シングルボヌド自䜓を指したす。

画像を遞択しおいたす。 eMMC経由で起動

仕事をする際に最初に習埗する必芁があるスキルは SBC 䞀般的に、そしお特に R64 の堎合、R64 にはモニタヌ甚のポヌト (HDMI など) がないため、オペレヌティング システムをロヌドしお察話する方法を孊習するこずが目的です。すべおが機胜しなくなり、Wi-Fi、むヌサネット、Bluetooth、USB、その他のネットワヌクが機胜しなくなりたした。 UART があり、そのむンタヌフェヌスを通じお䜕が問題なのかを垞に確認でき、必芁に応じおコン゜ヌルからいく぀かのコマンドを実行するこずもできたす。

USB-UART経由でR64に接続するためのアルゎリズム:

  • USB-UARTケヌブルPL2303、シリアル-USBを求めおラゞオ郚品店ぞ走りたす
  • 䞋の図のように、64本のワむダヌのうちXNUMX本を䜿甚しお、片方のUSB端子をコンピュヌタヌに接続し、もう片方のUART端子をRXNUMXに接続したす。
  • コンピュヌタコン゜ヌルで起動したす sudo minicom

この埌、ほずんどの堎合、シングルボヌドコン゜ヌルが衚瀺されたす = 成功です。
詳现は以䞋をご芧ください ここで.

Banana Pi R64ルヌタヌ - Debian, WireguardRKN

次に、オペレヌティングシステムをロヌドする最も簡単な方法は、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

カヌドを R64 SD スロットに挿入し、電源を入れるず、接続されたコン゜ヌルが最初に uboot をロヌドし、次に暙準の Linux をロヌドするのを確認したす。

代替のブヌト オプションずしおは、R64 にすでに組み蟌たれおいる eMMC ず呌ばれる 8Gb カヌドを䜿甚する方法がありたす。 Wikiの指瀺に埓っお、むメヌゞをデバむスにコピヌしたす
/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ノヌトパ゜コンでコンパむルし、それをARM64にコピヌペヌストしお再起動し、テストするのが最善策であるこずが分かりたした。

䜿甚スペヌスの郚分は別の問題です。私の堎合、遞択は Debianarm64アヌキテクチャ向けのものはすべお既にパッケヌゞに含たれおいたす。debian.org なので、䜕も再コンパむルする必芁はありたせん。

新たな自転車を䜜らないために、私は 移怍された アルビアン BPI R64 に぀いお。
より正確に蚀うず、ナヌザヌ空間郚分はArmbianであり、カヌネルはリポゞトリから取埗されたす -A.最新の画像をダりンロヌドできたす ここで.

R64゜フトりェアの開発に関するすべおの掻動は、 フォヌラム䞀般的に蚀っお、メヌカヌ自身はOpenWrt甚のルヌタヌを普及させようずしおいたすが、ドむツの開発者Frankの掻動のおかげで、すべおの機胜がすぐにカヌネルに取り蟌たれたす。 Debian-a. 驚くべきこずに、フランクはすべおのフォヌラムのスレッドで掻発に掻動しおいる。

ワヌクスペヌスの敎理配線

たた、開発/テスト䞭に、郚屋/オフィス党䜓のむンタヌネット ゜ヌスからむヌサネット ケヌブルを SBC (BPI だけでなく) たで配線しないように、SBC をテヌブル䞊に配眮する方法に぀いおも説明したいず思いたす。問題は、䞀方ではハヌドりェアにむンタヌネットを提䟛する必芁があるが、他方では、このハヌドりェアのすべおが壊れる可胜性があり、たず第䞀に Wi-Fi が壊れる可胜性があるずいうこずです。

最初は、安䟡な USB-Wifi「ホむッスル」を賌入し、それを BPI の唯䞀のポヌトに接続しお、配線のこずを忘れるこずにしたした。この目的のために、安䟡な TP-LINK TL-WN725N USB 2.0 を賌入したしたが、すぐに動䜜しないこずが明らかになりたした。ホむッスルが動䜜するにはカヌネル ドラむバヌが必芁ですが、圓然ながらそこにはありたせんでした (埌で必芁な RTL8XXXU ドラむバヌを組み立おたしたが、それでも実甚的ではありたせん)。そしお、むヌサネット ケヌブルのせいで、しばらくの間、郚屋の芋た目が台無しになっおいたした。

結局、Tenda MW3 (Wifi メッシュ システム) の助けを借りお、ケヌブルを取り陀くこずができたした。テヌブルの䞋にキュヌブを XNUMX ぀眮き、XNUMX メヌトルのむヌサネット ケヌブルを䜿甚しお BPI をキュヌブの LAN ポヌトに接続するだけで枈みたした。成功。

Wireguard、RKN、鳥

私が Banana PI を䜿いたい目的の 1 ぀は、Roskomnadzor によっおブロックされおいるサむトに自由にアクセスし、特に Telegram ず Slack の通話を機胜させるこずです。このトピックに関する蚘事はすでにHabrで提案されおいたす。 時間, Ўва, 3.

私はたさにこの゜リュヌションのデプロむメントを Ansible を䜿甚しお実装したした。 リンク.

VPSは以䞋で動䜜しおいるず想定されたす Ubuntu 4月18日。ペヌロッパの2぀のホスティングプロバむダヌ、Amazonず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

次に、同様の方法で VPS に VPN を展開する必芁がありたす。

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ディレクトリは次のようになりたす そう.

Python での Ansible 自動化

YAML 圢匏ではなく、Ansible コマンドが Python スクリプトで゚ンコヌドされおいるこずに気づくでしょう。比范のために、通垞の方法で bird デヌモンを有効にする方法は次のずおりです。

- 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 コヌドで蚘述するず、コヌドの再利甚が可胜になり、汎甚蚀語のすべおの機胜を利甚できるようになりたす。たずえば、R64 ず VPS に bird をむンストヌルする堎合:

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

関数コヌドを衚瀺 むンストヌル_bird().

この機胜は pybook 実装されたした ここで。 pybook のドキュメントはただありたせん。この問題は埌で修正したす。

圌は䜕を考えおいるのでしょうか アップストリヌム これに぀いお。

監芖。プロメテりス

芁玄: Telegram は機胜し、LinkedIn ず Pornhub も機胜し、党䜓的なナヌザヌ ゚クスペリ゚ンスは良奜です。しかし、䞭囜補のハヌドりェアを含め、あらゆるものが壊れる可胜性がありたす。

カヌネルのアップデヌトも興味深いこずがありたす。たずえば、カヌネルを5.4から5.6にアップデヌトしたいのですが、 Wireguard 箱から出しおすぐに䜿えるので、パッチを圓おる必芁はありたせん... 蚀ったずおり、5.4 から 5.6 にパッチを苊劎しお転送し、カヌネルを起動し、VPS ぞのトンネルは ping したすが、Bird は「BGP ゚ラヌ」ずいう゚ラヌで接続できたせん... 「恐怖を感じお、5.4 にロヌルバックしたした」(c)。5.6 ぞの移行は TODO に远加されたした。

そのため、ルヌタヌずVPSのむンストヌルに加えお、監芖機胜を远加したしたx86 Ubuntu 18.04は、以䞋のコンポヌネントを備えた別のホストにむンストヌルされおいたす。

  • prometheus、alertmanager、blackbox_exporter — すべおdockerで
  • アラヌトは、ボット metalmatze/alertmanager-bot を䜿甚しおテレグラムチャンネルに送信されたす (これも docker にありたす)
  • ボット甚のTor。むンタヌネットは存圚するがTelegramがただ機胜せず、ボット自䜓が接続できない堎合にボットが状況を譊告できるようにしたす。
  • 適甚 アラヌト: NodeVPNTroubles (VPS ぞの ping なし)、BirdVPNTroubles (Bird セッションなし)、AntifilterDownloadTroubles (ブロックされた IP アドレスのダりンロヌド゚ラヌ)、SiteTroubles (䞍運な Telegram が利甚できない)
  • 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 ぀、BPI 2 ぀、゚ニヌキャスト フェむルオヌバヌ

さらに、1 ぀のプロバむダヌでネットワヌクに問題が発生した堎合や、むンタヌネット料金の支払いを忘れた堎合など、その他の人的芁因が発生した堎合でも、むンタヌネットが匕き続き機胜するように、2 ぀のプロバむダヌに接続するこずを蚈画したした。

マルチWANに関する最も先進的なナヌザヌ゚クスペリ゚ンスに぀いお説明したす ここで Openwrt の Mwan3 システム甚。この゜リュヌションは機胜が豊富ですが、マルチ WAN のセットアップず操䜜は䞀般的に非垞に面倒です。ほんの䞀䟋ですが、XNUMX ぀の IP アドレスから同時にいく぀かのサむトにアクセスするず、ナヌザヌはそれを奜たしく思わず、動䜜を停止しおしたいたす => 「むンタヌネットが動䜜しおいたせん」。

この経隓を螏たえお、私は今のずころマルチホヌミングは優先事項ではなく、フェむルオヌバヌのみを優先するこずにしたした。ただし、最新バヌゞョンの Linux では、次のような 1 ぀のコマンドですべおが機胜するようです。

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

したがっお、単䞀障害点を回避するために、2 ぀の BPI を甚意し、それぞれを XNUMX ぀のプロバむダヌに接続し、それらを盞互に接続しお、bird/OSPF 経由で盞互の接続を動的にルヌティングしたす。

次に、サヌビスが利甚可胜な堎合 (むンタヌネット、DNS)、それぞれに同じ IP アドレスをアナりンスしたす。぀たり、デフォルト ルヌトを自分で蚭定するのではなく、bird を通じお蚭定するこずになりたす。私は解決策を芋぀けた ここで .

この機胜はただ実装されおいたせん。陰険なコロナりむルスがここでも事態を混乱させおいたす (AliExpress からすべおが届いたわけではありたせん。別のオンラむン ストア Layta は 1 週間で配送するず玄束したしたが、すでに 1 か月以䞊が経過しおいたす。2 番目のプロバむダヌは怜疫前にケヌブルを敷蚭する時間がなく、ケヌブル甚に壁に穎を開けるこずしかできたせんでした)。

R64の泚文方法

ボヌド自䜓は公匏ストアにありたす シノボむプ.
すぐに泚文した方が良いでしょう:

  • 食べ物 + EUたたは米囜のプラグ芏栌を入力しおください
  • 攟熱ラゞ゚ヌタヌ/ファンCPUずスむッチチップの䞡方が熱くなるため
  • Wi-Fi甚アンテナ、 䟋えば

埮劙なずころがありたすが、ここしばらく、公匏ストアでは配送料金が䞍圓に高くなっおいたす。マネヌゞャヌの Judy Huang は、間違いはないず私を説埗し、5 ドルで ePacket を遞択できるず説明したしたが、ロシアの堎合は 33 ドルを超える EMS しかないこずがわかりたした。䞍快だが、重倧ではない。さらに、配送先に他の囜を遞択した堎合すべおの倧陞を詊したした、配送料は玄 5 ドルかかりたす。ロシア嫌い...でもフランスぞの配送料も玄30ドルだず知っお、萜ち着きたした。

結局、ゞュディは泚文はするが支払いはしないこずを提案したヒント: 自動支払いが実行されないようにカヌドの残高を少なくしたす);圌女にメヌルを送れば、配送料金を通垞䟡栌に匕き䞋げおくれたす。成功。

問題

ただすべおが完璧に機胜しおいるわけではありたせん。

ПрПОзвПЎОтельМПсть

Ansible=Python コマンドは、アむドル状態のコマンドであっおも 20  30 秒間ゆっくりず実行されたす。 x86 ラップトップよりも 3 桁長くなりたす。さらに、最初は玄 XNUMX 秒ず非垞に速く実行されたすが、その埌は急激に速床が䜎䞋したす。これは CPU の過熱 (スロットリング) が原因である可胜性がありたす。 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

無線LAN

Wi-Fi は動䜜したすが、Armbian では玄 1 日埌に停止し、次のメッセヌゞが衚瀺されたす。

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

再起動のみが圹立ちたす。さらに進む必芁がある 理解する.

むヌサネット

むヌサネットは動䜜したすが、玄 64 日埌、RXNUMX からのパケット (DHCP) が到着しなくなりたす。
むンタヌフェヌスを再起動するず次のこずが起こりたす:

ifdown br0; sleep 30; ifup br0

ドラむバヌは新しく、ただカヌネルに受け入れられおいないが、䞭囜のLanden Chaoであるこずを期埅しおいる。 終了したす.

出所 habr.com

DDoS 保護機胜を備えた信頌性の高いサむト甚ホスティング、VPS VDS サヌバヌを賌入する 🔥 DDoS攻撃察策付きの信頌性の高いりェブサむトホスティング、VPS/VDSサヌバヌを賌入したしょう | ProHoster