多用途プロトコル中継ソフト delegated のインストールについてです。 馬場研究室のネットワークでは surf(Linux マシンです) がゲートウェイの役割をしており、 内部では private address を用いています。 http と ftp の中継をこの似非 firewall を越えて行うために、 delegated を入れて surf に代理サーバの役割を兼ねさせることにしました。
delegated は電総研の佐藤 豊さんが開発・保守を行っており、配布元は
ftp://etlport.etl.go.jp/pub/DeleGate/
です。 この文書を書いている時点 ('98/8/21) での最新版は 5.6.5 です。
また delegate を用いた広域分散キャッシュサーバプロジェクトに関する情報が RINGER サーバについて のページにありますので、こちらもぜひ見ておきましょう。
基本的にはパッケージ中の README ファイルを読めばすべて書いてあります。 5.6.5 の場合は以下のようになりました。
ソースを展開する。
tar zxf delegated5.3.1.tar.gz cd delegated5.3.1
README をよく読む。
src/Makefile を開き、MANAGER = の行に管理者のメールアドレスを
MANAGER = master@yourhost.yourdomain
のように記述しておく。 あるいは delegated5.3.1 ディレクトリに DELEGATE_CONF というファイルを作り、 上の一行を書いておいても OK です。 改版の追っかけをする場合は、このファイルをどこかに置いておき、 make の度ごとにコピーして使いまわすと良いでしょう。
make します。 この際 src ディレクトリに移動する必要はありません。 なお path にカレントディレクトリ . が入っていないと、 make ファイルを自動生成する際にエラーが生じることがあるので注意。 その場合は
make PATH=.:$PATH
のように実行します。
src/delegated を適当なディレクトリにコピーする。 /usr/sbin などが良いでしょう。
まず delegated を実行する権限を持ったユーザを作ります。 例えば以下のような行をそれぞれのファイルに追加すれば良いでしょう。
===== in /etc/passwd ===== delegate:*:10001:10001:delegate daemon:/var/spool/delegate: ===== in /etc/group ===== delegate:*:10001:
ログやキャッシュのためのディレクトリを作ります。 例えば以下のようになるでしょう(もちろん root 権限で)。
mkdir /var/spool/delegate mkdir /var/spool/delegate/cache chown -R delegate.delegate /var/spool/delegate chmod -R 755 /var/spool/delegate
delegate/cache ディレクトリが無ければキャッシュファイルを作らなくなります。
起動スクリプトを用意します。例えば(「例えば」ばっかりですが(^_^;) Slackware なホストなら /etc/rc.d/rc.local に以下のような内容を追加します。
起動オプションのそれぞれについては、 配布ソースの doc/Manual.txt を grep してください。 -P で指定したのが使われるポートになります。 private network にあるマシンからはこのポートを利用します。
if [ -f /usr/sbin/delegated ] then echo "Starting delegated http proxy" /usr/sbin/delegated -P8080 -vt \ SERVER=http://-/-/ \ MASTER="ringer.etl.go.jp:80:!*.local.domain" \ MASTERP="" \ ACTDIR="/var/spool/delegate/active" \ LOGFILE='${PORT}[date+.%d]' \ OWNER=delegate/delegate \ EXPIRE=1d \ PERMIT="ftp,http,wais,gopher:*:*.local.domain" \ CRON="5 5 * * * -expire 1" \ > /var/spool/delegate/log/opening.msg 2>&1 fi
surf は firewall 越えをしなくてよい IP reachable なマシンなので、 ringer.etl.go.jp のマシンを親 GENERALIST に使った http SPECIALIST delegate のみを立ち上げています。
代わりにこんなふうに GENERALIST を一緒に立ち上げるほうが 好みの方もいらっしゃるかもしれません。
if [ -f /usr/sbin/delegated ] then echo "Starting delegated generalist" /usr/sbin/delegated -P8000 -vt MASTER="ringer.etl.go.jp:80:!*.local.domain" \ ACTDIR="/var/spool/delegate/active" \ LOGFILE='${PORT}[date+.%d]' \ OWNER=delegate/delegate \ PERMIT="*:*:localhost" \ EXPIRE=1d \ CRON="5 5 * * * -expire 1" \ >> /var/spool/delegate/log/opening.msg 2>&1 echo "Starting delegated http proxy" /usr/sbin/delegated -P8080 -vt \ SERVER=http://-/-/ \ MASTER="localhost:8000:*" \ ACTDIR="/var/spool/delegate/active" \ LOGFILE='${PORT}[date+.%d]' \ OWNER=delegate/delegate \ PERMIT="ftp,http,wais,gopher:*:*.local.domain" \ >> /var/spool/delegate/log/opening.msg 2>&1 fi
壁がある方は GENERALIST だけを壁で動かすのも手でしょう。 最近では本体に古いキャッシュの定期削除機能 (CRON) が付いたので、管理が とても楽になりました(^_^)。
ftp の proxy です。 ほとんど http と同じですね。 手元に GENERALIST がある場合は MASTER の行を変更して下さい。
if [ -f /usr/sbin/delegated ] then echo "Starting delegated ftp proxy" /usr/sbin/delegated -P8021 -vt \ SERVER=ftp://-/ \ ACTDIR="/var/spool/delegate/active" \ MASTER="ringer.etl.go.jp:80:!*.ac.jp" \ LOGFILE='${PORT}[date+.%d]' \ OWNER=delegate/delegate \ EXPIRE=1d \ PERMIT="ftp:*:*.local.domain" \ CRON="5 5 * * * -expire 1" \ > /var/spool/delegate/log/opening.msg 2>&1 fi
この proxy を経由して ftp を使うときは、
ftp surf 8021
のようにして入り、 ユーザ名に user@access.host のようにホストを付加したものを指定します。
telnet の proxy です。
if [ -f /usr/sbin/delegated ] then echo "Starting delegated telnet proxy" /usr/sbin/delegated -P8023 -vt \ SERVER=telnet://-/ \ ACTDIR="/var/spool/delegate/active" \ LOGFILE='${PORT}[date+.%d]' \ OWNER=delegate/delegate \ PERMIT="telnet:*:*.local.domain" \ > /var/spool/delegate/log/opening.msg 2>&1 fi
ftp の場合と似ていますが、
telnet surf 8023
のようにして入り、
Host name:
と言うプロンプトに対してホスト名を入力します。 あとは通常の telnet 接続と同じ。
delegate のログは、上記のように LOGFILE パラメータで日付ごと、 曜日ごとなどに取ることができますが、同名のファイルがあると append するため、そのままではログファイルは際限なく大きくなってしまいます。
これを避ける便法は、ログを一日毎に gzip などでパックしてしまうことです。 こうするとログファイルの名前に .gz がつきますので、新しいログは 別ファイルになってくれますし、 gzip -f を使えば新しいログファイルで古いログファイルを上書きできます。
例えば以下のようなスクリプトを cron で日付変更時に走らせれば いいでしょう。ただし date は GNU sh-utils のものです。
#!/bin/sh LOGDIR=/var/spool/delegate/log DATE=`date --date "1 days ago" +%d` for PORT in 8000 8021 8023 8080 8081 do LOG=${LOGDIR}/${PORT}.${DATE} if [ -f $LOG ]; then gzip -f -9 $LOG fi done rm -f 0.$DATE