| 初版 | 2001年 6月13日 |
| 第2版 | 2001年 6月14日 |
| 第3版 | 2001年 6月21日 |
| 第4版 | 2003年10月21日 |
この文書は完全に無保証です。この文書へのリンクは自由です。
Linux マシンで ADSL 接続により、サーバを運用する方法を紹介します。
ADSL 接続では、接続が不意に切断されたり、不意に復旧したりすることもあります。サーバを運用するためには、不意の復旧を待つのではなく、こちらから復旧させることも必要になります。
具体的なサーバは示しませんが、ウェブ・サーバにしてもメール・サーバにしても、このような機能は必要となります。
ADSL 接続するまでの手順と、DHCP による非固定グローバル IP アドレス割り当てで、Dynamic Name Service を利用して、なるべく安定してサーバを運用できる方法を示します。
PPP と RP-PPPoE をインストールします。Debian GNU/Linux 2.2(Potato)の場合で、インターネットにつながっている場合は Fig. 1 のように実行すると自動的にインストールできます。Woody の場合は ifupdown パッケージもインストールします。
他の Linux ディストリビューションを使っている場合は、ifupdown の orig.tar.gz をダウンロードしてインストールするとうまくいくと思います(未確認です)。
| # apt-get update # apt-get install ppp pppoe |
ADSL MODEM につながっているイーサネット・カードのインターフェース名が eth1 とすると、/etc/network/interfaces の eth1 のところは Fig. 2 のように記述します。
|
PPP を初めて使う場合、ppp0 が ADSL で通信をするときのインターフェース名になります(eth1 ではない)。ですから、ppp0 について、/etc/network/interfaces ファイルに Fig. 3 のように記述しておくといいでしょう。
|
ここで、パラメータ provider に dsl-provider を指定していますが、これは PPP で設定するファイル名で、/etc/ppp/peers/dsl-provider を指定したことになります。これは後で設定します。パラメータ up と down は、それぞれ、インターフェース ppp0 が接続状態になったとき、切断状態になったときに実行するプログラム(スクリプト等)を指定します。ここでは、/usr/local/sbin/firewall.sh on と /usr/local/sbin/firewall.sh off を指定しています。このスクリプト・ファイルはファイアウォールを設定したり解除したりするために、あなたが書くものです。Linux にはじめから付属しているものではありません。
PPP 付属の pon dsl-provider、poff で ppp0 を有効にしたり無効にしたりすると、Fig. 3 の up や down で指定したスクリプトが実行されません。ですから、ifup ppp0、ifdown ppp0 を使って ppp0 を有効にしたり無効にしたりします。ifup、ifdown コマンドは、Debian GNU/Linux 2.2(Potato)なら netbase パッケージに、その後の版では ifupdown パッケージに含まれています。
/etc/ppp/pap-secrets ファイルの最後の行に、次を追記します。
|
ここで、account はプロバイダから与えられたアカウント名、provider.ne.jp はプロバイダのドメイン名です。Password はプロバイダにアクセスするためのパスワードです。
RP-PPPoE をインストールすると、/etc/ppp/peers/dsl-provider というファイルが作られます。/etc/ppp/peers/dsl-provider の最初の行は Fig. 5 のようになっていますが、 Fig. 6 のように修正します。
pty "pppoe -I eth0 -T 80" |
pty "pppoe -I eth1 -T 80 -m 1412"〜中略〜 user account@provider.ne.jp |
ここで修正する必要があるのは -I オプションのインターフェース名を ADSL MODEM が接続されたイーサネット・カードのインターフェース名に変更することと、-m オプションで 1412 を指定するようにすることです。また、user パラメータでユーザ名を追加します。
ADSL の MTU については、ここのページに詳しいことが書かれています。これによると、MTU は 1454 に設定すればよいことがわかります。たた、Fig. 6 で設定している 1412 という値は、RP-PPPoE の man ページで、マシンをゲートウェイとして使い内側に LAN がある場合に強く推奨されている値です。
ADSL では、MTU を適切に設定しないと通信できないホストがあります。「お気に入りのウェブ・サイトが、いままでアナログ MODEM で接続していたときには見えたのに、ADSL にしたら見えなくなってしまった」ということが起こりえますので、MTU の設定には注意が必要です。
では、ADSL 接続ができたか試してみましょう。Fig. 7 にそのようすを示します。
# ifup eth1 # ADSL MODEM がつながっているインターフェースを有効にする。 # ifconfig # 有効になったか調べてみる。 eth0 〜省略〜 eth1 リンク方法:イーサーネット ハードウェアアドレス 00:00:E8:35:EB:DE inetアドレス:1.1.1.1 ブロードキャスト:1.1.1.1 マスク:255.255.255.255 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 衝突(Collisions):625 TXキュー長:100 RX bytes:0 (0.0 Mb) TX bytes:0 (0.0 Mb) 割り込み:11 ベースアドレス:0xe400 lo リンク方法:ローカルループバック inetアドレス:127.0.0.1マスク:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:46301 errors:0 dropped:0 overruns:0 frame:0 TX packets:46301 errors:0 dropped:0 overruns:0 carrier:0 衝突(Collisions):0 TXキュー長:0 RX bytes:2147389 (2.0 Mb) TX bytes:2147389 (2.0 Mb) # ifup ppp0 # ADSL 通信をするためのインターフェース ppp0 を有効にする。 # ifconfig # 有効になったか調べてみる。有効になるまで数分かかることもある。 eth1 リンク方法:イーサーネット ハードウェアアドレス 00:00:E8:35:EB:DE inetアドレス:1.1.1.1 ブロードキャスト:1.1.1.1 マスク:255.255.255.255 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 衝突(Collisions):625 TXキュー長:100 RX bytes:0 (0.0 Mb) TX bytes:0 (0.0 Mb) 割り込み:11 ベースアドレス:0xe400 lo リンク方法:ローカルループバック inetアドレス:127.0.0.1マスク:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:46301 errors:0 dropped:0 overruns:0 frame:0 TX packets:46301 errors:0 dropped:0 overruns:0 carrier:0 衝突(Collisions):0 TXキュー長:0 RX bytes:2147389 (2.0 Mb) TX bytes:2147389 (2.0 Mb) ppp0 リンク方法:Point-to-Pointプロトコル inetアドレス:aaa.bbb.ccc.ddd P-t-P:eee.fff.ggg.hhh マスク:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1454 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 衝突(Collisions):0 TXキュー長:3 RX bytes:0 (0.0 Mb) TX bytes:0 (0.0 Mb) # |
このように、ifconfig コマンドは、有効になっているインターフェースについての情報を表示します。ifup ppp0 してから ppp0 が実際に有効になるまで(ifconfig で表示されるまで)少し時間がかかることもあるので、数分待ってみましょう。
上記のように ppp0 が表示されれば、ADSL 接続は成功しています。ブラウザやMUA(メーラ)がインストールされていて適切に設定されていれば、ブラウザを立ち上げたり、メールをやりとりしたりできる状態になっています。
クライアントとして Linux を動かすのであれば、第 1 章の設定で OK ですが、サーバを動かす場合はいくつか問題があります。
ひとつは、ADSL 接続は時々不意に接続が切れてしまうことがあることです。Linux 側では、常に接続されているかを監視しておき、切断されていたら再接続をする必要があります。固定のグローバル IP アドレスが割り当てられる場合でもこれは必要です。
もうひとつは、DHCP でグローバル IP アドレスを割り当てられる場合に問題となるのですが、ADSL では特に何もしなくても不意に接続が回復する場合があります。また、前記のように接続を監視していてこちらから再接続をして接続を回復する場合もあります。いずれにしても、接続が回復した場合、割り当てられる IP アドレスが前回とは異なるかもしれません。Dynamic Name Service でグローバルなドメイン名を登録している場合は、新しい IP アドレスで登録しなおす必要があります。そうしないと、ユーザは、誰か別のマシンをあなたのマシンだと思ってアクセスしてしまうでしょう。
ここでは、任意のインターフェースに割り当てられている IP アドレスを返すシェル・スクリプト getipaddress.sh(これは pppcontinue.sh から呼び出される)と、接続を維持するためのシェル・スクリプト pppcontinue.sh とを用意し、cron で定期的に実行するようにします。
getipaddress.sh を書きます。これは、pppcontinue.sh 以外にも汎用的に使えますので、使い方も示しておきます。
|
||||
|
getipaddress.sh を実行属性にして(コマンドは chmod +x getipaddress.sh)、/usr/local/sbin ディレクトリ(なければ作ります)にコピーします。
次に、接続を維持するためのシェル・スクリプト pppcontinue.sh を書きます。このスクリプトは /var/local/log にログ・ファイルを出力するので、/var/local/log というディレクトリあらかじめを作成しておく必要があります。また、/var/local/run に、前回接続時の IP アドレスを格納するので /var/local/run ディレクトリもあらかじめ作成しておく必要があります。
|
この pppcontinue.sh も実行属性をつけて /usr/local/sbin にコピーします。
pppcontinue.sh の中で /usr/local/sbin/dyndyn.sh を呼び出しています。この dyndyn.sh は、Dynamic Name Service を提供している dyn.to の DNS を更新するためのスクリプトです。引数 delete は DNS から独自ドメインを削除し、update は DNS に独自ドメインと現在割り当てられている IP アドレスとの組を登録します。この部分は、あなたが使っている Dynamic Name Service の方法で同等の処理をするように書き換えてください。
これは簡単です。/etc/crontab に、Fig. 10 の 1 行を追記するだけです。こうすると、偶数分に pppcontinue.sh が実行されます。
|
このように設定してうまく動けば、DHCP のグローバル IP 接続環境でも、極力安定してサーバを運用することができます。Apache でも qmail でも ProFTPD でも、外部からアクセスするようなサーバを運用してみましょう。
参考文献の検索はこちらが便利です。
次の方々に感謝します。
Debian-JP メーリング・リストでアドバイスをくださった皆さん。
Debian Project、Debian-JP Project、その他のプロジェクトのみなさん。
RP-PPPoE の作者 Roaring Penguin's PPPoE Software のみなさん。
PPP の作者さん。
Linux の作者 Linus Torvalds さん。
$Id: tip0009.html,v 1.11 2004/06/06 14:10:20 shimaden Exp $