homeホームHTMLに役立つヒント> ADSLでMACサーバ

ADSLでMACサーバ

 すでにプロバイダのweb領域でホームページは立ち上がっているし、無理にサーバを立てる必要なんか全然ない。自宅にYBBも来たし、使ってない古いMacintoshは転がっているし、ちょっと実験してみようってだけのことです。

[このページの改定日: 07/10/29 16:24]  あなたはここへ来た、 67565番目の人です。(2001/11/13から)

目次

材料 ▲ページトップ

回線
 Yahoo! BB
 下り3.5Mbpsくらい
 のぼり400〜600bpsくらい

マシン
 PowerBook 5300cs CPUはPowerPC 603e 100MHz
 システム OS7.6 最初、漢字トーク7.5.2でやろうとしたら、まだTCP/IPも入ってないOSだったのね。手持ちのCD-ROMの中でTCP/IPが顔を出すのは7.6からだったので、これを採用。(2003/11/14 OS 8.5以降はAppleScriptがPowerPCネイティブになるというのでOS 8.6にアップした。)
 メモリ 16MB ひええええ。(現在は64MBに増設)

サーバソフトなど
 WEB共有 OS 9に付属してきたもの。ちゃんと動くからビックリ。ただし、同時アクセスは16人まで(だったと思う)。
 MAC perl せめてcgiくらい動かさないと。
 その他拡張機能などもほとんど入ってません。TCP/IPが入っていることが最低条件かな。
 メールサーバもFTPサーバも、telnetサーバもたててないので、クラッキングもスパムの踏み台にもされないでしょう。

 何しろマシン性能が低い。おまけにこれをサーバにすると上り下りのスピードが逆になるわけだから、リクエストがあっても最大400bps程度のスピードしかでない。かなり非力なサーバになるだろうな、という予想は簡単につく。
 実用的なCGIも無理かもしれない。せいぜいホームページくらいだろう。ファイルを置きたければiDiskを使った方がよほどましである。

TCP/IPの設定 ▲ページトップ

 まずはこのマシンのローカルIPを固定してやります。コントロールパネルから「TCP/IP」を開いて、図のように設定します。あ、ちなみに図のローカルアドレス(192.168.1.12)では設定してません。

 ローカルIPアドレスは、お約束として「10.x.x.x」「172.16.x.x〜172.31.x.x」「192.168.x.x」の3つの領域があります。ここでは「192.168.X.X」を採用しています。Xには0〜255の範囲で好きな数字を割り振ります。

追記:運用していてわかりましたが、「ネームサーバアドレス」には上位のDNSサーバのIPアドレスを入力した方が無難です。うちの場合はYahoo BBの回線なのでYahoo BBのDNSサーバアドレスを入力しています。これをやらないと名前解決にやたらと時間がかかるみたいで、実用的なスピードで動きません。

TCP/IPの設定

一口メモ:
ローカルIPアドレスと
グローバルIPアドレス

 IPアドレスはコンピュータの居場所を示すものです。これにはローカルIPアドレスとグローバルIPアドレスがあります。

 ローカルIPアドレスはそのコンピュータが「LAN内のどこにあるか」を示すものです。これに対し、グローバルIPアドレスは、そのコンピュータ(またはLAN)が「世界中のどこにあるか」を示すものです。

 ルータによっては「LAN側のIPアドレス」「WAN側のIPアドレス」などという表記のものがあります。

web共有WEB共有 ▲ページトップ

 web共有については「MACでperl」を参照してもらえばよいでしょう。TCP/IPを設定したら後はweb共有を開始するだけですから。これでMACはサーバになりました。


サーバを公開する ▲ページトップ

 次はこれを公開するための手続きに移ります。ルータをかましているので、1.ルータの設定をいじってweb側からの要求を通すようにすること、2.DNSを設定することの2つです。

 このうち2番はダイナミックDNS(後述)を使って行うことにします。


ルータの設定 ▲ページトップ

 で、一つ目、webの要求を通す(サーバにするコンピュータに要求を渡してやる)ようにしてあげます。ってわけでルータで(ルータの詳細は「MACでADSL」参照)このマシンをバーチャルサーバに指定してやります。

アドバンスド設定 / バーチャル・サーバーの設定 / 追加

バーチャル・サーバー
グローバルPort (0~9600)
ローカルIP 192.168.1.
ローカルPort (0~65535)
サービス・タイプ
備考

 普通、ブラウザは80番ポートを使ってHTTPデータのやりとりをします。予って、インターネットから80番ポートを通じてアクセスがあったら、それをサーバマシンの80番ポート番に渡してやります。

 Yahoo! BBはウイルス対策のために80ポートを閉じていて、HTTPは8080ポートを使用するようにといっているので(現在はこの制限はなくなった。後述)、8080ポートをサーバの80ポートに流すように設定します(後日、ルータのファームウエアを1.21にアップしたところ、ポート変換機能がなくなってしまったため、送られてきたポート8080で受けなくてはならなくなった。そのため、現在はweb共有側でも受取ポートを8080に設定している)。

 別のポートで受けたければ、web共有の設定で、対応したポート番号を使うように設定するといいでしょう。web共有の初期設定に「オプション」タグがあり、その中に「共有ポート」という設定があります。

 実はバーチャルサーバーにできるマシンは1つだけではないです。設定は複数作れるんですね。
 ですから、上のように一つを8080番ポートから80番ポートでローカルIPxxxに流してやって、別の設定を追加して、例えば3000番ポートでうけて80番ポートに流すといった設定が可能です。もちろんローカルIPは192.168.1.100など別のマシンに流してやるわけです。こうすると複数のマシンをサーバにできます。
 テストしたところ、8080番ポートをPowerBook 5300に、19番ポートをPowerBook G3に流すということが可能でした。

 ローカルIPは前項で設定した「192.168.1.X」を指定します。これでインターネット側から8080ポートで要求があった場合、その要求を「192.168.1.X」のIPアドレスのマシン(サーバ)の80番ポートに渡すようになります。

ダイナミックDNS ▲ページトップ

 次の設定はDNSです。

 インターネットでサーバにアクセスする時、実は「210.132.xxx.xxx」のような数字(グローバルIPアドレス)にアクセスしています。表向きは「http://zzzz.com/」なんてURLにアクセスしていることになってますが。
 「URL→グローバルIPアドレス」の変換をするサーバ(DNSサーバという)がインターネットにはあって、ブラウザはDNSサーバに「このURLってほんとはどのIPアドレスなの?」と聞きに行きます。
 フツー、グローバルIPアドレスは固定IPですから、変更されません。URLとIPアドレスは1対1で対応しているわけです。

ブラウザ・URLでリクエスト DNSサーバがIPアドレスに変換 webサーバにたどり着く。
例:zzzz.comにいきたい。 zzzz.comのIPは111.222.333.444だよと返事が返る。
このIPアドレスは通常固定。zzzz.com=111.222.333.444
111.222.333.444へアクセスする。

 ところがADSLで接続されているマシンは、(固定IPサービスを利用していなければ)動的にADSL業者から割り振られたIPアドレスなわけです。言い換えると、IPアドレスは固定されていなくて、接続のたびにIPアドレスが変わるんです。

 上の図のように、URLとIPアドレスが1対1で対応していることを前提としたDNSサーバでは、このようにころころIPアドレスが変わると対応できません。

 そこで登場するのがダイナミックDNS(DDNS)。URLと動的IPアドレスを変換してくれるサービスで、有償・無償のものがあります。DDNSの動きはこんな感じです。

ブラウザ・URLでリクエスト ダイナミックDNSサーバがIPアドレスに変換 webサーバにたどり着く。
↑IPアドレスが変わったら教えてやる。

 のところがミソ。webサーバにしているマシン(自宅サーバ)から、ダイナミックDNS側に「今のIPアドレスはこれこれだよ」と教えてやるわけです。IPアドレスが変更されたら、そのつどダイナミックDNSに登録し直しに行くのが理想的です。
 それができないときは、一定時間毎に定期的に登録し直すことになります。

 なお、このとき登録できるドメインは、サブドメインになります。サブドメインの意味がわからなくても登録はできますから、わかんなくても気にしないよーに。利用者側のものすごくおおざっぱな感覚でいうと、ドメイン名が自分の好きなものを使えない、といったところです(自分の好きなドメイン名を使いたいなら、グローバルIPアドレスを取得する必要があります)。

 ダイナミックDNSを無償で提供しているところはいろいろありますから、探してみてください(例:「ダイナミックDNS 無料 登録」をキーにgoogleで探す)。「リンク/ADSL」にもちょっとだけリストしてあります。これらの中からサービスを選び、登録しましょう。
 登録がすんだら、DDNSにIPアドレスを自動登録する仕組みを作ります。

MACの自動登録クライアント ▲ページトップ

 さて、ダイナミックDNS(DDNS)には自動登録の仕組みが必要だと言いました。実はまっとうに自動登録の仕組みを作ろうと思うと、2つのことが必要になります。

1. 現在のIPアドレスを取得してDDNSに登録しに行くスクリプトをperlあたりで作る。
2. それを一定時間毎に実行する。

 1.はperlで書くのがいいでしょう。ダイナミックDNSの登録画面はフォームで入力するのが一般的なので、perlで合致するフォームを送信してやるのが簡単なんです。

 AppleScriptでも同様のことは可能です。(用途は違うのでそのままでは使えませんが、msearchという全文検索ソフトのインデックス作成作業をAppleScriptで行うスクリプトを作りました。AppleScriptとブラウザでフォームを送信するスクリプトになっていますので、雛形にできるでしょう。こちらにあります。)

2003/2/14追記

 AppleScriptで各種DDNSサービスの登録更新をしてくれるクライアントを配布しているところを見つけました。MACな人はここからDDNSサービスを探すのもいいんじゃないでしょうか。現在12のDDNSがラインナップされていて、そのうちクライアントの配布は4つです。これから増やしていく予定なんでしょう。期待大ですね。

DynamicDNS with AppleScript 

 2.はOS XかMAC OSかでちょっと違ってきます。OS Xならcronを使えば簡単です。MAC OSならcron系アプリを使うか、アップルスクリプトで実現できます。
 OS Xでもアップルスクリプトは使えますが、安定度を考えるとcronがいいでしょう。


 もう一つ、この仕組みを作る手があります。専用のアプリケーションを使うんです。
 専用の自動登録アプリを使うと、1.も2.も勝手にアプリがやってくれるんです。ラクチンラクチン。

 が、しかし、ダイナミックDNSを提供してくれているホームページによって、入力項目などが違っていますから、全部のサービスにひとつの自動登録アプリでは対応できません。DDNSによって登録スクリプトを作り変えなくてはいけないということです。

 中には登録スクリプトや登録アプリケーション(クライアントアプリ)を配布してくれている親切なDDNSもあります。

 そこで、逆にMAC用の自動登録アプリを配布しているDynamic DNSサービスを探してみました。「リンク/ADSL」にちょっと載せてあります。

 残念ながら日本語のサービスはないようです。

 で、MAC用のクライアントアプリ(自動登録アプリ)を配布しているno-ip.comというところで登録。クライアントアプリ(Classic MAC OS版のアプリもOS X版のアプリもあります)もダウンロードしてインストール。クライアントの設定は拍子抜けするほど簡単です。

 プレファレンスを表示させ、下の赤枠で囲った部分、User IDとPasswordを入力します。Verify everyで何分おきにチェックするか設定します。設定はこれだけ。

クライアントのプレファレンス

 動作画面はこんな感じ。「Check For IP Canges」にチェックを入れておくと、登録前にIPが変わっているかチェックして、変わっていたら登録にいくようになる、と思っているんですけど、本当かな〜。自信なし。

動作画面

自動的に時間を合わせる ▲ページトップ

 サーバですから、時刻は正確に設定しておかないといけないっす。例えばCGIで掲示板を立てたりとか、MAILサーバを立てたりしたとき、実時刻と30分もずれていたらユーザーは混乱してしまいます。

 ところが、MAC OS 7.6のコントロールパネル「日付」には、自動的にネットワークサーバで時間を合わせる機能がまだ付いていないOSなんですね。

 代わりにフリーソフトで「VremyaVremya」というのがあります。僕が使っているのはver2.1です。http://www.lava.net/~kirill/software/vremya.htmlからダウンロードできます。(OS 8.6にアップして以降、コンパネの「日付 & 時刻」の機能を使って時刻あわせをしているため、Vremyaは使っていません。)

セッティング

 セッティングは上図のとおり。「time.saia.apple.com」というのはアップルの時間合わせサーバ(ntpサーバというらしいです)です。OS 9の「日付 & 時刻」でもここを参照しています。

 ただし、コントロールパネルの「日付 & 時刻」で「時間帯の設定」を日本に合わせておかないと日本時間に合いません。ご注意。

 「起動項目」に入れておくといいでしょう。

サーバ完成 ▲ページトップ

 と、ここまででサーバは完成。http://mizusawa.no-ip.info:8080/にアクセスすると見られます(落ちていたらごめんね)。8080ポートを指定してあげないといけないのがかっこ悪いですね(^_^) これはYahoo! BBが80番ポートを開放してくれないとどうしようもないです。

 あ、ブラウザはフツー80番ポートを使ってHTTPの要求を出します。別のポートを使って、というか、ポートを指定して読みに行くときに「:8080」などとポート番号を指定するんです。で、Yahoo! BBはウイルス対策のために80番ポートを解放していないんです。

2003/11/18 現在は80番ポートも開けているそうです。

http://bb.softbankbb.co.jp/support/search.php?mode=Show&DB=faq&code=155

 せっかくサーバがたったのに、問題はコンテンツがひとつもないことで…。そのうち掲示板でも入れましょうかねぇ。しかしまともなスピードで動くかな?


LAN内からのアクセス ▲ページトップ

 同じLAN内からアクセスする場合は、このままではサーバマシンに設定してあるローカルIPアドレスにアクセスしないと見られません。例:「http://192.168.1.12/」

 LAN内からサーバにアクセスする方法は、ローカルIPアドレスにアクセスする他に次のような方法があります。

 一つ目は内向きにはDNSサーバを立てること。これ、勉強不足でよく判んないです。LAN内に複数のクライアントマシンがあるなら、DNSサーバを立てればクライアントマシンの設定は不要なはずなので、この方法がいいと思います。んが、DNSサーバをどう立てればよいのかもわかんないのでパス。

 二つ目は公開プロキシサーバを使う方法です。これはブラウザごとにプロキシサーバを指定する方法です。いったんLANの外にでていってからプロキシサーバを経由してサーバにアクセスしますので、サーバが外からどう見えるかチェックしたいときにはこの方法が便利です。ちゃんと外からアクセスできるかどうか、ルータの設定を変えたときなどはこの方法で確認するとよいでしょう。「プロクシに関する小技と話題」あたりを参照してください。

 三つ目はHostsファイルを使う方法です。マシンごとに「このドメイン名にアクセスするときは、DNSサーバに聞きにいかずにxxxxxにアクセスしなさい」という記述ができます。LAN内からアクセスしますので、外からサーバがどう見えるかはわかりませんし、クライアントマシン1台ずつ設定しなくてはいけません。が、僕のように台数が少ないときには手軽で便利な方法です。

 ここでは旧MAC OSのクライアントマシンの設定方法を書きます。

1. Hostsファイル作成

 TeachTextでもJeditでもいいですが、テキストエディタを用意します(ワープロなどはダメですよ)。新規書類を作成して、次のように1行記述します。

domain_a A xxx.xxx.xxx.xxx

 「domain_a」というドメイン名でアクセスされたらIPアドレス「xxx.xxx.xxx.xxx」にアクセスしなさいということです。

 実際にはこんな感じです。

mizusawa.no-ip.info A 192.168.1.1

 この設定だと、「http://mizusawa.no-ip.info/」にアクセスすると、ローカルIPアドレス「192.168.1.1」にアクセスするわけです。「192.168.1.1」の部分はサーバマシンに設定したローカルIPアドレスです。

 なお、さらにドメイン名に別名があるなら次のように書くと、ドメイン名の変換もできます。

mizusawa.no-ip.info A 192.168.1.1
myserver.com CNAME mizusawa.no-ip.info

 「CNAME」がCNAMEの前のドメイン名を、後のドメイン名に変換します。「myserver.com」にアクセスすると「mizusawa.no-ip.info」→「192.168.1.1」とアクセスするようになります。

 さて、このファイルを「システムフォルダ > 初期設定」の中に「Hosts」という名前で保存します。

2. Hostsファイルの指定

 TCP/IPを立ち上げます。右上に「Hostsファイルの選択」というボタンがありますので、これをクリックして、今作ったHostsファイルを指定しして、TCP/IPを終了します(変更を保存するかどうかきかれますのでOKして保存してください)。

 ブラウザから「http://domain_a/」にアクセスしてみてください。バッチリLAN内のサーバにアクセスできるようになっていると思います。

3. OS Xの場合

 すみません。まだよくわかりません。NetInfo Managerで行うらしいです。「Mac Magazine X」さんの「/etc/hostsファイルの代わりに・・・」に書かれている方法を応用すればよいのだと思います。おっと、「Web Scripter's Meeting」さんの「MacOS10でHostファイルの指定って」にも情報がありました。

2004/7/12追記

 上記の方法は10.2以前のもののようです。Panther(10.3.4)では次の手順で成功しました。

1. アプリケーション/Utilities/Directory Access
 を立ち上げて「BSDフラットファイルおよびNIS」にチェックを入れる。これでetc/以下の設定ファイルを読み込むようになります。鍵をクリックして管理者パスワードを入力しないと変更できないので注意。

2. Terminalで操作する。

cd /etc
sudo vi hosts

 でviエディタでhostsファイルを直接編集する。「ipアドレス ホスト名」を追記すればよい。viエディタの簡易マニュアルはこちら

192.168.1.1 mizusawa.no-ip.info

 なんて感じ。

 てーことで「ADSLでMACサーバ・実験室」に続く。


●おまけ

 ついでにサーバ関係TOOLのメモ。


homeホームHTMLに役立つヒント> ADSLでMACサーバ