Windows 7 のBluetoothスタックでLANを作る

追記 : WindowsによってSDPが試行されたタイミングで、サービスのリストは更新されるようだ。デバイスのプロパティを開き、Bluetoothサービスを表示させることで一覧を更新できるかもしれない。
(Windows7を実行しているPCをクライアント、他のOSを実行しているPCをサーバ/ルータにするケースを考える)

  • 簡単に言えば、メニューがこのようにAccess Pointとなっていなければ、Bluetooth PAN経由でインターネットにアクセスすることはできない。
  • DUN(ダイアルアップ)によるネットワーキングの方が圧倒的に簡単なので検討されたい。

残念ながらWindows 7のネットワークスタックは非常に保護されているので、通常の手段でBluetoothネットワークを作るとP2P接続しかできないかもしれない。(arpDHCP等のプロトコルは通るが、TCP接続やpingが出来ないネットワークが出来る)
以下の点に留意する :

  1. Bluetooth PANにおいてNAPを作る
  2. NAPを作った後にデバイスWindows7に追加する
  3. (ホスト側のデバイスと適当なLANアダプタをブリッジする)

Windows7において、一般に、Bluetoothバイスを使ってLANを作るには、スタートメニュー→ハードウェアとプリンタ→デバイスの追加  によりBluetoothバイスを追加し、追加されたデバイスをクリックして、Connect Using(日本語訳不明)→Access Pointとする。
重要なのは、一度デバイスを追加した後、デバイスが提供する機能は追加や削除が出来ないという点で、まず、接続のホストとなるPCを完全に設定してからWindows7に追加する必要がある。
もし、一旦PANUに設定していたホストをGNやNAPに変更すると、不可解なエラーが発生する。Windows7はあくまでもデバイスがペアリングされたタイミングでのサービスをUIに表示する。
NAP/GN/PANUは、プロトコル上の違いは殆ど無く、Windows以外の大抵のスタックではこれらを厳密には区別していない。しかし、Windows標準のスタックはこれらを区別し、Windows7に至っては(実際には通信できるのにもかかわらず)通信をフィルタリングしてしまう。
作っているネットワークがNAP(Network Access Point)であるかどうかをホスト側から識別する簡単な方法はない。クライアントから表示させるのが早道となる。ホスト側の指針として :

  • Windows標準のスタックはNAPを作ることは出来ない。参加することだけができる。
  • BlueZは適切に設定すればNAPを作ることが出来る。BlueZ同士の通信の場合、PANUであっても適切にルーティングすれば外に出れてしまうことに注意。つまり、BlueZ同士で通信できてもWindowsが正常に参加できないというケースは十分に想定される。
  • Widcomm(Broadcom)スタックの場合、Bluetoothサービスの表示→ネットワークアクセス→ほかのデバイスがこのコンピュータ経由でインターネット/LANにアクセスすることを許可 とすることでサービスはNAPになる。NAPにしたネットワークアダプタと、適当なLANに接続されたネットワークアダプタをブリッジすることで、接続してきたBluetoothバイスに対してインターネットアクセスを提供できる。
  • Bluesoleilも同様の手法で原理的にはサーバになることが出来るが、組み込みのDHCPサーバはOFFにする必要がある。この組み込みのDHCPサーバは、事実上AutoIPによる遅延を避けるためだけに存在しており、Windows7のようにネットワークの種別によって一瞬でAutoIPしてしまうOSではあまり意味がない。