CGI, portfowarding
CGI, ポートフォワーディング

出席調査

出席確認として学生証を教室後ろの入り口近くの出席用PCのリーダにタッチせよ. 出席していない回の実験レポートは提出を認めず,0点として計算されるので 注意すること.

初期設定

システム設定→ ネットワーク→ 有線→ オプション→ IPv4設定で,「方式」を「自動」にして授業ページを読める状態にせよ.

実習A 簡単なCGIプログラム 

:全員が個人で実施

個人の public_html/cgi-bin ディレクトリ以下のファイル にCGI実行の許可を与える.

まず public_html 直下に cgi-bin ディレクトリを作成せよ(mkdir).

次に /etc/apache2/mods-available/userdir.conf ファイルを編集する.このファイルを管理者権限でエディタで開き,

        </Directory>
</IfModule>

という2行を探し,この2行の間に以下の行を挿入せよ.

        <Directory /home/*/public_html/cgi-bin>
                Options +ExecCGI
                AddHandler cgi-script .cgi .pl
        </Directory>

設定が済んだら保存する.

sudo a2enmod cgi を実行せよ(Apache2でCGIモジュールを有効にする).

sudo service apache2 restart でサーバを再起動せよ.

下記のプログラムを ~/public_html/cgi-bin/first.cgi として作成せよ.

#!/usr/bin/perl -w

print <<'Section1';
Content-type: text/html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<title>my first CGI</title>
</head>
<body>
<h1>Hello world!</h1>
<p>This is my first CGI page.</p>

</body>
</html>
Section1

cgi-bin ディレクトリで ls -l first.cgi コマンドを実行し,アクセス権が -rwxr-xr-x となっていることを確認し,コマンドラインから実行せよ. 異なっている場合は chmod 755 first.cgi コマンドを実行し,正しく設定せ よ.

ブラウザから
http://自分の端末のIPアドレス/~自分のユーザ名/cgi-bin/first.cgi
としてアクセスしてみよ.

次に This is my first CGI page. の代りに date コマンドの結果を表示する CGI プログラムを作成する.

ここでは <p>This is my first CGI page.</p> を出力する部分, その前を出力する部分,後ろを出力する部分に分割する方針で作成する. This is my first CGI page. を出力するプログラムを以下のように書き変え よ.

#!/usr/bin/perl -w

print <<'Section1';
Content-type: text/html


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<title>my first CGI</title>
</head>
<body>
<h1>Hello world!</h1>

Section1

print "<p>";
print "This is my first CGI page.";
print "</p>\n";

print <<'Section2';
</body>
</html>
Section2

一般の perl プログラムでできる処理を 行うことができる. print "This is my first CGI page."; の部分を print `date`; に変更することで目的のプログラムを作成できる.

実習B ネットワーク構築の復習とWebサーバ(CGI)構築演習

:グループで仲良く実施

個人あるいはクラブ・サークルや研究室等の団体のWebサイトの構築にあたって、情報共有のための掲示板、チャットルームが設置ができると便利である。 これらの設置は自身でPerl言語を用いてCGIプログラムを作成し設置することで実現できる。

この他にも、インターネット上では無料で使用できるCGIプログラムが多く提供されており、これらを利用することでも設置ができる。

ただし、利用の際は利用規約(著作権等)について理解しておくこと。

本演習では、研究室内などに設置したサーバ上に、チャットルームを開設することを想定し、ネットワーク構築とサンプルのCGIプログラムの設置について演習を行う。

実習B-1 ネットワーク構築

各班 1 から 4 号機の今回の実験での役割とIPアドレス,サブネットマスク, デフォルトルート(ゲートウェイ),DNSサーバは以下の通りとする. これに従って設定せよ.

ネットワーク構成図

図11.B.1 ネットワーク図

1号機(NAT外ホスト) :インターネット上に存在するよそのホストと捉えよ

IPアドレス/サブネットマスク デフォルトルート DNS サーバ
1 班 172.17.2.1/16 172.17.254.254 172.17.254.254
2 班 172.17.2.29/16 172.17.254.254 172.17.254.254
3 班 172.17.2.2/16 172.17.254.254 172.17.254.254
4 班 172.17.2.30/16 172.17.254.254 172.17.254.254
5 班 172.17.2.3/16 172.17.254.254 172.17.254.254
6 班 172.17.2.31/16 172.17.254.254 172.17.254.254
7 班 172.17.2.4/16 172.17.254.254 172.17.254.254
8 班 172.17.2.32/16 172.17.254.254 172.17.254.254
9 班 172.17.2.5/16 172.17.254.254 172.17.254.254
10 班 172.17.2.33/16 172.17.254.254 172.17.254.254
11 班 172.17.2.6/16 172.17.254.254 172.17.254.254
12 班 172.17.2.34/16 172.17.254.254 172.17.254.254
13 班 172.17.2.7/16 172.17.254.254 172.17.254.254
14 班 172.17.2.35/16 172.17.254.254 172.17.254.254

2号機(NATルータ):前週と同様

2 号機には USB LAN を接続し,班のスイッチングハブに 班のケーブルで接続する.IP アドレス他の設定は 以下の通りとする.2 号機には 2 個の有線 ネットワークデバイスがあるが,MAC アドレスが d8:d3:85 で始まるものが内蔵 LAN ポート,00:24:a5 で始まるものが USB LAN ポートである.

内蔵 LAN
IPアドレス/サブネットマスク
内蔵 LAN
デフォルトルート
内蔵 LAN
DNS サーバ
USB LAN
IPアドレス/サブネットマスク
1 班 172.17.2.8/16 172.17.254.254 172.17.254.254 192.168.1.1/24
2 班 172.17.2.36/16 172.17.254.254 172.17.254.254 192.168.1.1/24
3 班 172.17.2.9/16 172.17.254.254 172.17.254.254 192.168.1.1/24
4 班 172.17.2.37/16 172.17.254.254 172.17.254.254 192.168.1.1/24
5 班 172.17.2.10/16 172.17.254.254 172.17.254.254 192.168.1.1/24
6 班 172.17.2.38/16 172.17.254.254 172.17.254.254 192.168.1.1/24
7 班 172.17.2.11/16 172.17.254.254 172.17.254.254 192.168.1.1/24
8 班 172.17.2.39/16 172.17.254.254 172.17.254.254 192.168.1.1/24
9 班 172.17.2.12/16 172.17.254.254 172.17.254.254 192.168.1.1/24
10 班 172.17.2.40/16 172.17.254.254 172.17.254.254 192.168.1.1/24
11 班 172.17.2.13/16 172.17.254.254 172.17.254.254 192.168.1.1/24
12 班 172.17.2.41/16 172.17.254.254 172.17.254.254 192.168.1.1/24
13 班 172.17.2.14/16 172.17.254.254 172.17.254.254 192.168.1.1/24
14 班 172.17.2.42/16 172.17.254.254 172.17.254.254 192.168.1.1/24

3号機(NAT内ホスト/Webサーバ)

3号機は班のケーブルで班のスイッチングハブと接続する. 設定は全班共通で,以下の通りとする。

IP アドレス/サブネットマスク
192.168.1.3/24
デフォルトルート
192.168.1.1
DNS サーバ
172.17.254.254

4号機(NAT内ホスト)

4号機は班のケーブルで班のスイッチングハブと接続する. 設定は全班共通で,以下の通りとする。

IP アドレス/サブネットマスク
192.168.1.4/24
デフォルトルート
192.168.1.1
DNS サーバ
172.17.254.254

設定が完了すると1号機から 2 号機の外部IPアドレス (内蔵LANに割り当てたIPアドレス) にping が通るはずなので確認せよ.通らない場合は接続,設定を見直せ. 3,4号機からは 2号機の内部IPアドレス(USB LANに割り当てたIPアドレス) にping が通るはずなので確認せよ.通らない場合は 接続,設定を見直せ.

実習B-2 CGI (Common Gateway Interface) プログラムの設置

2号機:Webサーバサービス(Apache2)の停止

本日の実習では2号機のWebサーバのサービスは不要である。2号機において以下のコマンドを実行し、サービスを停止せよ。

% sudo service apache2 stop

3号機: チャットルームプログラム(Windy)の設置 

提供元:KentWeb(http://www.kent-web.com/ )

各班の3号機で以下の手順を実施せよ。

(手順1) 以下ファイルをダウンロードする。

windy.zip

(手順2) ダウンロードしたzipファイルを展開し、以下に示すディレクトリ構造となるように設置せよ(GUI上で作業してかまわない)。尚、[かっこ [ ] 内の数字のとおりパーミッションを設定せよ。

 ~/public_html
 |
 +-- / cgi-bin
      |
      + windy / windy.cgi [775]
          |      init.cgi  [664]
          |      check.cgi [775]
          +-- data / log.cgi [666]
          |          mem.cgi [666]
          +-- tmpl / *.html

(手順3)windy.cgi および check.cgi をテキストエディタで開き、1行目を以下のように修正する。

#!/usr/bin/perl -w

この1行目は(ここでの行頭#はコメントではない)、Perlを実行するためのプログラムが何処に存在するか、を記述する。設置するWebサーバによって書き換える必要がある。間違ったパスを指定するとCGIが動作しない。

(手順4)動作確認のため、3号機自身のブラウザをからチャットプログラムのCGIにアクセスし(http://A.B.C.D/~3号機を操作しているユーザ名/cgi-bin/windy/windy.cgi)、正常に表示されることを確認せよ。

正常に表示された場合、何か入力し投稿ができるかどうかを試せ。表示されない場合、手順2〜3を再度見直すこと。

実習B-3 他ホストからのアクセスの確認

3号機以外のホスト(1号機,2号機,4号機)のブラウザから,Webサーバ(チャットプログラム)にアクセスできるかどうかを確認せよ。

確認の際には、http://3号機にアクセスするためのIPアドレス/~3号機を操作しているユーザ名/cgi-bin/windy/windy.cgi でアクセスする。

実習B-4 iptablesの設定変更

プライベートネットワークに属していない1号機から,3号機のWebサーバ(チャットプログラム)にアクセスできるよう,コマンドによって2号機のiptablesの設定を変更せよ。【レポート課題4, 5】

ポートフォワーディングの設定(任意のTCPポート→任意の転送先IP:ポート番号の場合)

% sudo iptables -t nat -A PREROUTING -p tcp --dport NAPTルータPCのポート番号 -j DNAT --to-destination 転送先PCのIPアドレス:転送先ポート番号

設定後、表示できるかどうかを確認する際、1号機より、
http://3号機にアクセスするためのIPアドレス /~3号機を操作しているユーザ名/cgi-bin/windy/windy.cgi
でアクセスする。また、書き込みができるか試せ。【レポート課題6】

課題

第 10 回課題「CGI,ポートフォワーディング」 を提出せよ.


Updated in December 15, 2014, index.html, Yamamoto Hiroshi