テクノロイド

コンピュータやゲーム他、色々日々思ったことをつづっていきます。

BluetoothでIP通信

2024-09-02 14:49:26 | Ubuntu Linux
ラズパイ同士で1対1で無線通信したい。
慣れてるWiFiだとすぐにできそうだけど、ちょくちょくセキュリティホールが見つかったりと不安なので、Bluetooth(以下BT)をWiFi代わりにしたい。いやBTの情報に疎いだけかもしれんが。
以前もbluetoothでネットワークしたいと挑戦したんだけどイマイチうまくいかないままだったが、以前「ラズベリーパイのはじめ方2022」に「ラズパイをBluetooth経由で操作できるようにしよう」(P118)という記事があって購入してたのでできるかな。

とりあえず、ラズパイじゃなくて普段使いのUbuntuPCで試す。
以下、Spc:サーバPC(Ubuntu20.04), Cpc:クライアントPC(Ubuntu22.04)

ネットの記事だと、ここが参考になるかな。
Spc$ sudo apt install bridge-utils #python-dbusは入ってた。

そしてbt-panをダウンロードしようとしたら無くなってるではないか。途方に暮れるところだったが、こちらの方がpython3版を公開してくれていたので助かった。
このページにbt-panを使わずにやるやり方が書かれてあったが、クライントとしての使い方だったし、PCのBluetoothがBT-PAN(NAP)に対応してるかわからないので、まずはbt-panで通信可能か確認しなくては。
ちなみにbt-pan使わない場合は、こちらが参考になるかもしれない。(未確認)
Spc$ wget(略)bt-pan
Spc$ chmod +x bt-pan

Bluetoothをオン(=Soft blocked: no)に。
Spc$ rfkill list
0: hci0: Bluetooth
	Soft blocked: yes
	Hard blocked: no
Spc$ sudo rfkill unblock 0

クライアントPC側も
Cpc$ rfkill list
0: hci0: Bluetooth
	Soft blocked: yes
	Hard blocked: no
Cpc$ sudo rfkill unblock 0

BTのペアリングでスキャンしても見つからないので困ってたらここにたどり着いて、discoverableコマンド発見したのでクライアント側を検索できるようにした。
Cpc$ sudo bluetoothctl
Agent registered
[CHG] Controller XX:XX:E3:F9:11:XX Pairable: yes
[bluetooth]# discoverable on
Changing discoverable on succeeded
※一定時間経過で自動でオフになる。オフになってもペアリングできた。

BTのペアリングするためにスキャン
Spc$ sudo bluetoothctl
Agent registered
[CHG] Controller XX:XX:7D:DA:71:XX Pairable: yes
[bluetooth]# scan on
Discovery started
[CHG] Controller XX:XX:7D:DA:71:XX Discovering: yes
[NEW] Device XX:XX:E3:F9:11:XX Cpc

BTのペアリング
[bluetooth]# pair XX:XX:E3:F9:11:XX
Attempting to pair with XX:XX:E3:F9:11:XX
[CHG] Device XX:XX:E3:F9:11:XX Connected: yes
Request confirmation
[agent] Confirm passkey 009496 (yes/no): yes
※Cpcでも同様にyes

信頼する機器として設定。これしないといちいち確認が発生する。
[bluetooth]# trust XX:XX:E3:F9:11:XX
[CHG] Device XX:XX:E3:F9:11:XX Trusted: yes
[bluetooth]# exit

何故かbrctlでpan0インターフェースを作成してるけど、今回はブリッジじゃなく1対1。上記本P120
Spc$ sudo brctl addbr pan0
Spc$ sudo brctl setfd pan0 0
Spc$ sudo brctl stp pan0 off
Spc$ sudo ip addr add 169.254.245.150/16 brd + dev pan0 # リンクローカル用アドレス
Spc$ ip address show pan0
6: pan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether XX:XX:cd:ac:0a:55 brd ff:ff:ff:ff:ff:ff
    inet 169.254.245.150/16 brd 169.254.255.255 scope global pan0
       valid_lft forever preferred_lft forever

bt-panをサーバとして(確認用にデバッグモードで)起動
Spc$ sudo ./bt-pan --debug server pan0
DEBUG:root:Using local device (addr: XX:XX:7D:DA:71:XX): /org/bluez/hci0
DEBUG:root:Registered uuid 'nap' with bridge/dev: pan0 / XX:XX:7D:DA:71:XX

ここで上記本P121を参考にクライアント側UbuntuのGUIで設定した。CLIでの設定はわからない。
Ubuntuの「設定」ウィンドウを開き、「Bluetoothの設定」画面でデバイスSpcが切断になってるのでクリックして、接続スイッチを入れる。
すると「ネットワーク」画面に「Spc」という設定ができているので、歯車をクリックしてIPv4設定タブでメソッドを「ローカルへのリンク専用」にして保存。
そうするとネットワーク画面で「Spc」のスイッチを入れると通信可能になる。

上記GUI操作の「ローカルへのリンク専用」設定以外は以下のCLIで可能。
Cpc$ sudo bluetoothctl
Agent registered
[CHG] Controller XX:XX:E3:F9:11:XX Pairable: yes
[bluetooth]# connect XX:XX:7D:DA:71:XX
Attempting to connect to XX:XX:7D:DA:71:XX
[CHG] Device XX:XX:7D:DA:71:XX Connected: yes
Connection successful
[CHG] Device XX:XX:7D:DA:71:XX UUIDs: XX001801-0000-1000-8000-00805f9b34fb
[CHG] Device XX:XX:7D:DA:71:XX ServicesResolved: yes
[Spc]# quit
Cpc$ nmcli con
NAME                   UUID                                  TYPE       DEVICE 
lxdbr0                 XX2ea7bd-b1c7-4516-894b-ea4ad3ed49e8  bridge     lxdbr0 
Spc ネットワーク       XXd4d985-77d4-48b0-85e8-e10f55012bd0  bluetooth  --     
有線接続 1             XX9f2d67-6cd5-36ca-960b-699d45aedc56  ethernet   --     
Cpc$ sudo nmcli con up  'Spc ネットワーク'
接続が正常にアクティベートされました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/74)

Cpc$ ssh 169.254.245.150 # アクセス成功!


※ CpcでYouTube見ようとしてもCpcから音が出なくなる。とりあえずpulseaudio -kすれば出るようになったが。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする