Linuxを使ってBluetoothでインターネット接続
Linuxをアクセスポイントとして、Bluetoothでネットワーク接続する方法を紹介します。
Xperia Z1(C6903)を購入したのですが、WIFIに不具合があり使い物にならなかったので、 Bluetoothで接続することにしたメモです。
なお、Ubuntu 16.04で構築しているので、他のディストリビューションをお使いの方は適用に読み替えてください。
用意するもの
- bluezパッケージ
- apt-get install bluezでインストールしておきます。bluetoothデバイスを操作するのに必要です。
- bt-panスクリプト
- Bluetoothでネットワーク共有を行うためのスクリプトです。下記のサイトのスクリプトを/usr/local/binなどにコピーして使います。
- https://github.com/mk-fg/fgtk/blob/master/bt-pan
- なお、python-dbusパッケージなどが動作に必要です。
- Bluetoothでネットワーク共有を行うためのスクリプトです。下記のサイトのスクリプトを/usr/local/binなどにコピーして使います。
準備
まず、bluetooh自身を利用できるようにします。
bluetoothサービスを設定します。
# systemctl start bluetooth.service # systemctl enable bluetooth.service
bluetoothコマンドで、bluetoothの有効化、ペアリングなどを行います。
root@piano:/etc/systemd/system/multi-user.target.wants# bluetoothctl [NEW] Controller 00:1B:DC:0F:C1:52 mypc [default] [NEW] Device 74:23:44:6B:XX:XX Android [bluetooth]# power on Changing power on succeeded [bluetooth]# discoverable on Changing discoverable on succeeded [CHG] Controller 00:1B:DC:0F:C1:52 Discoverable: yes [bluetooth]# agent on Agent registered [bluetooth]# scan on
これでAndroidから認識されるようになるので、Androidからデバイスの登録を行い、ペアリングを行います。
[bluetooth]# pair 74:23:44:6B:XX:XX [bluetooth]# trust 74:23:44:6B:XX:XX
ペアリングコマンドを実行すると、Androidの方で許可メッセージが出るので、許可します。
ネットワークの設定
Bluetoothで接続するネットワークの設定をします。
auto bt-br iface bt-br inet static address 192.168.12.1 netmask 255.255.255.0 network 192.168.12.0 broadcast 192.168.12.255 gateway 192.168.12.254 dns-nameservers 8.8.8.8
DNSが動作していなければ、DNSを設定します。下記は、dnsmasqの例です。
/etc/dnsmasq.d/bnetp
dhcp-range=tag:bt-br,192.168.12.2,192.168.12.63,30m dhcp-option=tag:bt-br,option:router,192.168.12.1 dhcp-option=tag:bt-br,option:dns-server,8.8.8.8
適当にdnsmasqパッケージをインストールして起動しておきます。
サービスの設定
net-bnetp.serviceファイルを作成し、/etc/systemd/system/multi-user.target.wantsディレクトリに 置きます。
[Unit] After=bluetooth.service PartOf=bluetooth.service [Service] ExecStart=/usr/local/bin/bt-pan server bt-br [Install] WantedBy=bluetooth.target
bt-panの実行コマンドで、Bluetoothデバイスを接続するブリッジをしています。配置したら、サービスとして起動します。
# systemctrl daemon-reload # systemctl start net-bnetp.service
Android側でBluetoothネットワークに接続
Bluetoothのデバイスを表示すると、「Internet access(インターネットアクセス)」という項目があるので、ONにするとインターネットアクセス可能になります。
Firewallの設定
Bluetooth側のネットワークから、外にでれるようにNATの設定をします。
# iptables -t nat -A POSTROUTING -o eth0 -s 192.168.12.0/24 -j MASQUERADE # iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # iptables -A FORWARD -i bt-br -o eth0 -s 192.168.12.0/24 -j ACCEPT
電源を切ると消えるので、永続化しておきます。
# netfilter-persistent save