alixで作成したdebianベースのブロードバンドルータを使っていますが、いままでマルチセッションの設定は行なっていませんでした。
フレッツ光メンバーズクラブのダイレクトメールが届いた機会に、マルチセッションでフレッツスクウェアにアクセスするように設定をしました。
平行してNintendoDS用にWEPで構成している無線LANのアクセスポイントをLANから切り離してインターネットとの通信だけを行なうようにしたので、それは改めて別の記事にまとめます。
2010/10/12追記: この記事でのppp周りのスクリプトには十分でない処理があり正しく動作しません。 その点をフォローするように書き直す予定ですが、規模が膨らむため時間がかかりそうです。 そのためこの記事を修正していて、修正個所はこの囲み(Note)でフォローしています。
作業の流れ
今回行なった作業は次のような流れになりました。
- /etc/ppp以下のファイルを編集して、パスワードなどのflets用PPPoE設定を加える
- /etc/network/interfacesを編集して、flets用ネットワークデバイス(ppp1)の設定を加える
- ルーティング情報の追加
- DNSを変更して、fletsドメインの問合せ先を追加
DNSについてはeucalyptusのテストのために、ドメイン毎にforwarderのIPアドレスを指定できるようにしていたので、そこに"flets"ドメインの検索だけをNTTのDNSサーバに投げるようにしています。
一から作るのも難しくはないですが、/etc/resolv.confを取り敢えず修正すれば簡単なデバッグはすぐに出きる事も覚えておくと良いかもしれません。
PPPoEの設定の追加
alixで使っているPPPoE用のソフトウェアは、debian lennyなので ppp-2.4.4rel-10.1 + pppoe-3.8-3 です。
現在契約しているプロバイダとの接続はPPPoEで既に行なっているので、それを真似て設定ファイルを準備していきます。
接続用のパスワードを設定する
"guest@flets" * "guest"
/etc/ppp/peers以下に設定ファイルを作成する
今回は flets という名前のファイルを作成することにしました。 この名前は/etc/network/interfacesファイルの中で使います。
dsl-providerはpppoeパッケージが配置するデフォルトの接続用ファイルで、既にISPに接続するために安定して動いている設定が入っています。
$ sudo ls /etc/ppp/peers/dsl-provider /etc/ppp/peers/flets
作成したfletsファイルの最下行に設定しておいた user行 をflets網へのアクセス用IDに変更します。
user "guest@flets"
短い設定ファイルなのでコメントと空行を除いた内容を書いておきます。
noipdefault
nodefaultroute
hide-password
lcp-echo-interval 20
lcp-echo-failure 3
connect /bin/true
noauth
persist
mtu 1454
noaccomp
default-asyncmap
plugin rp-pppoe.so eth0
user "guest@flets"
2010/10/12追記 "defaultroute"オプションを指定していると、ifup/ifdown時にppp0を巻き込んでデフォルトゲートウェイが変更されてしまいます。 今回は手動でルーティングを変更しますから、明示的に"nodefaultroute"に変更しました。
ここまででパスワードの登録と、それを呼び出す設定を追加しました。 この設定を有効にする設定をinterfacesファイルに設定します。
ネットワーク構成の追加
flets用のPPPoE接続をするように設定を追加します。
/etc/network/interfacesファイルの編集
次のような設定を追加します。
auto flets
iface flets inet ppp
provider flets
post-up /usr/local/sbin/ppp_flets_up.sh
ルーティングの設定
interfacesファイルに追加した ppp_flets_up.shスクリプト で、 ルーティングの削除や追加を行ないます。
ルーティング情報は、公式サイトの ルーティング情報で確認することができます。
これとは別に検索すると、 http://routing.flets/routing.htmlについての情報がみつかります。
routing.fletsは接続できない事にはアクセスできない情報ですし、サイトの役割も明確ではなかったので、公式サイトに載っている3つのルーティング情報を加えておく事にしました。
routing用スクリプト - Type 1
2010/10/12追記: "sleep 5"を入れているのは、ppp1デバイスが認識されておらず、routeコマンドの処理に失敗する場合があったために追加しました。
2010/10/12追記: 環境変数IFACEには物理デバイス名、LOGICALには論理デバイス名が入るはずでしたが、実際には両方ともが登録されていました。 動的に値を取得する方法は、とりあえずなさそうなので固定的に"ppp1"と決め打ちしています。
スクリプトの役割は閉じたネットワークであるfletsを向いたデフォルトルートの削除と、その閉じたネットワークに向かう限られたネットワークの追加です。
#!/bin/bash
DEVICE="ppp1"
sleep 5
/sbin/route add -net 220.210.194.0 netmask 255.255.255.128 dev ${DEVICE}
/sbin/route add -net 220.210.198.0 netmask 255.255.255.192 dev ${DEVICE}
/sbin/route add -net 220.210.199.144 netmask 255.255.255.240 dev ${DEVICE}
routing用スクリプト - Type 2
この部分は上記の設定で十分なので参考程度に留めてください。
後からwgetでコピーしたrouting.htmlを処理するためのスクリプトも組んでみました。 routing.htmlファイルはスクリプトが配置されている場所と同じディレクトリにあるとします。
ifupから呼び出された場合にはIFACE環境変数にデバイス名が入っているはずなので、ppp1ではない場合を想定して、これを利用しています。
#!/bin/bash
BASEDIR="$(dirname $0)"
DEVICE="ppp1"
sleep 5
while read line
do
eval $(echo $line | awk -F, '/Route.=Add/ {print "/sbin/route add -net ",$2,"netmask",$3,"dev ${DEVICE}"}')
done < ${BASEDIR}/routing.html
環境変数IFACEが設定されていない場合にはexitするべきでしたね…。
DNSへのfletsドメインの追加
閉じたネットワークにあるwww.fletsやrouting.fletsサイトにアクセスするためにはIPアドレスが必要です。
今回は flets をドメイン名とするホストのIPアドレスの解決をBIND9任せることにしました。
公式サイトでターゲットにする DNSサーバのIPアドレスがわかります。 やったことは/etc/bind/named.conf.localファイルに設定を追加してDNSをリスタートしただけです。
zone "flets" {
type forward;
forward only;
forwarders { 220.210.194.67; 220.210.194.68; };
};
全体のforwardersセクションにはISPのDNSサーバを書いています。 全部をfletsのDNSサーバに投げても良いのかもしれませんが、閉じた場所にあるDNSがどこまで信用できるものかわからないので、fletsドメインだけの名前解決に利用しました。
起動方法
設定が終ればinterfacesファイルに書いた設定名をifupコマンドに指定するだけです。
$ sudo ifup flets
まだ時々挙動がおかしい気がします。しばらく様子見です。
まとめ
今回は既に動いている alix上にあるブロードバンドルータを変更したので、少し前提事項がありました。
基本はdebianが動いているx86マシンなので、特に変な事はないと思いますが、fletsにアクセスする時にルーティングとDNS周りを解決するのがちょっと面倒かもしれません。
マシンが一台だけなら仕組みを作るよりも、その時だけ/etc/resolv.confを手で変更するとか、そもそもブロードバンドルータを手作りなんてしない、っていうのが良さそうです。