~nabeken/diary/

Gentoo Linux(6年くらい)とFreeBSD(1年くらい)とOpenBSD(新参者)を使う日々。


IHANet BGP peering overview

Linux から EMONSTER (S11HT) の Bluetooth DUN 経由で PPP 接続する

Posted on Sun Mar 22 15:26:23 +0900 2009 by nabeken

Bluetooth を使ったネットワーク接続は2種類ある。1つは PAN (Personl Area Network) を使った方法、もう1つは EMONSTER をモデムとして、それを Bluetooth 経由 ppp する方法である。本稿では、後者の方法を Linux で行う方法を解説する。

利点

  • PAN であれば、EMONSTER 側で共有設定をしなければならない
    • そのとき、 EMNet ではなく、embを選択していると、MMSが来たとき、自動で EMnet に切り替わってしまう
    • DUN であれば、自動で切りかわらない。ただし、このあいだ、 EMONSTER 側では自動、手動ともに EMnet では接続できなくなる(エラーになる)
    • ssh などをしている場合はこの仕様は助かる
  • EMONSTER ではなく、端末に直接グローバルIPアドレスが割り当てられる。

すでに、 Bluetooth PAN は正常に動いていることを前提とする。Linux での Bluetooth の扱いはここでは取り扱わない。

EMONSTER を Bluetooth DUN 化する

デフォルトでは DUN プロファイルがないので、レジストリを追加する cab を入手する。ダウンロードは xda-developers のサイトから可能。参考: http://forum.xda-developers.com/showpost.php?p=1614575&postcount=92 (ただし、登録が必要)

インストール後、再起動する。

rfcomm

rfcomm とは、シリアルケーブルをワイヤレスにしたもの、と言える。参考: http://japanese.bluetooth.com/Bluetooth/Technology/Works/RFCOMM_1.htm

ppp はこの rfcomm に対して行うことになる。Linux では、/etc/bluetooth/rfcomm.conf で設定する。

rfcomm のチャンネルを調べる

Linux の Bluetooth DUN に失敗する原因はこのチャンネル問題だと考える。

問題はどのチャンネルが EMONSTER のモデムに相当しているのか、である。これを調べるには、 sdptool を使う。参考: http://now.ohah.net/setu/wiki.cgi?Debian%3Aetch%3AGPRS (非常に参考になった)

参考サイトと自分の手元を比べると、やはりチャンネルは一定ではなく、環境に依存していることがわかる。失敗している人はチャンネルの設定を確かめるとよいだろう。

言うまでもないが、 XX:XX:XX:XX:XX:XX は自分の EMONSTER のアドレスである。

 # sdptool search DUN
Inquiring ...
Searching for DUN on XX:XX:XX:XX:XX:XX ...
Service Name: Dial-up Networking
Service RecHandle: 0x10007
Service Class ID List:
  "Dialup Networking" (0x1103)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 5
Language Base Attr List:
  code_ISO639: 0x656e
  encoding:    0x6a
  base_offset: 0x100
Profile Descriptor List:
  "Dialup Networking" (0x1103)
    Version: 0x0100

RFCOMM の下に Channel: 5 というものがある。これを rfcomm.conf に指定する。

 # cat /etc/bluetooth/rfcomm.conf
rfcomm0 {
	# Automatically bind the device at startup
	bind yes;

	# Bluetooth address of the device
	device XX:XX:XX:XX:XX:XX;

	# RFCOMM channel for the connection
	channel	5;

	# Description of the connection
	comment "EMONSTER-BT";
}

以上で rfcomm の設定は完了した。

ペアリング (bluez のバージョンが 2.x の場合)

まず、これまでのペアリング情報を EMONSTER から削除しておく。PIN関連の設定は

 # cat /etc/bluetooth/hcid.conf | grep pin
	pin_helper /etc/bluetooth/pin-helper;

 # cat /etc/bluetooth/pin-helper
#!/bin/sh
echo -n "PIN:"
cat /etc/bluetooth/pin

/etc/bluetooth/pin には PIN コードを予め書き込んでおく。これからもわかるように、pin_helper の戻り値を PIN:${yourpincode} にすれば、あとはなんでもよいことがわかる。

ペアリング (bluez のバージョンが 3.x, 4.x の場合)

bluez-gnome を使ってペアリングする。この場合、bluetooth-applet を起動しておけば、ペアリングが必要なときに自動でポップアップしてくれるので、あとは指示に従うだけである。

次に実際にペアリングを行う。

 # rfcomm connect 0

これを行うと、EMONSTER 側でアラートが出る。接続を許可し、上で指定した PIN コードを入力すれば、ペアリングは完了となる。なお、このコマンド自体の成否は特に問わない。ペアリングを先にすませるのが目的である。

PPP の設定

Ubuntu などを使っている場合は GUI で設定できると思われるが、ここでは自分で設定する。まず、 /etc/ppp/peer/emobile に emobile 固有の設定を書く。このあたりの設定はほとんど USB 接続のときと同じである。異なるのは1行目で rfcomm0 を指定し、レートを変えている点である。ユーザ名 em に対するパスワードは /etc/ppp/pap-secret にあらかじめ登録しておくこと。ここでは扱わない。

 # cat /etc/ppp/peers/emobile
rfcomm0 460800
lock
nodetach
hide-password
local
noauth
usepeerdns
defaultroute
noipdefault
novj
noccp
nobsdcomp
user "em"
ipcp-restart 8
ipcp-max-configure 50
ipcp-accept-local
ipcp-accept-remote
connect '/usr/sbin/chat -V -f /etc/ppp/chat-emobile'

次にモデムとの交信をする chat コマンドに与えるスクリプトの設定を行う。参考: http://www.opensolaris.org/jive/thread.jspa?messageID=240907

参考サイトから chat のスクリプトを拝借した。これはシェルスクリプトの引数として与えられているので、それをファイル形式に落しこむ。これを /etc/ppp/chat-emobile として保存する。

 # cat /etc/ppp/chat-emobile
ABORT BUSY
ABORT DELAYED
ABORT "NO ANSWER"
ABORT "NO DIALTONE"
ABORT VOICE
ABORT ERROR
ABORT RINGING
TIMEOUT 60
"" ATZ
OK ATE1
OK "AT&FE1V1X1&D2&C1S0=0"
OK AT+CGDCONT=1,"IP","emb.ne.jp","",0,0
OK ATD*99#
CONNECT ''

以上で設定が完了した。

 # pon emobile

これで ppp0 が生えるはずである。

CicleBT

Bluetooth は常時有効にしておくのが便利だが、バッテリの都合もあり、小まめに ON/OFF したい。しかし、何もカスタマイズがない場合、わざわざ Connection Manager を開く必要がある。また、 Device Status on Today Plugin を入れたとしても、タップが3回発生してしまい非常に手間である。

そこで、CicleBT というソフトを入れることにした。これは起動すると状態をトグルしてくれるだけのシンプルなプログラムである。ボタンから起動することを想定している。私は左側の長押しボタンにこのソフトを割り当てることで、ワンタッチで ON/OFF を切り替えている。

BLUETOOTH ICON ON TRAY BAR

ON/OFFがワンタッチできるようになると、今度はひとめでどの状態か把握したくなる。それを可能にするのはこのタスクバーアプリである。

http://forum.xda-developers.com/showthread.php?t=257415 からダウンロードできる。(bticonontray.cab)

インストール後、ソフトリセットをすると、タスクバーに現われる。

Wireless Today

Kaiser Tweak というソフトウェアをインストールすると、EMONSTERの様々な設定が操作できる。このなかに、Wireless Today という項目がある。これを有効にすると、Todayにワイヤレスの状況を把握できるアプリが追加される。上記のアイコンの代わりとなる。どちらか好きなほうを使うとよい。

更新履歴

  • MAINT Wireless Today について追記 (Sun, 22 Mar 2009 15:26:23 +0900)
  • 誤字、bticonontray について追記 (Sun, 4 Jan 2009 12:40:32 +0900)
  • 脱字修正、CicleBT について追記 (Tue, 30 Dec 2008 13:04:11 +0900)
  • MAINT bluetooth-dun-from-linux: 誤字脱字、バージョンによる違いを追記 (Thu, 6 Nov 2008 09:31:58 +0900)
  • bluetooth-dun-from-linux: 利点を追加 (Wed, 1 Oct 2008 11:26:40 +0900)
  • bluetooth-dun-from-linux: 空行を追加 (Wed, 1 Oct 2008 11:15:10 +0900)
  • bluetooth-dun-from-linux: 初稿 (Wed, 1 Oct 2008 11:14:42 +0900)