「PiKVM」にLTE対応USBドングルを挿して“モバイルできるリモートKVM”を作る
リモートKVMのモバイル化
本記事は次の記事の続編です。
前回の最後にはこんな予想を書きました。
さらに、データ通信用USBモデムがPiKVMで認識できるものであれば、インターネット環境が利用できないところでの機器の遠隔操作も可能だと思います。
そこで今回は、仕入れたLTE対応USBドングル (実は1個壊してしまったorzので2個目です) を使って、2年以上前のこの予想が実現できるかどうかを確認してみます。いわばお手軽な「モバイル回線対応のリモートKVM」を作ってみる実験です。
作ってみよう
実験に際して揃えた材料は次の通り。前回と同じく、ラズパイやUSBドングルは一般的な市販品のみ使い、PiKVMの純正ハードウェアは (出費を抑えるため) 使わずにどこまで出来るか作戦でいきます。
必要な材料 | 今回の選択 |
---|---|
Raspberry Pi 4 Model B | 4GBモデル |
MicroSDカード | 64GB |
HDMI to USBドングル; ビデオキャプチャデバイス | THANKO SHDSLRVC |
LTE対応USBドングル | PIXELA PIX-MT110 |
SIMカード (microSIM) | IIJmio タイプD |
各種ケーブル | 適当にあった物 |
PiKVMを接続する機器 (以下、接続機器) | Raspbery Pi 400 + Kali Linux |
【国内正規代理店品】Raspberry Pi4 ModelB 4GB ラズベリーパイ4 技適対応品【RS・OKdo版】
Raspberry Pi RS・OKdo
サンコー(Sanko) レアモノショップ 一眼カメラやビデオカメラをWEBカメラに!「HDMI to USB WEBカメラアダプタ」
サンコー
ピクセラ LTE対応 SIMフリー USBドングル ホワイト PIX-MT110-AZ
ピクセラ
正規代理店商品!Raspberry Pi 400 技適取得済!日本語キーボード
Raspberypi
Phase-1. LTE対応USBドングルでの通信を可能にする
- ラズパイ4にPiKVMイメージを導入して起動する
- 今回の構成に最も近い Flashing PiKVM OS image - PiKVM Handbook > Download the image > DIY PiKVM V2 Platform > Raspberry Pi 4 > For HDMI-USB dongle のイメージをダウンロードし、microSDカードに焼く
- SIM設定が完了しているLTE対応USBドングル「PIXELA PIX-MT110」をPiKVMに挿す
- LTE対応USBドングルが
ID 15a9:0046 Gemtek 4G Modem
として認識される[root@pikvm ~]# lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub Bus 001 Device 003: ID 15a9:0046 Gemtek 4G Modem Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
- ネットワークインターフェースとして
eth1
が増えている[root@pikvm ~]# ip a (途中省略) 4: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 80:02:9c:XX:XX:XX brd ff:ff:ff:ff:ff:ff
- LTE対応USBドングルが
- 上記のeth1を設定する
- PiKVMをrwモードへ切り替える
[root@pikvm ~]# rw + mount -o remount,rw / + mount -o remount,rw /boot + set +x === PiKVM is in Read-Write mode ===
- eth0用設定ファイルを元にして、Name部分のみ変更したeth1用ファイルを作成する
[root@pikvm ~]# cd /etc/systemd/network/ [root@pikvm network]# sed 's/Name=eth0/Name=eth1/' ./eth0.network > ./eth1.network [root@pikvm network]# diff ./eth0.network ./eth1.network 2c2 < Name=eth0 --- > Name=eth1
- PiKVMをroモードへ戻す
[root@pikvm network]# ro + mount -o remount,ro / + mount -o remount,ro /boot + set +x === PiKVM is in Read-Only mode ===
- PiKVMをrwモードへ切り替える
- PiKVMを再起動する
- eth1の状態を確認する→DHCPサーバであるUSBドングルからIPアドレスを取得できている
[root@pikvm ~]# ip addr show eth1 4: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000 link/ether 80:02:9c:XX:XX:XX brd ff:ff:ff:ff:ff:ff inet 192.168.0.42/24 metric 10 brd 192.168.0.255 scope global dynamic eth1 valid_lft 3175sec preferred_lft 3175sec inet6 fe80::8202:9cff:feXX:XXXX/64 scope link proto kernel_ll valid_lft forever preferred_lft forever
Phase-2. Tailscaleを導入する
Tailscaleの導入方法は、PiKVMサイトの上記ドキュメントで詳しく説明されているので、ここではその手順をそのままなぞっています。
- PiKVMのパッケージを更新する
[root@pikvm ~]# pikvm-update (再起動が実施される)
- tailscaleをインストールする
[root@pikvm ~]# rw [root@pikvm ~]# pacman -S tailscale-pikvm [root@pikvm ~]# systemctl enable --now tailscaled [root@pikvm ~]# tailscale up
- tailscaleの認証 (表示されるURLをウェブブラウザで開く) を行い、PiKVMドキュメントのお勧め通り
Disable key expiry
も行う - PiKVMを再起動する (再起動するとroモードに戻る)
- Tailscaleの動作状態を確認する
tailscale0
インターフェースを確認する[root@pikvm ~]# ip addr show tailscale0 5: tailscale0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc fq_codel state UNKNOWN group default qlen 500 link/none inet NNN.NNN.NNN.NNN/32 scope global tailscale0 valid_lft forever preferred_lft forever inet6 fd7a:115c:a1e0::a3XX:XXXX/128 scope global valid_lft forever preferred_lft forever inet6 fe80::5191:72ea:9aXX:XXXX/64 scope link stable-privacy proto kernel_ll valid_lft forever preferred_lft forever
- tailscaleコマンドでIPアドレスを確認する
[root@pikvm ~]# tailscale ip NNN.NNN.NNN.NNN fd7a:115c:a1e0::a3XX:XXXX
- PiKVMと同じtailnetに所属するマシンから、
https://NNN.NNN.NNN.NNN/
(tailscale上のPiKVMのIPアドレス) へアクセスできることを確認する
Phase-1, Phase-2 が完了すれば、PiKVM化しているラズパイへは、それにLTE対応USBドングルが挿してあるだけでインターネットからアクセスできるはずです。これにて、携帯電話の電波の圏内であればどこに置いても使える「モバイル回線対応のリモートKVM」が完成しました。
注意: パケット残量には余裕が必要
LTE対応USBドングルでは一般的に従量課金もしくは通信量に上限があるデータ通信回線を使用するはずで、PiKVMの画面転送によるパケット使用量の増加には注意しておいてください。
今回の実験において、PiKVMを1Gbps LANに有線接続し、接続機器 (Raspberry Pi 400) の1920x1080画面出力をHDMI to USBデバイスでキャプチャして別PCのブラウザでモニターした際、下記写真のように左上部に文字があって他は真っ黒な画面を表示している時に、PiKVMからは常時5〜6Mbpsのデータ送信が行われていました。仮に6Mbpsだと→45MB/min→23分で1GBを消費する計算になります。
ちなみに本実験時の画面転送はMJPEG形式です。PiKVMでは転送効率が良いH.264も選択可能なようですが、H.264 / WebRTC - PiKVM Handbook によると USB capture devices are not supported
となっています。
接続機器をPiKVM経由でインターネット通信させる
Phase-3. 「Ethernet-over-USB」機能の有効化
PiKVMのEthernet-over-USB機能を使うと、接続機器自体を有線 (LANケーブル) や無線 (Wi-Fi) でネットワーク接続していない状態でも、USB接続したPiKVMを経由してネットワーク通信させることができます。設定手順はPiKVMサイトの上記ドキュメントで詳しく説明されているので、ここではざっくりと書きます。
- PiKVMをrwモードに切り替える
- IPv4のパケット転送を有効化する
[root@pikvm kvmd]# echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/99-kvmd-extra.conf
/etc/kvmd/override.yaml
の末尾に次のブロックを追記する (forward_iface: eth1
はLTE対応USBドングルのeth1経由で通信させるという設定)otg: devices: ethernet: enabled: true driver: ecm otgnet: firewall: allow_tcp: [80, 443] forward_iface: eth1 commands: post_start_cmd_append: - "--dhcp-option=6,8.8.8.8" iface: ip_cmd: - /usr/bin/ip net: 10.65.0.0/28
- kvmd-otgnetサービスをenableする
[root@pikvm kvmd]# systemctl enable kvmd-otgnet Created symlink /etc/systemd/system/multi-user.target.wants/kvmd-otgnet.service -> /usr/lib/systemd/system/kvmd-otgnet.service.
- PiKVMを再起動する
- 次のことを確認する (今回の接続機器のOSはKali Linuxなので、Linux環境を前提とした確認方法です)
- 接続機器の
usb0
インターフェースがUP状態で、10.65.0.0/28
に該当するIPアドレスがDHCPで付与されていること - 接続機器からインターネットへの通信ができること
- PiKVMから接続機器のIPアドレスへ、SSH等のネットワークアクセスができること
- 接続機器の
まとめ・感想
ラズパイを用いて実現するリモートKVM・IP-KVMの「PiKVM」。このモバイル回線対応は、作業工数面において意外に簡単に行えると分かりました。ほぼどのような遠隔地にある機器の操作に使えるのはもちろん、ネット接続する手間が不要なシンプルさを生かして、自分が移動して操作するのはおっくうな距離にある機器にササッと接続しておいて使うのも、結構ありな気がします。
また、モバイル回線対応ということは、リモートKVMを介して操作される機器が移動しがちな形態にも対応可能なわけで、直感ですがそれっぽい面白い用途があるかもしれないと思いました。
参考リンク: PiKVMの純正ハードウェア
V4 Mini - PiKVM
PiKVM