ぶていのログでぶログ

思い出したが吉日

Nano Pi NEO2でBluetooth PAN(NAP)を設定する

半年ほど放置していたNano Pi NEO2を引っ張り出しLEDマトリクスパネルの制御に使っている。 制御用のプログラムをアップデートするには、どうにかしてログインしないといけないわけで、これが結構悩ましい。

Nano Pi NEO2には有線LANがついているので、これを使うというのが妥当ではあるのだが、組み込み用途だと持ち運びができなくて不便になる。 次にWiFiという選択肢なのだが、これもやはり持ち運びが不便だ。 SSIDを登録しておけば、移動先でもアクセスできるのだが、それを設定するのが面倒である。。 また、数年前の知識なのだが小型のUSB WiFiドングルはかなり熱を持つので長時間使うには向いていない。 シリアルコンソールという方法もあるが、これはこれでファイル転送ができなくてかなり不便である。

そこで、USBのBluetoothドングルを接続してBluetooth PANを使うことにした。

Bluetooth PAN

Bluetooth PANはPersonal Area Networkの略称で、Bluetoothを使ってTCP/IP通信する企画である。 スマートフォンBluetoothを使ってテザリングをするときに使われるのが一般的だと思う。

Bluetooth PANには以下の3つの役割がある。

  1. NAP
  2. GN
  3. PANU

Bluetoothテザリングをしたときに、スマートフォンがNAP。 スマートフォンに接続したPCが、PANUになる。 今回は、Nano Pi NEO2をNAPにする。

USB Bluetoothドングルの選択

これはLinuxで使えればなんでもよい。 ただし、Nano Piにはカーネルソースが提供されておらず*1カーネルモジュールをビルド出来ないので、デフォルトでカーネルに含まれているドライバで動くドングルを選択する必要がある。 私は、Amazonエレコムのやつを買った(LBT-UAN05C2)。

LinuxBluetooth PAN(NAP)の設定

設定自体は以下のサイトを参考にした。

raspberrypi.stackexchange.com

設定を行う前に、以下のパッケージをインストールする。

$ sudo apt-get install -y bridge-utils bluez-tool

次にネットワークの設定を行う。 参考サイトはraspbian用の設定で、Nao Pi NEO2で使っているUbuntu xenialでは少し設定を変えないといけない。 具体的には、systemd-networkdが使えないので、ブリッジの設定とDHCPサーバをなんとかしないといけない。

以下のような設定を /etc/network/interfaces に追加する。 ポイントは bridge_portsnone に設定するところ。 bridge_portsがないとブリッジインターフェイスにならないが、ブリッジにインターフェイスを追加したくないのでnoneにする必要がある。

auto pan0
iface pan0 inet static
  address 192.0.2.1
  network 192.0.2.0
  netmask 255.255.255.0
  broadcast 192.0.2.255
  bridge_ports none
  bridge_fd 0
  bridge_stp off

設定が終わったらpan0を起動しておく。

$ sudo ifup pan0

次にDHCPサーバの設定をする。 dnsmasqがインストールされているのでこれを使う。 以下の設定を /etc/dnsmasq.conf に設定する。

dhcp-range=pan0,192.0.2.11,192.0.2.250,24h

設定が終わったらdnsmasqを有効化する。

$ sudo systemctl enable dnsmasq
$ sudo systemctl start dnsmasq

次にbt-agentとbt-networkの設定をする。 それぞれ、デーモン化する必要があるので、以下のようなUnitファイルを作る。

$ cat /etc/systemd/system/bt-agent.service
[Unit]
Description=Bluetooth Auth Agent

[Service]
ExecStart=/usr/bin/bt-agent -c NoInputNoOutput
Type=simple

[Install]
WantedBy=multi-user.target
$ cat /etc/systemd/system/bt-network.service
[Unit]
Description=Bluetooth NEP PAN
After=pan0.network

[Service]
ExecStart=/usr/bin/bt-network -s nap pan0
Type=simple

[Install]
WantedBy=multi-user.target

設定が終わったら有効化する。

$ sudo systemctl enable bt-agent.service
$ sudo systemctl start bt-agent.service
$ sudo systemctl enable bt-network.service
$ sudo systemctl start bt-network.service

これで準備が出来たので後はペアリングするだけである。 これについては割愛する。

まとめ

Bluetooth PANの設定ができた。 これでどこに持ち運んでもBluetoothを接続すれば、sshできるようになって便利。 さすがに、Bluetoothではそこまで速度はでないがオペレーションするくらいなら十分である。 しばらくこのまま運用してみようと思う。

*1:aptではいるわけでもなく、どこからかDLできるわけでもなさそう?