2008.05.06 イーモバイル on FreeBSD 逝っとく? 実家に帰って来て暇(?)なのでイーモバイル(http://emobile.jp)に挑戦 してみました。ていうか Windows で使えていて, 自宅でも会社でもじっ くりいじるだけのモチベーションが上がらなかったというかなんという か。ついでに…ということで色々挑戦してみました。 なお動作確認は下記環境となります。感じからすると 5 系でも十分通用 すると思われ(mpd5 が動くか知らないけど)。まぁパッチは直に当たらな いとは思うので, いくらか調整する必要があると思います。 機種: Panasonic Let's Note CF-R4 (2007 春モデル) 端末: E Mobile D01NE (Cardbus タイプ) D01NE OS: FreeBSD 8.0-current 2008/05/01 版 ドライバ: umodem(ucom, usb を含む) ohci(カーネルコンフィギュレーションで指定する場合) 各種 netgraph PPP: mpd 5.1 dmesg ログ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ohci0: mem 0xb0103000-0xb0103fff irq 22 at device 0.0 on cardbus0 ohci0: [GIANT-LOCKED] ohci0: [ITHREAD] usb2: OHCI version 1.0 usb2: on ohci0 usb2: USB revision 1.0 uhub2: on usb2 uhub2: 1 port with 1 removable, self powered ucom0: on uhub2 ucom0: iclass 2/2 ucom0: data interface 1, has CM over data, has break ucom0: status change notification available - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1. mpd5 によるイーモバイル on FreeBSD の挑戦 時代は mpd5 (嘘)ということで挑戦してみようかと。というか, あま り mpd4 使わなかったので, 今後のことを考えると mpd5 に行ってお くのがいいかな。 今回調べてみて思ったのは, 設定ファイルの互換性無くしてでも, す っきりさせたかった。というのがよくわかるというか, まぁ mpd4 か らの移行はそれなりに覚悟が必要ということで。 ばっさり切りすぎて, ヘルパースクリプト - 例えば /etc/resolv.conf 書き換えるもの等がなかったりするのが萎えかな。厳密にはちゃんと やらんとアカンけど, 今回は手つかずの方向で。 2. FreeBSD だと通信速度が極端に遅い問題への挑戦 実際使ってみると遅いので調査してみた。L 方面で 1 つパッチを見 付けたのと N 方面で困ってる感じがしなかったので, パッチでいじ ている箇所を重点的に調査してみました。 ★というわけで 1 から。 mpd5 (ports/net/mpd5)をインストールした後, 以下のファイルを用意し ます。個人的には mpd.script は mpd.script.sample へのシンボリック リンクでもいいくらい, いじることは無いと考えています。 /usr/local/etc/mpd5/mpd.conf /usr/local/etc/mpd5/mpd.script /usr/local/etc/mpd5/mpd.secret emobile は ID/パスワードがアレげなので, 今回 mpd.secret は使いま せん。この(mpd.secret)ファイルがないことでどういう風になるかは知 らないので, 用意しないなら用意しないで後は知らんと:-)。 mpd.conf は今回 0 から作るものとし(既存に合わせても問題ないけど) 具体的には下記のように設定します。 mpd.conf 設定例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - startup: # configure the administrator set user admin admin admin # configure the console set console self 127.0.0.1 5005 set console open # configure the web server set web self 127.0.0.1 5006 set web open # logging #log +bund +bund2 +lcp +lcp2 +ipcp +ipcp2 +phys +phys2 -phys3 log +bund -bund2 +link -fsm -auth -auth2 -lcp -lcp2 -ipcp -ipcp2 -chat -phys -phys2 -phys3 default: load emobile emobile: create bundle static bEMOBILE set ipcp enable req-pri-dns req-sec-dns set ipcp disable vjcomp set ipcp range 0.0.0.0/0 127.127.127.127/0 set iface route default set iface enable on-demand tcpmssfix # set iface idle 0 create link static lEMOBILE modem set link action bundle bEMOBILE set link bandwidth 3600000 # set link max-redial -1 set modem device /dev/cuaU0 set modem var $DialPrefix "DT" set modem var $Telephone "*99***1#" set modem script DialPeer set modem idle-script Ringback set auth authname em set auth password em open - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ■ラベル(mpd.conf) ラベル(startup, default, emobile)について解説。「startup」ラベル は常に実行されます。ここでは, 管理コンソール(アカウント, telnet, http) とログ設定を行っています。 また mpd5 のオプションで configuration を指定しない場合 default ラベルが, そうでない場合は configuration として指定したラベルが実行されます。 参照:mpd5(8) これは例えば, 上記の場合, mpd5 と実行した場合 startup → default → emobile と解釈され, mpd5 emobile と実行した場合 startup → emobile と解釈されます。 運用上はサーバー系サービス(PPTP サーバー, 常時接続もの)を default で各サービスを load するようにして, ダイアルアップの類を個別に指 定するのがよいと思われます。 ■管理コンソール set user では管理コンソールのアカウント設定を行います。これのオプ ションはそれぞれ, アカウント, パスワード, 権限とあり, 権限には admin, operator, user があります。ちょっと見たところでは show コ マンドは user 権限で, open/close コマンドは operator 権限で, 残り 全ては admin 権限が必要なようです。このあたりは厳密にはソース中の struct cmdtab で定義されるコマンドリストを見てくしかないです。 set console|web self で待ち(listen)の定義, set console|web open で実際にサービスを開始します。一度 web (http://localhost:5006/) にアクセスしてみると面白いです。いずれにせよ, バックグラウンドで 動かす分にはこの機能は使えますが, フォアグラウンドでは標準入出力 で十分同じことができるので, どうでもいいっちゃどうでもいいです。 ログですが, 普通に使う分にはディフォルトで ok で, 本気でデバッグ するなら log +all。コンソール(手動起動)で使うなら上記設定でとい ったあたりでしょうか。 ■バンドル(bundle)とリンク(link) mpd5 では複数の「リンク(link)」を「バンドル(bundle)」します。ま たバンドルに対応する「インターフェース(interface)」(ng0, ng1,...) が設定され, 同じく NCP (IPCP, IPv6CP), CCP (圧縮), ECP (暗号化) が設定されます。 link → bundle → NCP → CCP → ECP link : 図にするとたぶんこんな感じ。そういう意味では link に所属する設定 か bundle に所属する設定かで分かれる。と。 そのために create bundle と create link コマンドがあり, それぞれ 切り替えるために bundle と link コマンドが用意されています。 また, link が開くと bundle が開く(set link action bundle)ように なっています。また設定にはあまり順番は関係無いようです。つまり create bundle → create link という順番でも create link → create bundle でも問題ない。 以上の視点で設定を見ると create bundle set ipcp set iface create link set link set modem / ng / tcp / udp / pptp / l2tp / pppoe set auth と分類できます。open (close) に関しては bundle も link もあるいは, もっと細かくインタフェースなりなんなり制御できますが, 今回はリンク に置いてあります。この設定では link がアクティベートされると bundle が起動するとしています(逆は検証してないです)。 ■未検証項目 有名な話ですが, ずっとつなげて使っていると, キャリアからの切断をく らいます。再接続する必要がありますが, 今のところ自動的に再接続する 技を見付けていません。set iface idle 0 (ディフォルト)と set modem idle-script Ringback が必要そうなのですが, うまくいって ません。要検証ということで。 ■ラベル, バンドル, リンクの命名規則 特にないです。が, 私的に, ラベルは小文字で「何(how, what, where)」 を表現できるもの。バンドルは小文字 b で始めて残りを大文字で。リン クは小文字 l で始めて残り大文字で。としています。なおいずれも 16 文字までとなります。 ■イーモバイル使用にあたっての注意点 1. unnumbered らしい どう工夫しても IFACE: Removing IPv4 address from ng0 failed: Can't assign requested address というメッセージが出て, 自分のインターフェースの IP アドレスを設 定できても対向(ピア)の IP アドレスが設定されないという事象が発生。 しょうがないので set ipcp range で適当なピア IP を指定したら, 行 けてしまったという…。 0.0.0.0 だと ng0 (ng_iface(4))に設定できないので, 当たり障りの ないところで 127.127.127.127/0 を指定してみた。もちろん自分自身 の(割り当てられた) IP を指定して更に route add default -iface ng0 するとか ng_iface(4) 改良して 0.0.0.0 を受け付けるようにすると か色々技は考えられなくもないけど, 変更が大きくなるので, 放置の 方向で:-)。 2. vjcomp, req-pri-dns req-sec-dns vjcomp ネゴシエーションしないみたいなので, 無駄なネゴシエーショ ンしないように disable (自分からリクエストを投げない)する。逆に req-pri-dns, req-sec-dns しないとまともな DNS 情報返さないので enable (自分からリクエストを投げる)する。なおこの設定しても, /etc/resolv.conf は書き換えないので, まぁその手の設定が行えるよ うになって始めて有効。と。 3. 帯域設定 モデムからの情報で帯域情報を返さないので, ディフォルトの 28800bps になってしまうので 3.6Mbps つまり 3600000 を設定しています。 通信では一般に 1000 が基準になります。3.6M = 3.6*1000*1000 と。 4. 電話番号と ID, パスワード とりあえずイーモバイルから公開されてる情報(取り扱い説明書や web)に基づいて設定を行う。パスワードは mpd.secret に設定するの が筋だけど, あまりにも安直なので set auth password で設定し ておく。 5. 実は… on-demand と tcpmssfix の効果は調査してません:-)。PMTU ブラック ホール問題で痛い目にあったら tcpmssfix 入れる癖がついてるので, まぁこちらはいいとしても, on-demand の効果が出てるかよくわかっ ていません:-)。 6. 要注意項目 イーモバイル端末が /dev/cuaU0 にいる前提で設定している。USB シリ アルケーブルだったり, 他の USB モバイル機器つないだ場合どうなる かわからないので, イーモバイル端末が /dev/cuaU0 に割り当てられて いることを確認すること。これは dmesg で ucom0 (0, 0 以上の数字)と /dev/cuaU0 (0, この数字が連動)を見る。 ★次に 2 について(な…長い)。 pchar や FreeBSD のインストールイメージ(ISO)をダウンロードして帯域 を調査したところではだいたい, 200Kbps 〜 500Kbps 程度と極めて遅い です。これは既に FreeBSD-users-jp でも話題になっていたので知っては いたのですが(解決策まで提案されてたのは知らなかった…今までの苦労 は…), 調査してみました。結論としては FreeBSD-users-jp/90542 と同 じわけですが, バッファサイズを変更することで性能が変わりました。 バッファサイズ ダウンロード(下り)のピーク帯域 64バイト 100Kbps 〜 250Kbps 1024バイト 400Kbps 〜 500Kbps 4096バイト 1000Kbps 〜 1300Kbps 8192バイト 1100Kbps 〜 1500Kbps 8192バイト超 通信不可 ※計測地や時間による影響を多大に受けていることに注意 単純に時間だけでも 10 時間程度差があります. 64 バイトで挑戦したのは, L のパッチで USB デスクリプション情報を 使うというものがあったからです(64バイト)。残念ながら FreeBSD では 意味がありませんでした。N では問題ないみたいなので, N のコードを 見たら, ずいぶん大きく設定されていたので, パラメータ調整して最適 値を探しました。4096 と 8192 ではそれほど差は無い感じですが, ま だサチってないなと思い, 更に上のサイズを挑戦しましたが, まるで通 信してくれないという問題がありました。 この問題は D01NE では問題無いけど, 他の umodem 端末で潜在的に問題 があるかもしれないのと, 後継機種(D02NE 他)では更にいけるかもしれ ないということを考慮して, パッチを作成してみました。 http://blog.ninth-nine.com/archives/umodem-20080506.diff hw.usb.umodem.ibufsize と hw.usb.umodem.obufsize の 2 つの tunable を導入しましたのでこのパッチ導入後 /boot/loader.conf に設定して 調整します。もちろんディフォルトは 1024 のままですし, D01NE であ れば 8192 に設定する。で ok です。それ以外の端末ではまた別途調査 した方がいいでしょう。毎回設定しては再起動という道を探ることにな りますが:-)。 さて。パッチ品質についてはそんなに悲観的に考えていませんが, ドキュ メントが大変です:-)。というわけで umodem(4) への文言を考えたら PR 提出します。 というわけでながかた。。ゴールデンウィーク 3 日分の成果ということ で…(本文を含む)。 orz 参考 /usr/local/share/doc/mpd5 以下の mpd5 のマニュアル http://d.hatena.ne.jp/osaboh/20071210/p1 http://d.hatena.ne.jp/reservoir/20070413/1176428523 http://emobile.jp/products/sh/s01sh2/howto1_xp.html http://home.jp.freebsd.org/cgi-bin/showmail/FreeBSD-users-jp/90456 http://home.jp.freebsd.org/cgi-bin/showmail/FreeBSD-users-jp/90462 http://home.jp.freebsd.org/cgi-bin/showmail/FreeBSD-users-jp/90517 http://home.jp.freebsd.org/cgi-bin/showmail/FreeBSD-users-jp/90518 http://home.jp.freebsd.org/cgi-bin/showmail/FreeBSD-users-jp/90519 http://home.jp.freebsd.org/cgi-bin/showmail/FreeBSD-users-jp/90520 http://home.jp.freebsd.org/cgi-bin/showmail/FreeBSD-users-jp/90522 http://home.jp.freebsd.org/cgi-bin/showmail/FreeBSD-users-jp/90542 Written by 重村法克