LANDISKを外部に公開するには、外部からのリクエストがLANDISKへ届くように、
ルータを設定する必要があります。~
さらには、世界中からユニークな名前でアクセスできるよう、
DynamicDNSサービス等を使用する必要があります。~
本章では、その辺のTipsを記したいと思います。~
~
*ルーターの設定 [#v2cb3991]
-''静的IPマスカレード設定''~
インターネットとLANDISKを接続するADSLモデムにパケットの通り道を設けて、~
インターネット上からLANDISKをアクセスできるようにしなければなりません。~
私のADSLモデム(ルーター)では、「静的(スタティック)IPマスカレイド」という~
機能を使用し、それを実現します。~
ルーターによっては「IPフォワーディング」や「アドレス変換」と表記された物もありますので、~
マニュアル等を参考に設定してください。~
~
さて、具体的な設定ですが、WEBサーバが通信に使うポートは通常80番ポートと決まっています。~
したがって、80番ポートに送信されたパケットは、何であれ、とにかく強制的にLANDISKのローカル~
アドレスへ転送するよう設定を行います。設定が終わったら外部から接続実験を行います。~
~
-''外部からの接続実験''~
--まず/share/www/内にindex.htmlファイルを用意してください。~
(私のページを「名前をつけて保存する」等して適当に準備してください。)~
~
--次に自分のグローバルアドレスを調べましょう。~
http://ipdetect.dnspark.com/ ← ここをクリックすると表示されるはずです。~
~
--「http://グローバルアドレス/www/index.html」と、ブラウザで自分自身をアクセスしてください。~
大抵の場合エラーが出てうまくいかないと思います。これはルーターが自分自身のアドレスを~
インターネットの外に探しにいったためです。~
~
--発想をかえて、外部のコンピュータにLANDISKのアドレスをアクセスさせてみましょう。~
携帯電話のi-modeを使ってアクセスしてみても良いですが、もっと簡単な方法があります。~
[[exciteのWebページ翻訳:http://www.excite.co.jp/world/english/web/]]を使用して自分のページを英語等に翻訳してみます。~
(翻訳サーバは、翻訳用の原文を取得するためにLANDISKをアクセスするはずです。)~
~
-
無事、外部からアクセスできることを確認できたでしょうか?~
もし、アクセス制限をかけているディレクトリ等があるならば、ついでに、アクセスできないことを確認しておくと~
より安心でしょう。 ~
~
*Dynamic DNS の登録 [#qd44d329]
-''初めに''~
私の環境では、プロバイダから割り当てられるIPアドレスは約3日毎に
変化します。~
Dynamic DNSとは、そのような不定期かつ高頻度に変化するIPアドレスとHOST名の対応付けを~
してくれるサービスです。~
~
-''Dynamic DNS 探し''~
google等で"無料 Dynamic DNS"等のキーワードで検索すると、~
サービスを提供している業者さんがたくさん見つかると思います。~
私は次のDynamic DNSサービスを使わせていただくことにしました。~
~
--[[Dynamic DO!.jp - ダイナミックDNS:http://ddo.jp/]]
~
ホスト名を"eggplant.ddo.jp"として申請しました。~
(ものの数分で申請は完了しました。)~
~
-''DNSの更新''~
DNSの更新は、通常、DynamicDNSサービス業者が指定する特定ページをアクセスして行います。~
Dynamic DO!.jp の場合は次の様にWEBブラウザでアクセスします。
http://ddo.jp/dnsupdate.php?dn=ドメイン&pw=パスワード
または、ブラウザの代りに wget コマンドを使うこともできます。
wget -O - 'http://ddo.jp/dnsupdate.php?dn=ドメイン&pw=パスワード'
ここでは後者の wget コマンドを用いた例を紹介します。~
そのまえに、肝心要のwgetコマンドをインストールしましょう。~
~
*wget [#kaaa4f94]
-''openssl096のインストール''~
wgetをインストールするには、openssl096が必要ですが、debian.dodes.orgにないみたいなので、~
次のように自前でビルドする必要があります。~
#pre{{
landisk:/# mkdir /home/src/openssl096
landisk:/# cd /home/src/openssl096
landisk:/home/src/openssl096# apt-get build-dep openssl096
landisk:/home/src/openssl096# apt-get -b source openssl096
}}
ビルドができたらなら、インストールを行います。
( ビルド済みパッケージは、
[[ここ:http://eggplant.ddo.jp/www/download/Packages/]] )~
#pre{{
landisk:/home/src/openssl096# dpkg -i libssl0.9.6_0.9.6l-3_sh4.deb
Selecting previously deselected package libssl0.9.6.
(Reading database ... 9370 files and directories currently installed.)
Unpacking libssl0.9.6 (from libssl0.9.6_0.9.6l-3_sh4.deb) ...
Setting up libssl0.9.6 (0.9.6l-3) ...
}}
-''wgetのインストール''~
landisk:/home/src/openssl096# apt-get install wget
-''動作確認''~
wgetコマンドでDDNSの更新ページをアクセスしてみましょう。(各自の環境に合わせてください。)~
#pre{{
landisk:/# wget -q -O - 'http://ddo.jp/dnsupdate.php?dn=ドメイン&pw=パスワード'
<html><body>
<a href="/">Dynamic DO!.jp</a><br>
SUCCESS: eggplant.ddo.jp <= [ 218.230.147.84 ]<br>
IPアドレス更新完了.<br>※IPアドレスに変更がありませんため、パスワードはチェック
しておりません。<br>
}}
*DDNSの自動更新 (*.ddo.jpの例) [#f44de184]
-''自動更新スクリプト''~
DDNSの自動更新スクリプトを作成して、cronで定期的に実行させます。~
[/root/bin/ddns.sh]という名前で作成。(実行属性をセットすること)~
#pre{{
#!/bin/sh
DATE=`date +"%Y/%m/%d %X"`
wget -q -O - 'http://ddo.jp/dnsupdate.php?dn=ドメイン&pw=パスワード' | \
awk '$0 ~ /ddo.jp/ { print date, $0;}' date="$DATE" >> /var/log/ddns.log
}}
-''スクリプトのテスト''~
/var/log/ddns.logに結果が出力されます。~
#pre{{
landisk:~# /root/bin/ddns.sh
landisk:~# cat /var/log/ddns.log
2004/07/11 17:37:19 SUCCESS: eggplant.ddo.jp <= [ 218.230.147.84 ]<br>
}}
-''/etc/crontabの設定''~
「時刻の分の桁が45の時、/root/bin/ddns.shを実行しなさい」という意味です。~
#pre{{
# m h dom mon dow user command
45 * * * * root /root/bin/ddns.sh
}}
-''cronの起動''~
#pre{{
landisk:~# /etc/init.d/cron start
Starting periodic command scheduler: cron.
landisk:~# ps aux | grep cron
root 518 0.0 1.2 2020 764 ? S 14:11 0:00 cron
root 900 0.0 1.2 2220 760 ? S 14:49 0:00 /usr/sbin/cron
root 912 0.0 0.7 1472 460 ttyp1 S 14:50 0:00 grep cron
}}
psコマンドで確認してみると2つのcronプロセスが動作しています。~
前者はLANDISKのオリジナルのcronで、ntpクライアントを起動して時刻の補正を行います。~
後者は先ほどスタートさせたdebianのcronです。~
無理に一つのcronに統合する必要もないので、このまま運用することにします。~
-''cronの停止''~
landisk:~# /etc/init.d/cron stop
必要に応じて、debian_start,debian_stopコマンドに追加すると良いでしょう。
~
~
*hostsファイル [#j86ba250]
-''LAN内からアクセスできない''~
LANDISKは、eggplant.ddo.jpという名前で、世界中の何処からでもアクセスできるようになりました。~
しかし残念なことにローカルネットワーク(LAN)内のマシンからは、その名前を使ってアクセスすることができません。~
//原因はeggplant.ddo.jpがDNSでグローバルアドレスに置換されたからです。
~
本問題を解決するために、eggplant.ddo.jpのエイリアスをhostsファイルに記述する方法を紹介します。~
次の記述をLAN内のマシンのhostsファイルに追加してください。
#pre{{
192.168.0.80 landisk
192.168.0.80 eggplant.ddo.jp
&color(red){# (注:192.169.0.80はLANDISKのローカルアドレスを指定してください。)};
&color(red){# (注:eggplant.ddo.jpはDDNSに登録したLANDISKの名前を指定してください。)};
}}
--Windows XPの場合
C:\WINDOWS\system32\drivers\etc\hosts
--MacOSX 10.3(Panther)の場合
/private/etc/hosts
-
これでLANDISKへLANの内側からアクセスする時も、外側からアクセスする時も、eggplant.ddo.jpという名前で区別なくアクセスできるようになります。~
~
*付録: Dynamic DNS もどき[#jba86596]
-''初めに''~
ここでは、固定のURLを持つWEBページ上にLANDISKへの入口ページを作り、IPアドレスが変化する毎に入口ページを自動で書き換える方法を紹介します。
-''Perl環境の整備''~
PerlのLWPパッケージをCPANからインストールする。
#pre{{
landisk:/# apt-get install gzip lynx ftp psmisc
landisk:/# perl -MCPAN -e shell
(初回設定時のみたくさん質問されますが、適当に答えてください。)
cpan> install Bundle::LWP ←ネットワーク関係のモジュールをインストール
cpan> exit
}}
-''誘導ページ更新スクリプト''~
次のスクリプトは、~
(1)設定した周期で定期的にグローバルIPアドレスを求めて、~
(2)LANDISKへ導く入り口ページを作成して、~
(3)FTPでその入り口ページを更新する処理を~
全自動で行います。~
--&color(red){$URLFTP};~
FTPするファイル名をユーザ名/パスワード/FTPサーバ名を含む URL形式で記述してください。~
~
--&color(red){$interval};~
入り口ページを自動更新する周期(分)を設定してください。~
~
--&color(blue){青文字の部分};~
入り口ページになるHTMLファイルの実体です。~
HTML中の&color(red){$IPADDR};の部分がグローバルIPアドレスに置換されます。~
-
[dummy_ddns.pl]という名前で作成。(実行属性をセットすること)
#pre{{
#!/usr/bin/perl
use LWP::Simple;
use LWP::UserAgent;
#####################################
&color(red){$URLFTP='ftp://user_id:passwd@ftp.geocities.co.jp/index.html';};
&color(red){$interval=30; # munutes};
$URL="http://ipdetect.dnspark.com/";
$logfile="/var/log/dummy_ddns.log";
#####################################
while(1){
######################################
# Get Grobal IP Address
######################################
$IPADDR = get($URL);
$IPADDR =~ s/\n//g;
$IPADDR =~ s/^.*Address: ([0123456789\.]+).*$/$1/;
######################################
# FTP
######################################
$ua = LWP::UserAgent->new;
$req = HTTP::Request->new(PUT => $URLFTP);
$req->content(<<EOT);
&color(blue){<html>};
&color(blue){<head>};
&color(blue){<title></title>};
&color(blue){<meta http-equiv="Content-Type" content="text/html; charset=x-euc-jp">};
&color(blue){<meta http-equiv="refresh" content="0;url=http://$IPADDR/www/">};
&color(blue){<meta name="robots" content="noindex,nofollow">};
&color(blue){</head>};
&color(blue){<body></body>};
&color(blue){</html>};
EOT
$res = $ua->request($req);
$status = $res->status_line;
$base = $res->base;
$base =~ s/^.*@//;
$date = localtime(time);
open(LOGFILE, ">>$logfile");
print LOGFILE "$IPADDR $status $date $base\n";
close LOGFILE;
sleep 60*$interval;
}
}}
-''実行''~
バックグラウンドプロセスとして実行するので、必ず"&"をつけて実行してください。~
#pre{{
landisk:/# dummy_ddns.pl &color(red){&};
}}
ログを/var/log/dummy_ddns.logに出力しますので必要に応じてチェックしてください。~
~
-''停止''~
landisk:/# killall dummy_ddns.pl
~
#counter