EBUG 第32回会合
2009年11月21日、万代市民会館
川俣吉広、kaw@on.rim.or.jp
DeleGateとは †
Getting Started †取得 †http://www.delegate.org/delegate/download/から取得。
ビルド †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。 基本形
パラーメータとしては、OWNER と DGROOT は毎回必ず指定した方が望ましい。 #!/bin/sh exec /usr/local/sbin/delegated OWNER=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 この時、実際に停止 (or 再起動)するプロセスは、起動時に -P8080 を指定したプロセスとなる。 起動・停止をまとめて、こんな感じにしても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 -P... SERVER=... LOGDIR='log[date+/aged/%y/%m/%d]' デバックには、-v オプションを指定。フォアグラウンドでの実行となり、ログもstdoutに出力される。 使用例 †基本 †
以下は、普通のHTTPプロキシとして起動した例。CACHE=yes or CACHE=do でキャッシュ機能が有効になる*2。 # dodg.sh -P10080 SERVER=http CACHE=do 同様に、FTP専用のプロキシとして使用するには、以下の例のようにする; # dodg.sh -P10021 SERVER=ftp この例では、DeleGateはHTTP経由のFTPアクセスではない純粋なFTPプロキシとして動作する。これをFTPクライアントから使用するには、 このDeleGate FTPプロキシに接続後、 login: 目的のサーバでのアカウント名@目的のサーバ名 password: 目的のサーバのパスワード とすることで、目的とするFTPサーバに接続できる。あるいは、 login: 目的のサーバのアカウント名 password: 目的のサーバのパスワード で、DeleGate FTPプロキシにlogin後、 cd //desthost で目的のサーバdesthostに接続できる。 応用 †多段接続 †DeleGateは、多段接続して使用可能。
それには、DeleGate間同士の通信に「DeleGateプロトコル」を使用する。
この方法を使うと、中継可能なプロトコルをDeleGateプロトコルでwrap(というかtunnel)して
中継できる。 使用例; local-proxy # dodg.sh -P10021 SERVER=ftp MASTER=localfw-addr:20000 local-fw # dodg.sh -Plocalfw-addr:10080 SERVER=http MASTER=127.0.0.1:20000 local-fw # dodg.sh -Plocalfw-addr:20000,127.0.0.1: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パラメータ †複数のプロトコルを受け付けたい場合、個々にプロセスを起動してもいいが、INETDパラメータで 一個のプロセスで複数のポート(=プロトコル)を待ちうけできる。 # dodg.sh INETD="50080 - - - - - SERVER=http MASTER=127.0.0.1:50000 RES_AF=64" \ INETD="_:40080 - - - - - SERVER=http" \ INETD="2401 - - - - - SERVER=tcprelay://anoncvs.jp.openbsd.org:2401" この例では、一個のDeleGateプロセスで、IPv4のポート50080*3とポート2401, IPv6のポート40080で接続を待ちうけている。 URL Mount †中継するURLをDeleGate上で書き換えることにより、clientから見た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/ Origin Server †プロキシではなく、サーバプロセスそのものとしても使用可。 dodg.sh -P80 SERVER=http MOUNT="/* /path/of/htdocs/*" RELAY=no RELIABLE="*" 自分自身にマウントするような記法を使用する。 TCPrelay / UDPrelay †単一のTCP接続やUDP送信をそのまま中継する機能。
経路制御 †特定の条件に合致した(or合致しない)場合のみの経路を指定できる。 # dodg.sh -P172.31.0.1:10080,2001_3e0_434_8__1:10080 \ ROUTE='http://another-proxy:3128/-_-!*.localnet:*' この例では、IPv4の172.31.0.1:10080とIPv6の[2001:3e0:434:8::1]:10080で待ち受け、*.localnet以外への接続要求は、 別のプロキシに転送 CFI (Common Filter Interface) †中継するデータを外部プログラムによって加工する仕組み。 データストリームの何処に挿入するかで、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 | | +-+ +-------+
sslway †DeleGate組込みのSSL wrapper。
その他諸々の話題 †セキュリティ †
IPv6対応は? †DeleGate 9.0.0以降で対応済み ... 詳細は配布パッケージ内の IPv6NOTE.txt に記述
まとめ †
|