【OpenMPTCProuter】ラズパイ4へPi-hole導入し、全ローカルマシンで広告ブロック実施とDNSサーバ設定を統一化

engetu21.hatenablog.com

以前、OpenMPTCProuterで利用しているVPSにPi-holeを導入しましたが、ネットワーク状況を示す表示が微妙な感じになったのでやめました(公式に載ってるからやってみたのにどういうことやねんと思わなくはないが)。

Pi-hole自体は使いたいので、現状ローカルネットワーク内でファイルサーバ兼VPNサーバ(前回対応済み)として動いているラズパイ4に導入します。
以下のコマンドでインストーラが起動するため、あとは以前設定した内容と同じような感じ(冒頭のリンクで記載しているので割愛)でインストールを実施。

$ curl -sSL https://install.pi-hole.net | sudo bash

 
ラズパイ4に入れ終わった後に、OpenMPTCProuterの設定も変更します。
github.com

OpenMPTCProuterでは、[ネットワーク]→[DHCPおよびDNS]→[一般設定]タブと辿っていき、
DNSフォワーディング」のデフォルト設定値の「/lan/」「/use-application-dns.net/」以外を削除したうえで、ラズパイのIPアドレスを設定します。

 
インターネットに出るまでのルーティングはちょっと回りくどくなるけど、
ローカルPC→OpenMPTCProuter(ルータサーバ)→ラズパイ4(Pi-hole)→OpenMPTCProuter→(VPS)→インターネット
という形になります。
この形の利点として、OpenMPTCProuterでDNSフォワーディングにラズパイ4を指定しておくことで、
ローカルネットワーク内のすべてのPC/スマホでのインターネットアクセスにおいて、DNS解決で必ずPi-holeを通過することになるので、広告ブロックの適用(とDNSキャッシュの利用)を行うことが可能になります。
また、各々の端末でDNSサーバの設定をわざわざ行う必要もなくなる。とても快適。

【ラズパイ3】CUIでのWiFi設定いろいろ【Raspbian】

依然調べたときに、nmtuiコマンドを利用することでWiFi設定を楽に実施することができた。それまでは、どこそこのファイルに特定のフォーマットで直接記述するなど、とても面倒なことをやっていたが、これが解消されるわけである。
nmtuiの似たようなのにnmcliがあるが、これを利用しても設定が可能。
ただし、nmtui/nmcliはNetworkManagerというネットワーク管理プログラムを利用する。
ラズパイというかRaspbianのデフォルトのネットワーク管理はdhcpcdを使っているため、これの使用を抑止したうえでNetworkManagerを使うようにする。
 
無線は切れてしまうため、有線LANをあらかじめ接続しておく。
まずはNetworkManagerをインストール。

$ sudo apt install network-manager network-manager-gnome

NetworkManagerの永続化と有効化を実行し、dhcpcdはお休みしてもらう(apt removeで消してもいいけど)。


$ sudo systemctl stop dhcpcd.service
$ sudo systemctl disable dhcpcd.service
$ sudo systemctl enable NetworkManager.service
$ sudo systemctl start NetworkManager.service

これでnmtui/nmcliが使えるようになる。

$ sudo nmtui
$ sudo nmcli con show
等(オプションの組み合わせはいろいろ)

また、「wicd-curses」というアプリを利用してもいい。
ただし、上記のdhcpcdやNetworkManagerと競合する可能性が高いため、使用するならどれか一つにしたほうがよさそう(nmtui/nmcliは根っこが同じなのでたぶん大丈夫だが)。
以下のコマンドでインストール可能。

$ sudo apt install wicd-curses

実行は以下のコマンド。

sudo wicd-curses


無線ネットワークのリストが表示されるため、接続したいネットワークを上下キーで選択し、右キーを押して詳細な設定画面を開く。
 

スペースキーを押すことで[X]が付与され、該当項目の有効化が可能。
「固定IPを使用する」はDHCPを利用するなら特に設定は不要。
「このネットワークに自動的に接続する」と「暗号化する」を選択しておき、該当する暗号化方法を選択後にキーを入力しておけば、切断されても自動再接続をしてくれる(もっともnmtuiでも同じように再接続の設定はできる)。
入力後は、画面下に表示されている「S」を入力して設定を保存し、一覧画面に戻って「C」を入力することで該当のWiFIネットワークへの接続をその場でしてくれるため、接続可否の確認することが可能。

Pi-holeへのブロックリストの追加

先日入れたPi-holeでのブロックリストの追加を行います。
実施はPi-holeを導入したVPSマシン。SSHで入り、まずはpipをインストール。

$ curl -kL https://bootstrap.pypa.io/get-pip.py | python3
$ pip -V
pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)

pihole5-list-toolを使えば手軽にリストを増やすことができるとのことなので、pipにてインストールして実行。

$ sudo pip install pihole5-list-tool --upgrade
$ sudo pihole5-list-tool


Enterを押していくと、ブロックリストの登録まで行きます。
リストが多すぎても運用に支障をきたす(意図しないものもブロックしてしまう)ので、真ん中にある一番ゆるいTicked listsを選択し、Enter。


30リストを入れるそうなので、Yesを選択し、入れてもらいます。

というわけでリストを入れる前と後で比較すると、30万ほどのブロックドメインが登録されました。
※すでに入っているドメインに関してはスキップされる仕様らしい。

・適用前

・適用後

定期的にやるといいかもしれませんね。

OpenMPTCProuter(で使っているVPS)にPi-holeをインストールして広告ブロックを施す

※2022/9/30追記※
どうもVPSにpi-holeを入れるとOpenMPTCProuterのステータスが以下のようになり、VPSが正常に認識?されなくなるらしい。

グラフによる回線使用状況を確認する限り、2回線をちゃんと利用しているようだが、管理画面がこの状態というのはなんとも気持ちが悪い。

$ pihole disable

で停止しても変化なし。

$ pihole uninstall

でpi-holeをアンインストールしても変化なしです(一応試した)。

pi-hole自体は有用なので、とりあえず様子見。(必要があれば別のサーバで運用も視野に入れたい)
→ラズパイ4に入れて運用する方向に変更しました。
engetu21.hatenablog.com
※追記終わり※


Pi-hole(パイホール)はAdBlocking、要するにサイト広告をブロックしてくれるアプリケーションとのこと。(DNSキャッシュとかもできるらしいけど)
docs.pi-hole.net
 
前回OpenMPTCProuterの対応をしたので、これを導入してみる。 
engetu21.hatenablog.com
 
OpenMPTCProuterで使っているVPSに入れることで、ネットワーク配下のクライアントすべての通信に適用されるため、スマホやWindowsPC等、個別にAdBlockアプリを入れてるのが不要になります。
元々OpenMPTCProuterとは全く関係ない代物ですが、OpenMPTCProuterをルータとして動かすと必然的にPi-holeを動かしているVPSも通過するため、自然に通信上で適用がなされる(という仕組みになるらしい)。

なお、Piと名前がついているものの、ラズパイ以外のサーバに普通に入るとのこと。
あとYoutubeの動画広告を回避は難しいらしいです。
  
GitHubにインストール方法が書いてあったため、試しにインストールしてみます。
github.com

VPSSSHでログインし、以下のコマンドを実行します。

$ wget -O - http://www.openmptcprouter.com/server/omr-pihole.sh | sudo sh

キャプチャ忘れてたので、あとからコピペしたログで…

 qqqlqqqqqqqqqqqqqqqqqqqqqqqqqStatic IP Neededqqqqqqqqqqqqqqqqqqqqqqqqqqqkqqqqq
    x                                                                    x
    x                                                                    x
    x The Pi-hole is a SERVER so it needs a STATIC IP ADDRESS to         x
    x function properly.                                                 x
    x                                                                    x
    x IMPORTANT: If you have not already done so, you must ensure that   x
    x this device has a static IP.                                       x
    x                                                                    x
    x Depending on your operating system, there are many ways to achieve x
    x this, through DHCP reservation, or by manually assigning one.      x
    x                                                                    x
    x Please continue when the static addressing has been configured.    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu
    x                   <Continue>          <  Exit  >                   x
    mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

Continueを押下
 

    lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
    x Choose An Interface (press space to toggle selection)              x
    x lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x
    x x                  (*) ens3          available                   x x
    x x                  ( ) mlvpn0        available                   x x
    x x                  ( ) gt-udp-tun0   available                   x x
    x x                  ( ) dsvpn0        available                   x x
    x x                  ( ) omr-bonding   available                   x x
    x x                  ( ) ovpnbonding3  available                   x x
    x x                  ( ) ovpnbonding1  available                   x x
    x x                  ( ) ovpnbonding4  available                   x x
    x x                  ( ) ovpnbonding5  available                   x x
    x x                  ( ) ovpnbonding6  available                   x x
    x x                  ( ) ovpnbonding2  available                   x x
    x x                  ( ) ovpnbonding7  available                   x x
    x x                  ( ) ovpnbonding8  available                   x x
    x mqqqqqqqqqqqqqqqqqqqqqqv(+)qqqqqqqqqqqqqqqqqqqqqqqqqqqqqq76%qqqqqj x
    tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu
    x                   <Select>          < Exit >                       x
    mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

NICの指定はens3のままでいいのでSelectを押下
 

    lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
    x Select Upstream DNS Provider. To use your own, select Custom.      x
    x lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x
    x x                Google (ECS, DNSSEC)                            x x
    x x                OpenDNS (ECS, DNSSEC)                           x x
    x x                Level3                                          x x
    x x                Comodo                                          x x
    x x                DNS.WATCH (DNSSEC)                              x x
    x x                Quad9 (filtered, DNSSEC)                        x x
    x x                Quad9 (unfiltered, no DNSSEC)                   x x
    x mqqqqv(+)qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq70%qqqqqj x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu
    x                   <  OK  >          < Exit >                       x
    mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

DNSは何でもいいけど、無難にGoogleあたりを選択してOK
 

 qqqlqqqqqqqqqqqqqqqqqqqqqqqqqqqqBlocklistsqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkqqqqq
    x                                                                    x
    x Pi-hole relies on third party lists in order to block ads.         x
    x                                                                    x
    x You can use the suggestion below, and/or add your own after        x
    x installation.                                                      x
    x                                                                    x
    x Select 'Yes' to include:                                           x
    x                                                                    x
    x StevenBlack's Unified Hosts List                                   x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu
    x                     < Yes >           < No  >                      x
    mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

Yesを選択
 

 qqqlqqqqqqqqqqqqqqqqqqqqqqqAdmin Web Interfaceqqqqqqqqqqqqqqqqqqqqqqqqqqkqqqqq
    x                                                                    x
    x                                                                    x
    x Do you want to install the Admin Web Interface?                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu
    x                     < Yes >           < No  >                      x
    mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

Yesを選択

 qqqlqqqqqqqqqqqqqqqqqqqqqqqqqqqqWeb Serverqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkqqqqq
    x                                                                    x
    x                                                                    x
    x A web server is required for the Admin Web Interface.              x
    x                                                                    x
    x Do you want to install lighttpd and the required PHP modules?      x
    x                                                                    x
    x NB: If you disable this, and, do not have an existing web server   x
    x and required PHP modules (sqlite3 xml intl json) installed, the    x
    x web interface will not function. Additionally the web server user  x
    x needs to be member of the "pihole" group for full functionality.   x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu
    x                     < Yes >           < No  >                      x
    mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

Yesを選択

qqqlqqqqqqqqqqqqqqqqqqqqqqqqqqEnable Loggingqqqqqqqqqqqqqqqqqqqqqqqqqqqqkqqqqq
    x                                                                    x
    x                                                                    x
    x Would you like to enable query logging?                            x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu
    x                     < Yes >           < No  >                      x
    mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

Yesを選択
 

    lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
    x Select a privacy mode for FTL.                                     x
    x https://docs.pi-hole.net/ftldns/privacylevels/                     x
    x lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x
    x x                (*) 0  Show everything                          x x
    x x                ( ) 1  Hide domains                             x x
    x x                ( ) 2  Hide domains and clients                 x x
    x x                ( ) 3  Anonymous mode                           x x
    x x                                                                x x
    x x                                                                x x
    x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu
    x                   <Continue>          <  Exit  >                   x
    mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

設定を変えずにContinueを選択
 

    lqqqqqqqqqqqqqqqqqqqqqqInstallation Complete!qqqqqqqqqqqqqqqqqqqqqqqqk
    x Configure your devices to use the Pi-hole as their DNS server      x
    x using:                                                             x
    x                                                                    x
    x IPv4: XXX.XXX.XXX.XXX                                               x
    x IPv6: Not Configured                                               x
    x If you have not done so already, the above IP should be set to     x
    x static.                                                            x
    x View the web interface at http://pi.hole/admin or                  x
    x http://XXX.XXX.XXX.XXX/admin                                        x
    x                                                                    x
    x Your Admin Webpage login password is XXXXXXXXXXXX                     x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    x                                                                    x
    tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu
    x                             <  OK  >                               x
    mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

OKを押下
 
 
インストールが完了後、OpenMPTCProuterに接続されている作業用PCから以下のアドレスにアクセスします。
下記URLは外部の別PCからはもちろん、VPSIPアドレスを指定したhttp通信もダメだったので、必ずOpenMPTCProuterの配下PCで以下のURLでなければいけないようです。(そこら辺を把握してなくて時間かかった)

http://pi.hole/admin

ログインが完了すると以下のような画面になります。
現状はBlockリスト等は何も弄ってないため、それはまた後日やります。
ボチボチ弾いてはいる模様。

 
Pi-hole適用前

Pi-hole適用後

  
なお、初期パスワードは覚えづらいので、VPSSSHで入って以下のコマンドで変更可能です。

$ pihole -a -p
Enter New Password (Blank for no password):
Confirm Password:
[?] New password set

 
ブロックリストの追加については以下に記事起こしました。
engetu21.hatenablog.com

【ルータ自作】LIVA ZにOpenMPTCProuterをセットアップし、回線を束ねて高速化できるかを試す

※この記事はボチボチ進めながらメモっぽくまとめていくので随時更新します。もしかしたら途中で詰まって断念するかもしれない
→一応完了。


■参考サイト
貧弱なインターネット回線をたくさん束ねて強くできる「OpenMPTCProuter」レビュー - GIGAZINE
OpenMPTCProuterで複数インターネット回線を集約して接続帯域を増加する - Qiita
OpenMPTCProuter でネット接続をタバタバして(束ねて)みる|Takumin

1.長い前置き

住んでいるアパートが数か月前から無料でアパートWiFi(BUFFALOのサービスらしい)なるものを提供し始め、毎月6000円払ってるSoftbank光も契約更新時期なので、解約してそちらを利用しようかと思ってます。
 
で、回線速度的には大本は1Gbpsで、比較的空いてるときは上下ともに40Mぐらいは出るよう(ping値も7msぐらいでなかなか)なので、それでもまぁそこそこいいんですが、2.4/5GHz帯のアクセスポイントが複数用意されており、これはもしや複数のネットワーク回線を束ねて高速化って奴ができるのではないか…?ということで挑戦しようと思った次第。(前回USB無線LANドングルを買ったのはこれが理由)
いずれにせよ、各端末でアパートWiFiを掴んでしまうとローカルネットワーク間の通信がままならなくなり、そうするとまたルータを自作してNAT設定によってWAN接続の一本化(この場合はアパートWiFiに対して)を行う必要は出てくる。
 
ボンディング(チーミング)がそれに当たるかなということで、この技術はここにきて初めて学びましたが、この間調べた「nmtui」コマンドで設定することが可能な模様。ただこのコマンドだと無線インタフェースの選択はできないようだし、そもそもここで設定できるボンディングは負荷分散や冗長化といったロードバランサとしての意味合いが強い。
 
やりたいことは複数回線を束ねた高速化なわけで、そういえばと、過去にGIGAZINEで取り上げたSwitchboardというものがあったのは記憶にあり、これが使えないかと考えました。
gigazine.net
 
どうやら回線の統括役となるVPNサーバを設ける仕組みなようで、これ自体はサービスとしては終了。代わりに現在はSpeedifyという名前でクラウドVPNサービスとして提供されているらしい。これがなかなか月額料金を取るようで、いやOSSがあるのではと思い、検索で探し出したのが「OpenMPTCProuter」です。
gigazine.net
今回は、LIVA ZにOpenMPTCProuterを入れ、かつ仕組み的にVPSも必要になるため、そちらも用意して実現していきたい。
 

1.1 MPTCPについて

OpenMPTCProuterを利用する場合の装置構成としては以下のようになる。

出典:OpenMPTCProuter公式サイト(https://www.openmptcprouter.com/)

そもそもMPTCP(Multi-Path TCP)という概念が物珍しいわけですが、要はWAN環境にてネットワークが障害が発生した場合でも他のネットワークを利用できるように設定しておくことで、継続でインターネットを利用できるという手法です。OpenMPTCProuterはそれを実現できるOSSというわけですが、OpenMPTCProuter自体はどちらかというと可用性よりは速度向上を目的にしています。しかし、複数回線を束ねれば足し算的に速度向上が見込めるかというとそうではなく、OpenMPTCProuterを入れるルータサーバとVPSもそれなりのスペックがない限りはボトルネックになりえます。後述する速度比較結果を見る限りは、可用性と速度はトレードオフの関係にあるようです。MPTCPの理屈の上では最近話題のStarlink(衛星を利用したインターネット環境)も組み込めるはずなので、インターネット回線にジャブジャブお金使える人、かつインターネットとの接続が断たれることは一秒たりともまかりならんという人にとっては理想とも言える構成が組めます。
MPTCPについて詳しく書いてあるところは少ないですが、以下が参考になると思います。
https://www.s-lab.nd.chiba-u.jp/B3/MCTCP.html#:~:text=%E3%83%9E%E3%83%AB%E3%83%81%E3%83%91%E3%82%B9TCP(MPTCP)%E3%81%AF,%E5%AE%89%E5%AE%9A%E3%81%95%E3%81%9B%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82

2.OpenMPTCProuterのイメージファイル取得とインストール

イメージディスクは以下のサイトから取得。
www.openmptcprouter.com
LIVA Zは64bit機なので、x86-64 (64-bits)欄のext4 image (EFI)のものをDLする。具体的には以下のイメージファイル。
openmptcprouter-v0.59.1-5.4-r0+16594-ce92de8c8c-x86-64-generic-ext4-combined-efi.img.gz

これを解凍ソフトで解凍し、rufus等でUSBメモリなりSDカードに書き込みます。
ただ、用意されているイメージディスクはインストーラが入っているわけではないので、DDコマンドでLIVA Zのディスクにコピーしないといけない。
(と、推測でやったけど、一応公式に書いてあった。
Router install · Ysurac/openmptcprouter Wiki · GitHub

というわけで、適当なLinuxディストリビューションのLIVE版を用意し、LIVA Zを一旦そのLIVE版で起動したうえで、DDコマンドを実行する必要があります。
つまり用意するものとしては、
Ubuntu等のLinuxのLIVE版が焼かれたUSBメモリまたはSDカード
②OpenMPTCProuterが焼かれたUSBメモリまたはSDカード
の2つ。

LIVA Zを①で起動し、

$ fdisk -l

のコマンドを叩いて、②で用意したデバイス名とLIVA Zのドライブのデバイス名を調べ、DDコマンドを実行する。ifが②のデバイス名、ofがLIVA Zのドライブのデバイス名。

$ sudo dd if=/dev/sfc of=/dev/mmcblk0 bs=16M

OpenMPTCProuter自体は600MB未満なので、コピーにそこまで時間はかかりません。
コピー完了後、一旦シャットダウンをして①、②を取り外し、再度起動してコンソールにズラズラとOS起動画面が出てきたら成功。
※追記
 DDコマンドを使ったけど、LIVE版Linuxに入っているディスクアプリケーションにて、イメージファイルを選択して書き込みができるようなので、そちらのやり方でもできるかも。
  
作業用PCとLIVA ZをLANケーブルで直接繋ぎ、作業用PC側のブラウザから「192.168.100.1」にアクセスすることでOpenMPTCProuterの管理画面に入ることが可能。(作業用PC側のIP設定は不要。OpenMPTCProuterのDHCP機能で自動的に割り振られる)

なお、最初はrootユーザにパスワードは設定されていない。ので、ブラウザの管理画面もそうだけど、LIVA Zのコンソールでもrootユーザでパスワードなしで入ることができます。

パスワードの変更は以下の順序で辿っていき、変更を行います。
[システム]→[管理]→[ルーターパスワード]タブ

3.VPSの設定

VPSを用意します。
以前はConohaVPSを使ってましたが、今回はさくらのVPS
OpenMPTCProuterではVPS用のシェルスクリプトが用意されていますが、Ubuntu用は20.04までなので、VPSのOSもUbuntu20.04でインストール。

GIGAGINEのインストール方法ではVPSのポート全開放という気でも触れたのかということを行ってましたが、どうやらここに書いてあるポートに合わせて自動的にiptablesが設定されるので問題なしということなんでしょう。たぶん。
なので、VPSのコンソールであらかじめ全ポート開放をしておきます。

シェルスクリプトは以下の手順に書いてある通りコマンドを実行します。
github.com

$ wget -O - https://www.openmptcprouter.com/server/ubuntu20.04-x86_64.sh | sudo sh
GitHubだと最後はshだけど、管理者権限でやったほうが都合がいいのでsudoで実行

/!\ You need to reboot to enable MPTCP, shadowsocks, glorytun and shorewall /!\
と出るので再起動します。
このメッセージの前段で、OpenMPTCProuterからのアクセス用の情報(暗号鍵情報等)が表示されています。
また、以下のファイルにも同様の情報が入っているため、メモし忘れた場合などはローカルにダウンロードしていつでも見られるようにしておきます。

$ sudo view /root/openmptcprouter_config.txt

$ sudo shutdown -r now

再起動後、SSHのポート番号が「65222」に変わります。(正確には再起動前から変わっているが、sshdを再起動するか、サーバそのものを再起動しない限りは影響はでない)
また、iptablesも「65222」でACCEPTが設定されます。というより、iptablesはかなり弄られるし、カーネルも変わるため、兼用ではなく専用VPSとして設けておいたほうがよさそうです。
変更となるポートは先に紹介したgithubで記載されています。

SSHクライアントでポート65222アクセスし、カーネルが変更されていればOK。

$ uname -a
Linux os3-320-49727 5.4.207-mptcp #1 SMP Sun Jul 24 14:39:44 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

VPS上でのファイアウォール設定はShoreline Firewall (Shorewall)を使ってるようなので、
以下のファイルで設定変更が可能な模様(おそらく)。

$ sudo vi /etc/shorewall/rules

※追記
Shoreline Firewall (Shorewall)を使ってるのはそうですが、直接VPSでShorewallの設定を変更するわけではないようです。実際の動作としては、OpenMPTCProuterの管理画面で設定したファイアウォール設定に基づいて、VPS側のShorewallの設定内容(/etc/shorewall/rules)が自動的に変更されるようです。
なので、基本的にOpenMPTCProuterではVPSで何かを変更するということはない模様。

4.OpenMPTCProuterの設定

LIVA Zの内蔵無線LANを使用するため、OpenMPTCProuterの管理画面に戻り、設定を行います。
(と言っても、ココらへんの設定はメモも取らずになんとなくで行ったので、ちょっと曖昧)
まずデバイスが認識されてそうでなければ、以下の順序でデバイスとして認識させます。
[ネットワーク]→[インターフェース]→[デバイス]タブに移動。
一番下にある[デバイス設定を追加]を押下。
存在するデバイスで無線デバイスがあるはずなので、それを選択します。LIVA Zの場合は、「wlan0」になるはずです。

[ネットワーク]→[無線]から無線デバイス一覧が表示されるため、該当の無線デバイスで[編集]を押下、ESSID欄にてSSIDを設定をします。
ネットワークに「wwan」を設定することでWAN側のデバイスとして設定ができます。
また、パスワードは隣のタブにある[セキュリティ]から設定します。

 
無線LANの設定が終われば、作業用PCからLIVA Z(OpenMPTCProuter)を経由してインターネット接続ができるようになっているはずです。
安全な確認くんは以下のような感じ。

 
で、ここからさらに肝心のVPS接続をします。予め作ったVPSの情報を設定します。
[システム]→[OpenMPTCProuter]→[Setting Wizard]タブに移動し、
ServerIPはさくらVPSのホスト名を指定。(IPアドレスでもいい)
Server usernameはopenmptcprouter_config.txtの「openmptcprouter」の値を設定。ただし、これはデフォルトで設定されているはず。
ServerKeyはopenmptcprouter_config.txtの「Your OpenMPTCProuter Server key」の値を設定。


画面下方にあるInterfaces settingでデフォルトで入っている「wan1」[wan2]は使用しないので削除します。

また、WAN側となる「wwan」にてMultipath TCPをマスターに変更します。


保存することで[ステータス]タブに移動します。
下記のようになっていればOK。
上から順に作業用PCに使ったJetson nano、LIVA Z、VPSとなっています。また、右横にWAN回線として「wwan」が表示されます。

安全な確認くんで確認すると、VPS経由で接続できていることが確認できます。

 

5.2回線目を登録する

先に結論から言うと、USB無線LANトングルでの計測はできませんでした。
まずドライバが無いという点は想定内なのはいいとして、ドライバのインストールができない。
engetu21.hatenablog.com
上記で実施したのはUbuntuですが、OpenMPTCProuterはパッケージ・ソフトウェアがaptではなく、opkgというものを利用しています。
make,gccはインストールすることができるものの、いざmakeを実行しても「/lib/modules/5.4.194/build: No such file or directory.」と言われて止まります。この解消方法は、build-essential、linux-headersをインストールするというのは検索でわかるものの、それをopkgで実現する方法が不明。
また、国内はほぼ情報がないので海外の掲示板を漁るものの、有効な手段は見つけられず。なんなら「Realtekは新しいドライバをひっきりなしに作るからサポートされているのは稀」みたいなことが書かれている始末。OpenMPTCProuterはOpenwrtをベースにしているため、どちらかというとOpenwrtをメインに調査しましたが、有効な手段はなく。
要するに詰んだの諦めました。
※追記(2022/10/13)
どうやら、ベースとなっているOpenWrtで用意されているOpenWrt SDKというのを使って、OpenWrt用のドライバとしてクロスコンパイル(別のLinuxPCなどでコンパイル)をする必要がある模様。クロスコンパイルする理由はOpenWrtを入れるルータ機器は基本的にコンパイルに耐えられるほどのメモリを具備していないからとのこと。しかし、挑戦はしているものの、SDK同梱のgccが動作せずにHelloworldすら作れないので、まだまだ道は長そう。
※追記終わり
 
さて、別の手段として考えたのが、スマホのUSBテザリング機能を使ってWiFiを間接的に掴むことです。
無論802.11のどこまでをサポートしているかはスマホの年代にも依存しますが、一旦仮接続としてOUKITELのスマホを接続して確認。これはac(WiFi 5)まで対応しているため、非常に高速で利用することが可能。
 
まずは、WiFi接続されたスマホをOpenMPTCProuterを入れているLIVA ZとUSBケーブルで接続し、スマホの設定で「USBテザリング」をONにします。
次に以下の手順でOpenMPTCProuterに認識をさせます。
[ネットワーク]→[インターフェース]→[デバイス]から[デバイス設定を追加]を押下。
バイスの選択にて「usb0(wan1)」を選択。

保存&適用し、続いて[システム]→[OpenMPTCProuter]へ。
画面下部から「usb0」を選択し、インターフェースとして追加。

「Multipath TCP」を「有効」にして適用。


[システム]→[OpenMPTCProuter]→[ステータス]
で回線が2つになってることが確認できます。
ちなみに、OpenMPTCProuterのIPアドレスとアドレス帯域は変更してます。

 

6.実測

パターンごとに図ってみました。時刻としてはほとんどの人が使っていない深夜帯。
USB接続スマホSoftbank光(802.11ac)、LIVA Zの内蔵WiFiがアパートWiFiに接続されています。
以下に記載しているMasterは主回線として指定している回線。有効(enable)はMasterほど優先度高くないけど、有効にされている回線です。
なお、設定にはbackupのように、主回線に問題が合ったときの冗長化用の設定もあります。

6.1 アパートWiFiのみ


6.2 Softbank光(802.11ac経由)のみ


6.3 Softbank光(Master) + アパートWiFi(有効(enable))


6.4 アパートWiFi(Master) + Softbank光(有効(enable))

遅い方の回線をMasterに設定すると速い方の回線は補助に回るためか、速い方をMasterにした場合と速度に違いが出てるようには見えます。また、2回線利用することで10Mbpsがアップしているようには見えますが、計測は諸々の影響でどうしても誤差は発生するため、劇的には速度アップはしていないようには見えます。
ただまぁ、単体の回線速度が高いというのもあるので、これが回線混んでいる場合にこの機能がどうなるかは気になるところ。
 
なお、OpenMPTCProuterにはByPass機能があるため([サービス]→[OMR-Bypass])、こちらを利用すると、VPS経由ではなくなります。(当然2回線利用ではなくなりますが)
例えば、速度測定に使ったUSENドメインを登録し、Softbank光で確認すると以下の通り。

これと比較するとVPSボトルネックとなって通信速度とping速度が落ちているということがわかります。
VPSを経由すると100Mbpsが限界値なようにも見えます。なお使ってるのはCPU:2core、メモリ:1GBです。
公式Githubではラズパイ3(4コア1.2Ghz、1GB)で150Mbpsぐらいが限度だとの発言(FAQ · Ysurac/openmptcprouter Wiki · GitHub)があったので、このVPSスペックだとこれが限界ということでしょう。(ラズパイ3のNIC的には100Mbpsが上限だが、USB接続等で他の回線を組み合わせてもCPU的には150Mbpsで頭打ちだよ、と解釈している)
またping速度の落ちは非常に高いため、ゲームサーバなどと繋げる場合はBypassで設定しておいたほうが無難そう。
 
まぁ繋げる回線によっては恩賜を受けられるでしょうし、何よりルータOSとして作られたベースとなっているOpenwrtがいい出来なのか、GUIでの設定というのがとても操作しやすいので、それだけでもUbuntuで人力ルータ作成よりは楽。
ただ、ルータ向けOSだからかパッケージは軽量なopkgで管理ということで、正直aptでできることがそのままできるわけではないということで戸惑う部分は多い。まぁopkgもコマンド打たずにブラウザ上の操作でインストールできたりするけども。
まぁ今回のチャレンジでかなり知識と経験が得られたからよかったかな。

【Jetson Nano 2GB】Dockerコンテナの導入とカメラモジュールが認識されなかった話

実家に帰っても暇なので、Jetson Nano 2GBとモバイルモニターを持ってってセッティングの続きを実施。
Jetson Nano 2GBで物体認識や物体検出を行うにはDockerを入れるのが手っ取り早いらしい。

以下のページを参考に実施してみる。
arkouji.cocolog-nifty.com

1.Dockerの導入

github.com

上記のGitHubからコンテナを導入する。
どうやらJetPack-L4Tのバージョンは記載しているものに合っていないといけないらしい。
JetPack-L4Tってなんぞや?っと思って調べてみると、L4Tは「JetPack SDK includes the Jetson Linux Driver Package」のこと?らしい。
では、自分が入れているバージョンはどれなのか、というのは、以下の2つのコマンドでそれぞれ確認可能。

cat /etc/nv_tegra_release
# R32 (release), REVISION: 6.1, GCID: 27863751, BOARD: t210ref, EABI: aarch64, DATE: Mon Jul 26 19:20:30 UTC 2021

$ dpkg-query --show nvidia-l4t-core
nvidia-l4t-core 32.6.1-20210726122000

1つ目は、R32とREVISION: 6.1で「L4T R32 6.1」と判断できる。
2つ目は、32.6.1と出てくれるので、そのまま読み取れる。

GitHubに記載されているContainerTagはr32.6.1とあるが、該当するL4T versionはL4T R32 6.0とある。
先程のコマンドで使用しているバージョンはR32.6.1と出たが、これは問題なく動くのだろうか・・・?
まぁとりあえず、説明に沿って実行してみます。

$ git clone --recursive https://github.com/dusty-nv/jetson-inference
$ cd jetson-inference
$ docker/run.sh


※先に取り上げたL4Tのバージョンについては、上記GitHubで取得したjetson-inferenceのtool配下に、l4t-version.shを叩くことでも確認が可能。
$ ~/jetson-inference/tools/l4t-version.sh
reading L4T version from /etc/nv_tegra_release
L4T BSP Version: L4T R32.6.1


docker/run.shを実行すると以下の画面が出てきます。
f:id:engetu21:20211231232208p:plain

好みの?モデルを選択することができます。
選択後に自動でダウンロードされるため、あとは待つだけ。
f:id:engetu21:20211231233214p:plain

モデルインストール後に以下のようにメッセージが出るため、他のモデルもインストールしたいな、というときにはこの通りにするといいらしい。

[jetson-inference] to run this tool again, use the following commands:

$ cd /tools
$ ./download-models.sh

あとはカメラモジュールでテストすればいいのですが・・・

2.カメラモジュール(OV5647)が認識しない

ラズパイで認識されたので、てっきりJetson Nano 2GBも認識すると思いましたが、
どうやらOV5647と呼ばれるカメラモジュール(Raspberry Pi Camera Rev 1.3)は認識されないようです。
does Jetson Nano support CSI camera with sensor ov5647? - Jetson Nano - NVIDIA Developer Forums

どうやらEOLとのことで正式にはサポートしていない模様。
一応ドライバインストールを自力で実施する方法はいかに記載されてますが・・・これを頑張るくらいであれば、素直にUSBカメラをつけたほうが良さそう。
自宅だったらUSBカメラがあるのでリアルタイムでのカメラ確認ができるけど、あいにくと実家なのが悔やまれる。
Omnivision Linux Drivers | OmniVision OV5647 Linux Driver for Jetson Nano | RidgeRun

とりあえず、サンプル動画で色々試してみることとし、カメラによるリアルタイム分析を利用するのはまた今度。

【Ubuntu20.04】ConoHa VPSでSSHポートフォワーディング(リモートフォワード)を実現

1.前置き

MCPCのIoTシステム技術検定中級の受験も終わり(追記:無事受かりました)、前からやろうと思っていた、Alexa(Echo Flex)による自宅照明の操作を実現したくなったので、今回はその準備を行うことにしました。
 
Alexaから自宅照明をつけるには、まず自宅サーバを作る必要がある。サーバで用意しておいたAPIの受信をトリガにして、赤外線モジュールを利用するようにすればいい。
そこらへんは昔人感センサで作った時にもまとめたので、それの通りにやれば問題ない。
engetu21.hatenablog.com
 
で、Alexaの方は自作スキルをPythonで作成し(これは今度まとめる)、その自作スキルから用意した自宅サーバAPIにHTTPを飛ばすようにしてあげればいい、となります。
→まとめました。
engetu21.hatenablog.com

 
で、自宅サーバの公開方法をあれこれと考え、結局採用しようと思ったのがVPSを経由したSSHポートフォワーディング(リモートフォワード)による接続。
今思うと、直接自宅サーバ公開したほうが手間なかったのでは?と思わなくないけど、ルータの設定が不要になるといった部分のメリットはある。
【追記】でも後述のようにVPSへのIPTABLES設定とかautosshとかが必要なので、手間はやっぱりかかった。

手軽にローカルサーバを簡単に展開するの手段として、ngrok(エングロック)がいいというのは調査して見つけたけど、どうも有料で利用しないとドメインころころ変わるみたいだし、だったらVPS借りてSSHポートフォワーディングできるようにしつつ、他の用途にも使えるようにした方がいいわ、となりました。
Alexaからのアクセス元IPアドレスが分かれば、それで接続元を絞り込むつもりだけど、そこは今後の調整。→どうやらIPアドレスはコロコロ変わるようなので、接続元を絞ることは不可能な模様。
 
SSHポートフォワーディングのイメージは以下の通り。

暫定の形として、インターネットに接続できるブラウザからConoHa VPSで提供されているホストかIPアドレス+ポート番号50001にアクセスする。
ConoHa VPSとラズパイ3は事前にSSHポートフォワーディングによるSSHトンネルができており、アクセスされた通信がラズパイ3のポート8080に転送される仕組み。
Alexaの自作スキルの準備が整えば、このブラウザ部分がEcho Flex(より正確にはその先のAlexaのサーバ)になる。
 
肝となるのは、ConoHa VPSとラズパイ3で事前にSSHトンネルを作っておくというところで、これはConoHa VPSSSHサーバが入っている前提であり、かつファイアーウォール設定などを設けておく必要がある。というわけで設定内容を以下に記載。

2.ConoHa VPSでの設定

2.1 SSHサーバの設定変更

$ sudo vi /etc/ssh/sshd_config
#GatewayPorts no

GatewayPorts yes

PasswordAuthentication yes

PasswordAuthentication no

【追記:どうも時間が経つとSSHトンネリングが切れるので、以下の設定を追加しておく】
#ClientAliveInterval 0

ClientAliveInterval 120

#ClientAliveCountMax 3

ClientAliveCountMax 3

GatewayPortsは今回の対応でyesにするのが必須です。いくつかのサイトを参考にしましたが、これをちゃんと書いてるところが少なく、繋がらない原因がわからず時間がかかりました。バインド設定の変更(要するに転送を許可)するかどうか、の設定らしい。
パスワードの認証は不要とします。そもそも公開鍵認証で接続するため、わざわざパスフレーズを入れなくていい。

2.2 ポートの開放

ConoHa VPSでは、ポータルでいくつかのポート設定ができますが、今回の対応にてこれは使用しないように(全て許可に変更)します。
また、OSはUbuntu20.04を使用しているため、マシン側でIPTABLESを使ってIPパケットフィルタリングによる通信制御をします。
 
まずはIPTABLESの設定を永続化(再起動しても同一の設定を受け継ぎ)するように、iptables-persistentをインストールします。

$ sudo apt install iptables-persistent

 
インストール後、IPTABLESを構築するシェルスクリプトを作ります。
IPTABLESコマンドを逐次叩いてもいいけど、シェルスクリプトを作って一気に構築できるようにしておいた方がいいです。
昔からシェルスクリプトで作ってたので今回もそうしてますが、Pythonで作っても問題ない。

$ sudo vi iptables.sh
#! /bin/bash
echo "### iptables_sh起動 ###"

# $IPTABLESパス
IPTABLES='/sbin/iptables'

#自宅のIPアドレス or あるんだったらドメイン
zitaku='hogehoge.com'

# 最初にすべてのルールをクリア
$IPTABLES -F # テーブル初期化
$IPTABLES -Z # チェーンを削除
$IPTABLES -X # パケットカウンタ・バイトカウンタをクリア
$IPTABLES -t nat -F #natテーブルを指定と初期化

# 内部から外に接続した通信に対する、外部からの応答アクセスを許可 #
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# 自宅からの22番ポート(SSH)へのアクセスを許可 #
$IPTABLES -A INPUT -p tcp --dport 22 -s $zitaku -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --sport 22 -d $zitaku -j ACCEPT

# 外部から50001番ポート接続許可 #
$IPTABLES -A INPUT -p tcp --dport 50001 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --sport 50001 -j ACCEPT

# 設定ルール外のINPUT/FORWARDアクセスはログを記録して破棄。OUTPUTは基本的に許可 #
$IPTABLES -A INPUT -j LOG --log-prefix '[iptables INPUT DROP] '
$IPTABLES -A INPUT -j DROP
$IPTABLES -A FORWARD -j LOG --log-prefix '[iptables FORWARD DROP] '
$IPTABLES -A FORWARD -j DROP
#$IPTABLES -A OUTPUT -j LOG --log-prefix '[iptables OUTPUT DROP] '
$IPTABLES -A OUTPUT -j ACCEPT

# 設定の反映 #
sudo /sbin/iptables-save

# 設定の永続化 #
sudo /etc/init.d/netfilter-persistent save

echo "### すべての設定完了 ###"

 
作成後、パーミッションを変更し、実行

$ chmod 755 iptahles.sh
$ sudo ./iptahles.sh

設定の反映を確認

$ sudo iptables -nL

 
マシン側でパケットフィルタリングをしたため、ConoHa VPSの設定をポータルで変更します。
接続許可ポートを「全て許可」に変更。

 

3.ラズパイ3での設定

設定というか以下のSSHコマンドを打ちます。

$ sudo ssh -l hoge xxxxxxxxxxx.budb.static.cnode.io -p 22 -i conoha_ssh_key.pem -R 50001:127.0.0.1:8080 -T -N

それぞれのオプションについては以下の通りです。

-l hoge:ConoHa VPSに接続するSSHのユーザ名
xxxxxxxxxxx.budb.static.cnode.io:ConoHa VPSのドメイン名。IPアドレスは固定らしいので、そちらを指定してもいい
-p 22:ConoHa VPSに接続するSSHのポート番号
-i conoha_ssh_key.pem:ConoHa VPSに接続するSSHの公開鍵(VPSを作る際に作ったものを指定)
-T:仮想端末の割り当てを禁止
-N:リモートコマンドを無効 (-T -NがないとConoHa VPSにSSHログインする感じになるので、これを抑止)
-R 50001:localhost:8080:リモートフォワードの設定。ConoHa VPSでポート50001に来たものをlocalhost(自分)の8080ポートに転送する設定。

このコマンドによって、常にSSHトンネルがラズパイ3とConoHa VPS間で構築されていることになります。
動かしっぱなしにする場合は、screenを利用したり、Pythonプログラムでコマンドを実行するように作り、Pythonプログラムは自動起動にしておく必要があります。
 
 
【2022/07/05追記】

4.autosshとsystemdによる自動化

どうやら常時接続するためにautosshなるものがあるらしい。なんて便利な。
ただ、autosshを利用していても、そのプロセスそのものがお亡くなりになってしまうこともあるよう(指定した回数分再接続に失敗したりするとautosshは停止するらしい)で、autosshをsystemdで管理することで完全に自動にすることができる模様。
参考:autosshをサービス化してSSH接続を強化 - RemoteRoom

とりあえず、以下の順で準備していきます。

4.1 autosshのインストール

$ sudo apt update
$ sudo apt install autossh

4.2 systemdへの登録

以下のGitHubにあるソースを使います。
Systemd service for autossh · GitHub
 
以下のコマンドを打って、ファイルを取得すると共にファイルの格納も行います。
Githubでは「sudo tee /etc/default/autossh@example」となっていますが、ここは
「sudo tee /etc/default/host1」に変更して実行。

curl -sSL https://gist.githubusercontent.com/ttimasdf/ef739670ac5d627981c5695adf4c8f98/raw/autossh@host1 | \
sudo tee /etc/default/autossh@host1
curl -sSL https://gist.githubusercontent.com/ttimasdf/ef739670ac5d627981c5695adf4c8f98/raw/autossh@.service | \
sudo tee /etc/systemd/system/autossh@.service

/etc/systemd/system/autossh@.service
については、内容を変更する必要はなし。
 
/etc/default/autossh@host1については、以下のように中身を変更する。

$ sudo vi /etc/default/autossh@host1
 
以下の設定値を自分の環境に応じて変更。
TARGET_HOST=host1
FORWARDS=-R 50001:127.0.0.1:8080

 
※TARGET_HOSTは後述するsshのconfigファイルに設定するホスト名を指定します。
また、ポートフォワードは-L(と-g?)でもできるらしい?ですが、これはまぁ実施する(サーバの)場所によって異なるようなので、今回の場合は-Rに書き換えます。
詳しくはこちら。
混乱しがちな「SSHトンネルの確立方法」をイメージ図とセットでまとめたコマンド集 - GIGAZINE

 

4.3 SSHポートフォワーディング用のユーザを作成

GitHubの手順に則って以下のように実行します。

$ sudo useradd -g nogroup -s /bin/false -m tunnel
$ sudo -u tunnel mkdir -p ~tunnel/.ssh

 

4.4 ssh-cofigファイルの作成

最近のSSHでは、configファイルを作って、その中に接続先などを記載して楽できるらしい。autosshを実行するためにも必要なので作成します。

$ sudo -u tunnel vi ~tunnel/.ssh/config

Host host1
    HostName xxxxxxxxxxx.budb.static.cnode.io
    User hoge 
    Port 22
    IdentityFile ~tunnel/.ssh/conoha_ssh_key.pem

※Host行で設定した名称(ここではhost1)がsshコマンドの際に指定するホスト名になります。
※IdentityFile で秘密鍵ファイルを指定

秘密鍵については、権限を600にしておかないとパーミッションエラーになるので注意。

$ sudo chmod 600 ~tunnel/.ssh/conoha_ssh_key.pem

 

4.5 あらかじめsshログインを行う

known_hostsファイルが作られていないといけないので、手動で初回SSH公開鍵認証を行います。ちゃんと接続できるかの確認も含め、いずれにせよ実施は必須。

$ sudo -u tunnel ssh host1

※yesかnoを聞かれるのでyes

 

4.6 systemdにてautossh実行

/etc/default/autossh@host1
の名称でファイルを作ったため、今回は以下のように実行します。
startで実行。enableで永続化です。

$sudo systemctl enable autossh@host1.service
$sudo systemctl start autossh@host1.service

● autossh@host1.service - Keeps an ssh tunnel to host1 open
Loaded: loaded (/etc/systemd/system/autossh@.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-07-05 23:59:28 JST; 10min ago
Main PID: 9721 (autossh)
Tasks: 2 (limit: 2059)
CGroup: /system.slice/system-autossh.slice/autossh@host1.service
tq9721 /usr/lib/autossh/autossh -NT -o ExitOnForwardFailure=yes -o ServerAliveInterval=10 -o ServerAliveCountMax=3 host1 -R 50001:127.0.0.1:8080
mq9724 /usr/bin/ssh -NT -o ExitOnForwardFailure=yes -o ServerAliveInterval=10 -o ServerAliveCountMax=3 -R 50001:127.0.0.1:8080 host1

7月 05 23:59:28 raspberrypi systemd[1]: Started Keeps an ssh tunnel to host1 open.
7月 05 23:59:28 raspberrypi autossh[9721]: port set to 0, monitoring disabled
7月 05 23:59:28 raspberrypi autossh[9721]: starting ssh (count 1)
7月 05 23:59:28 raspberrypi autossh[9721]: ssh child pid is 9724