http://www.delegate.org/delegate/download/から取得。ちなみに
Copyright (c) 1994-2000 Yutaka Sato <ysato AT etl.go.jp> <y DOT sato AT delegate.org>
Copyright (c) 1994-2000 Electrotechnical Laboratory (ETL), AIST, MITI
Copyright (c) 2001-2008 National Institute of Advanced Industrial Science and Technology (AIST)
AIST-Product-ID: 2000-ETL-198715-01, H14PRO-049, H15PRO-165, H18PRO-443
Permission to use this material for evaluation, copy this material for your own use, and distribute the copies via publicly accessible on-line media, without fee, is hereby granted provided that the above copyright notice and this permission notice appear in all copies. AIST makes no representations about the accuracy or suitability of this material for any purpose. it is provided "as is", without any express or implied warranties. (Manual.htmより引用)
本マテリアルの、評価のための使用 / 自らが使用するための複製 / ・誰もがアクセス可能なオンラインメディアを経由した複製の無料配布は、上記の著作権通知、および、この認可通知を、全ての複製中で、閲覧可能なことを条件として許可します。 AISTは、本マテリアルのあらゆる目的に対する、正確さや、適合性に関する表示をしません。それは、いかなる、明示、または、暗示された保証がともなわないまま、提供されています。(http://i-red.infoより引用)
という使用条件となっている。
OSごとのバイナリパッケージを利用するか、または、
$ tar xvzf delegateX.Y.Z.tar.gz $ cd delegateX.Y.Z $ CFLAGS='-O6' ADMIN='kaw@on.rim.or.jp' make $ sudo install -o root -g wheel -m 0755 src/delegated /usr/local/sbin ↑注)stripしないこと! (理由は後述)
delegatedは、設定ファイルを持たない。指定はすべてコマンドラインから*1。
基本形
delegated -P[host:]port OWNER=user[/group] DGROOT=system-dir parameters [parameters...]
なので、通常はシェルラッパーを作成し、そこにパラメータを書いておいてそれを起動。たとえば、dodg.sh↓
#!/bin/sh exec /usr/local/sbin/delegated ONWER=delegate/delegate DGROOT=/var/spool/delegate "$@"
とかやって
# dodg.sh -P8080 SERVER=http
など。勿論、実行時は
/usr/local/sbin/delegated ONWER=delegate/delegate DGROOT=/var/spool/delegate -P8080 SERVER=http
となる。
停止は-Fkill、再起動には-Fkill-hup
# dodg.sh -P8080 -Fkill
起動・停止をまとめて、こんな感じにしてもOK。 ... rc.delegate↓
#!/bin/sh function dg { /usr/local/sbin/delegated \ ONWER=delegate/delegate \ DGROOT=/var/spool/delegate \ "$@" ; } case X"$1" in Xstart) dg "$@" ;; Xstop) dg -Fkill "$@" ;; Xrestart) dg -Fkill-hup "$@" ;; esac
ログは、DGROOT/log/*に作成される。 ログファイルは、strftime(3)互換の書式準拠で指定可能。自前でログローテートできる。例;
dodg.sh -v -P... SERVER=... LOGDIR='log[date+/aged/%y/%m/%d]'
デバックには、-v オプションを指定。フォアグラウンドで実行、ログもstdoutに。
# delegated -Pport SERVER=proto
普通にHTTPプロキシとして使用。CACHE=yes or CACHE=do でキャッシュ機能が有効になる。
# dodg.sh -P10080 SERVER=http CACHE=do
同様に、FTPプロキシとして使用。
# dodg.sh -P10021 SERVER=ftp
HTTP経由のFTPアクセスではない純粋なFTPプロキシ。FTPクライアントでDeleGate FTPプロキシに接続後、
login: 目的のサーバでのアカウント名@目的のサーバ名 password: 目的のサーバのパスワード
で、プロキシに接続する。あるいは、
login: 目的のサーバのアカウント名 password: 目的のサーバのパスワード
で、DeleGate FTPプロキシにlogin後、
cd //desthost
で目的のサーバdesthostに接続できる。
DeleGateは、多段接続して使用可能。
その際、DeleGate間同士の通信に「DeleGateプロトコル」を使用すると、
中継可能なプロトコルをDeleGateプロトコルでwrap(というかtunnel)して
中継できる。
→複数のプロトコルを中継するのに、一本の伝送路を用意すればよい。
使用例;
proxy-1 # dodg.sh -P10021 SERVER=ftp MASTER=localfw-addr:20000 proxy-2 # dodg.sh -P10080 SERVER=http MASTER=localfw-addr:20000 local-fw # dodg.sh -Plocalfw-addr:20000 SERVER=delegate MASTER=127.0.0.1:20001 local-fw # ssh -L 20001:127.0.0.1:20002 remote-fw ... remote-fw # dodg.sh -P127.0.0.1:20002 SERVER=delegate
個々のプロトコルをクライアントから受け付けるDeleGateプロセスをSpecialist、 Specialistからの通信をDeleGateプロトコルにより一括して受け付けるDeleGateプロセスをGeneralistと呼ぶ。
複数のプロトコルを受け付けたい場合、個々にプロセスを起動してもいいが、INETDパラメータで 一個のプロセスで複数のポート(=プロトコル)を待ちうけできる。
# dodg.sh INETD="50080 - - - - - SERVER=http MASTER=127.0.0.1:50000 RES_AF=64" \ IPv6→IPv4の順で名前解決 INETD="_:40080 - - - - - SERVER=http" \ IPv6のポート40080で待ち受け INETD="2401 - - - - - SERVER=tcprelay://anoncvs.jp.openbsd.org:2401"
中継するURLをDeleGate上で書き換えることにより、URLを変換する。
# dodg.sh -P80 SERVER=http \ MOUNT="/c1/* http://www1.localnet/*" \ MOUNT="/c2/* http://www2.localnet/*"
上記の例では、プロキシ上でウェブサーバが動作しており、 そのサブディレクトリ/c1、/c2配下にそれぞれwww1, www2のコンテンツがあるように見える。
$ w3m http://proxyhost/c1/index.html $ w3m http://proxyhost/c2/bbs.cgi
単一のサーバをプロキシ上で見せたいのであれば、MOUNTを使用せず、
# dodg.sh -P80 SERVER=http://www1.localnet/
でもよい。
プロトコルを変換しつつ、MOUNTすることも可。
# dodg.sh -P80 SERVER=http \ MOUNT="/mail/* pop://mailhost/*" \ MOUNT="/news/* nntp://newshost/*"
ウェブブラウザ経由で、メールやネットニュースにアクセスできる。
$ w3m http://proxyhost/mail/ $ w3m http://proxyhost/news/
プロキシではなく、サーバプロセスそのものとしても使用可。
dodg.sh -P80 SERVER=http MOUNT="/* /path/of/htdocs/*" RELAY=no RELIABLE="*"
自分自身にマウントするような記法を使用する。
単一のTCP接続、UDP送信をそのまま中継。
# dodg.sh -P10022 SERVER=tcprelay://ssh-host:22 RELIABLE="192.168.1.6" 192.168.1.6からのSSH接続をssh-hostに転送 # dodg.sh -P123 SERVER=udprelay://ntp-host:123 NTPパケットの中継
# dodg.sh -P192.168.0.255:47808 \ ビル管理プロトコル(BACnet-IP)のパケット(UDP broadcast)を SERVER=udprelay://192.168.32.255:47808 \ 他ネットワークに転送 MASTER=gw-host:10000ただし、この例はシステム依存。上記指定を行うことでsetsockoptでSO_BROADCASTがセットできるOSならOK。
特定の条件に合致した(or合致しない)場合のみの経路を指定できる。
# dodg.sh -P172.31.0.1:10080,2001_3e0_434_8__1:10080 \ 172.31.0.1:10080と[2001:3e0:434:8::1]:10080で待ち受け ROUTE='http://another-proxy:3128/-_-!*.localnet:*' *.localnet以外への接続要求は、別のプロキシに転送
ROUTEパラメータによって、中継の転送先、接続元、最終的な接続先を指定する。
中継するデータを外部プログラムによって加工する仕組み。 データストリームの何処に挿入するかで、9種類の指定方法がある。
+-+ +-------+ +-+ MD: Master DeleGate |C|---->FFROMCL-|F| D |F|-FTOMD------>|M| |L| |C| E |M| |D| +-+ |T|<------FTOCL-|L| L |D|-FFROMMD<----| |<--->|S| +-+ | | E +-| +-+ |V| | | G |F|-FTOSV-------------->| | | | A |S| | | | | T |V|-FFROMSV<------------| | | | E | | +-+ +-------+
DeleGate組込みのSSL wrapper。
DeleGate 9.0.0以降で対応済み ... 詳細は配布パッケージ内の IPv6NOTE.txt に記述
-P9999 ... IPv4のみ受け付け (-P0.0.0.0:9999と同じ) -P__:9999 ... IPv6のみ受け付け