LANDISKを外部に公開するには、外部からのリクエストがLANDISKへ届くように、 ルータを設定する必要があります。
さらには、世界中からユニークな名前でアクセスできるよう、 DynamicDNSサービス等を使用する必要があります。
本章では、その辺のTipsを記したいと思います。

ルーターの設定 Edit

  • 静的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ページ翻訳を使用して自分のページを英語等に翻訳してみます。
      (翻訳サーバは、翻訳用の原文を取得するためにLANDISKをアクセスするはずです。)

    無事、外部からアクセスできることを確認できたでしょうか?
    もし、アクセス制限をかけているディレクトリ等があるならば、ついでに、アクセスできないことを確認しておくと
    より安心でしょう。

Dynamic DNS の登録 Edit

  • 初めに
    私の環境では、プロバイダから割り当てられるIPアドレスは約3日毎に 変化します。
    Dynamic DNSとは、そのような不定期かつ高頻度に変化するIPアドレスとHOST名の対応付けを
    してくれるサービスです。

  • Dynamic DNS 探し
    google等で"無料 Dynamic DNS"等のキーワードで検索すると、
    サービスを提供している業者さんがたくさん見つかると思います。
    私は次のDynamic DNSサービスを使わせていただくことにしました。

  • 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 Edit

  • openssl096のインストール
    wgetをインストールするには、openssl096が必要ですが、debian.dodes.orgにないみたいなので、
    次のように自前でビルドする必要があります。
    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
    
    ビルドができたらなら、インストールを行います。 ( ビルド済みパッケージは、 ここ )
    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の更新ページをアクセスしてみましょう。(各自の環境に合わせてください。)
    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の例) Edit

  • 自動更新スクリプト
    DDNSの自動更新スクリプトを作成して、cronで定期的に実行させます。
    [/root/bin/ddns.sh]という名前で作成。(実行属性をセットすること)
    #!/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に結果が出力されます。
    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を実行しなさい」という意味です。
    # m h dom mon dow user  command
    45  *  *   *   *  root  /root/bin/ddns.sh	
    
  • cronの起動
    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ファイル Edit

  • LAN内からアクセスできない
    LANDISKは、eggplant.ddo.jpという名前で、世界中の何処からでもアクセスできるようになりました。
    しかし残念なことにローカルネットワーク(LAN)内のマシンからは、その名前を使ってアクセスすることができません。

    本問題を解決するために、eggplant.ddo.jpのエイリアスをhostsファイルに記述する方法を紹介します。
    次の記述をLAN内のマシンのhostsファイルに追加してください。
     192.168.0.80 landisk
     192.168.0.80 eggplant.ddo.jp
    # (注:192.169.0.80はLANDISKのローカルアドレスを指定してください。)
    # (注: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 もどき Edit

  • 初めに
    ここでは、固定のURLを持つWEBページ上にLANDISKへの入口ページを作り、IPアドレスが変化する毎に入口ページを自動で書き換える方法を紹介します。
  • Perl環境の整備
    PerlのLWPパッケージをCPANからインストールする。
    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でその入り口ページを更新する処理を
    全自動で行います。
    • $URLFTP
      FTPするファイル名をユーザ名/パスワード/FTPサーバ名を含む URL形式で記述してください。

    • $interval
      入り口ページを自動更新する周期(分)を設定してください。

    • 青文字の部分
      入り口ページになるHTMLファイルの実体です。
      HTML中の$IPADDRの部分がグローバルIPアドレスに置換されます。
    [dummy_ddns.pl]という名前で作成。(実行属性をセットすること)
    #!/usr/bin/perl
    
    use LWP::Simple;
    use LWP::UserAgent; 
    
    #####################################
    $URLFTP='ftp://user_id:passwd@ftp.geocities.co.jp/index.html';
    $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);
    <html>
    <head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=x-euc-jp">
    <meta http-equiv="refresh" content="0;url=http://$IPADDR/www/">
    <meta name="robots" content="noindex,nofollow">
    </head>
    <body></body>
    </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;
    }
    
  • 実行
    バックグラウンドプロセスとして実行するので、必ず"&"をつけて実行してください。
    landisk:/# dummy_ddns.pl & 
    
    ログを/var/log/dummy_ddns.logに出力しますので必要に応じてチェックしてください。

  • 停止
    landisk:/# killall dummy_ddns.pl


Counter: 3011, today: 1, yesterday: 0

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-06-13 (火) 20:02:26 (6534d)