= 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パッケージなどが動作に必要です。 == 準備 まず、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 }}}