6463 / 4722 / 320 [本体のみの版へ] >> 
はじめてのDeleGate (DeleGate導入の手引きver.9用)
 

 DeleGate導入の手引き

DeleGate第9版用 / ver.0.95alpha / 2014年11月7日 

ご注意:この文書はアルファ版です。

(0) はじめに (追加情報)TOP

(0-0) DeleGate は、多用途で、マルチプロトコル、かつマルチプラットフォーム対応の プロキシサーバです。 導入にあたっては、特定の用途に合わせて仕立ててやる必要があります。

(0-1) この手引きでは、はじめてDeleGate をお使いになる方のために、 インストールや設定などの、導入手順のあらましを説明します。

(0-2) 目次

(0) はじめに
(1) バイナリ版
(2) ソース版
(3) インストール
(4) 設定
(5) 起動・終了
(6) 運用・維持
(7) アンインストール
(8) サポート
(9) 著作権とライセンス
(X) 追加情報
(Y) 参照
(Z) 設定ファイル雛型

(0-3) 2014年10月現在の DeleGate の最新安定版は 9.9.13 ですが、この手引きに書かれている内容はそれ以前の(ここ数年以内の) 第9版にも当てはまります。 以下ではこれらを 9.9.X と表記します。

(0-4) DeleGate の詳細情報と配布ファイルは サポートサイト または 公式サイト から提供されています。 どちらかのサイトで閲覧、また配布サーバからダウンロードして下さい。

(0-5) この手引きに書かれたDeleGate本体の機能は、ごく簡単な抜粋です。 詳細につきましては、 ドキュメント一覧リファレンスマニュアル を御覧下さい。 付録(Z)の設定例も参考になると思います。

(0-6) この手引き以前に、DeleGate の導入手順など、 周辺情報に関するまとまった文書は(特に 日本語では)、 書かれたことがありませんでした。 この手引き書には、これまで文書化されていない事も書かれています。 v9.9.13では、従来の版との設定の互換性は保たれていますが、 配布ファイルの詰め合わせ形式や、インストールの推奨方法が変更されています。 既にDeleGateをお使いの方にも一読して頂きたいと思います。

(0-7) これを書いているうちに説明が面倒になったので(笑)、 説明しやすいように詰め替えしたv9.9.13 をリリースすることになりました。

(0-8) この手引きは不完全であり、 随時改訂を行なっていく予定です。 誤りや、ご不明な点のご指摘は、 フォーラムのほうでお待ちしています。

(1) バイナリ版 (追加情報)TOP

(1-0) バイナリ版のススメ

バイナリ版はDeleGateのフルセットの機能を内包しています。 ダウンロードしてそのまま使えますので、ソースを必要とする特段の理由や、 コンパイル環境などをお持ちで無い方には、バイナリ版をお勧めします。

(1-1) バイナリ配布版のダウンロード

配布サーバから バイナリ版の配布ファイルをダウンロードします。 サイズは4〜5メガバイトです。

(1-2) 各種OS用バイナリ配布

各OS向けのバイナリは、配布サーバのトップ下の bin というディレクトリに置かれています。 現行の9.9.X版に対しては、以下のOS用のものが提供されています。 [→詳細:X] (v9.9.7 まではWindows Mobile/CE版、ARM-Linux版、PPC-Linux版も 配布していましたが、現在は保守されていません)
最新の安定版は、各OS用のディレクトリの下の9.9.X というディレクトリに 置かれています。

(1-3) バイナリ配布ファイルの内容(v9.9.13以降)

(1-3w) Windows版

Windows版(32ビット版)は、

win32-dg9_9_X.zip

という名前のZIP 形式ファイルです。 これを展開すると以下のフォルダとファイルができます。
dg9_9_X/DGROOT/bin/con32-dg9_9_X.exe ... DeleGate実行形式ファイル
dg9_9_X/DGROOT/bin/con32-dg9_9_X.conf.txt ... デフォルトの設定ファイル
dg9_9_X/DGROOT/bin/libssl32.dll      ... SSL 動的ライブラリ
dg9_9_X/DGROOT/bin/*                 ... その他のDLLおよび補助プログラム

(1-3u) Unix版

Unix版は、OS 名 をosname とすると、

osname-dg9_9_X.tar.gz

という名前の圧縮tarファイルです。 これを展開すると以下のディレクトリとファイルができます。
dg9_9_X/DGROOT/bin/dg9_9_X           ... DeleGate実行形式ファイル
dg9_9_X/DGROOT/bin/dg9_9_X.conf.txt  ... デフォルトの設定ファイル
dg9_9_X/DGROOT/subin/dgbind          ... 特権bind実行補助プログラム
dg9_9_X/DGROOT/subin/*               ... その他の特権実行補助プログラム

(1-4) バイナリ配布ファイルの内容(v9.9.12以前)(この段はいずれ削除します)

(1-4w) Windows版

Windows版(32ビット版)は、
(1-4wk) win32-dg9.9.X.zip 
という名前のZIP 形式のファイルです。 この中には、DeleGate の実行形式ファイル con32-dg9_9.X.exe と、補助用の DLL 形式ファイルなどが含まれています。

(1-4u) Unix版

Unix版は、OS 名 をosname とすると、
(1-4uk) osname-dg9.9.X 
という裸の実行形式ファイルです。 補助用の実行ファイル(dgbindなど) が必要な場合には、ソース版からビルドして下さい。

(2) ソース版 (追加情報)TOP

(2-0) バイナリ配布版で事足りる方にはこの節は不要です。

(2-1) ソース配布版のダウンロード

ソース配布の最新安定版は 配布サーバトップ

delegate9.9.X.tar.gz

というファイル名で置かれています。サイズは3メガバイト未満です。

(2-2) ビルドに必要な環境

make コマンド、C++ コンパイラとライブラリ、 shell およびいくつかのコマンド(Unixに標準的に備わっているもの)を必要とします. 開発元ではC++ コンパイラとして、Windows では Visual C++, Unix ではG++ を使用しています。

(2-3) ビルドの手順

(2-3w) Windows の場合

Windows 用(ネイティブ用)のソースコードは永らく非公開でしたが、 v9.9.13 で公開されました。 Windows版は古くからバイナリ版が配布されていますし、 Windows利用者の文化としては好んでソースからビルドしたい方も稀だと思われますが、 非公開部分に悪意のコードなどが含まれていない事を示す(などの)ために、 公開することとしました。 基本的にはnmake一発ですが、Visual C++ (nmake + cl) およびCygwinが必要です。
(2-3wk) $ tar xfz delegate9.9.X.tar.gz
        $ cd delegate9.9.X
        $ nmake ADMIN="foo@bar.baz"
なお、開発元では Visual Studio 2005 という10年前の遺物を使用しており、 その後の VC++ でnmake 可能かどうかは不明です。 Windows 上での一時的な利用が目的の場合には、 Cygwin のG++ でmake しても良いでしょう。

(2-3u) Unix または Cygwin の場合

ソース配布ファイルから以下の手順でビルドします。 make には数分を要します。 [→注記:X2]
(2-3uk) $ tar xfz delegate9.9.X.tar.gz
        $ cd delegate9.9.X
        $ make ADMIN="foo@bar.baz"
        $ sh install.sh (v9.9.13以降)

(2-4) バイナリ版とソース版の違い

一部の特殊な機能はソース配布版からは削除され、バイナリ配布版にしか含まれていません。 ただし、それらは大変特殊な機能(HTTP-SSLトンネルのMITMプロキシと幾つかの危険な機能) ですので、一般的な利用には不要です。 また、Windows用のソースには、DeleGateをサービスとして登録・起動する機能が 含まれていません。

(3) インストール (追加情報)TOP

(3-0) DeleGateのインストール先と実行形式名を決めて、(手動で)移動と 名前変更を行ないます。

基本的に、DeleGate のルートディレクトリをどこかお好みの場所に 移動するだけです。

(3-1) インストール先と実行ファイル名の決定

DgRoot: DeleGateをどのフォルダ(ディレクトリ)に インストールするか決めます。 以下では、インストール先のディレクトリを DgRoot と表記します。 DgRoot は絶対パスです。 Windows の場合にはドライブ名を含む"C:/DeleGate" のようなものになります。 [→注記:X3-1]

DgExe: DeleGateの実行形式の名前を決めます。 以下では、この名前をDgExe と表記します。 バイナリ配布版のdg9_9_X やcon32-dg9_9_X.exe あるいはソースからビルドして出来た"delegated" のままでも構いません。 (Widows版の場合には ".exe" を除いた部分です)

(3-2) v9.9.13 以降

バイナリ配布に含まれる、あるいはソースからのビルドでできるDGROOT を 好みの場所に移動し、必要であれば名前を変更します。 これがDgRootになります。 また、必要であれば、DeleGateの実行ファイルを好みの名前に改名します。 これがDgExeになります。

Unix 版で"subin" を使用する場合 (特権ポートを使用する場合など)には、以下を実行します。

(3-2uk) $ cd DgRoot/subin
        $ sh setup-subin.sh

(3-3) v9.9.12 以前(この段はいずれ削除します)

(3-3w) Windows版の場合
  • win32-dg9_9_X.zip を展開してできる dg9_9_X という名前のフォルダを、 DgRoot に名前変更します (変更せずにそのままでも構いません)
  • DgRoot/bin の下にある con32-dg9_9_X.exe を名前変更します (変更せずにそのままでも構いません)

(3-3u) Unix版の場合
(3-2uk) $ mkdir DgRoot
        $ mkdir DgRoot/bin
        $ mv DgExe DgRoot/bin/
必要であれば、DgRoot/subin の下に gbind などの補助プログラムをインストールします。

(4) 設定 (追加情報)TOP

(4-0) DeleGate には 複数の設定方法と多数の設定パラメータがあります。

ここでは設定方法だけを概説します。 設定方法のやや詳細は 別の文書 にあります。 主な設定パラメータは、 追加情報(X4-3)にリストアップされています。 また、具体的な設定例が付録(Z)にあります。 パラメータの一覧と詳細構文については、 参照マニュアルを御覧下さい。

(4-1) コマンドパスの設定

環境変数 PATH に DgExe を含むディレクトリ(デフォルト配置では DgRoot/bin)を追加します。 (これは必須ではありません)

(4-2) 設定値の与え方

設定パラメータ(あるいはオプション)の設定値の与え方は以下のように複数あります。 パラメータには上書き型のもの(ADMINなど)と追加型のもの(PERMITなど)があります。 上書き型の同一名のパラメータが複数の方法で与えられた場合、 以下の優先順位で使用されます。[→詳細:X4-4] つまり、より低い優先順位の設定方法で与えられた設定値は、 より高い順位で与えられた設定値で上書きされます。

1) コマンド引数 ... NAME=Value あるいは -Option
2) 明示的にロードされた設定ファイル ... +=Url
3) 共通の設定ファイル ... DgRoot/common.conf
4) デフォルトの設定ファイル ... DgExe.conf.txt
5) 環境変数 ... export NAME=Value
6) 実行形式に埋め込まれた設定値 ... -Fimp NAME=Value

(4-3) 基本的な設定パラメータ

DGROOT=DgRoot ... DgRoot のパス
ADMIN=foo@bar.baz ... このDeleGateの管理者のメールアドレス
SERVER=pppp ... クライアントとの通信プロトコル pppp
-Pnnnn ... クライアントからの接続を受け付けるポート番号 nnnn

(4-4) デフォルトの設定ファイルによる設定方法

DgExe という名前の実行形式ファイルのための設定ファイルとして、 DgExe.conf.txt という名前のファイルを作り、設定パラメータを書き込みます。 以下は一般的なHTTPプロキシの設定例です。
(4-4ak) $ cat DgRoot/bin/DgExe.conf.txt
           DGROOT=DgRoot
           ADMIN=foo@bar.baz
           SERVER=http
           -P8080
        $ DgExe
DeleGateを一つの用途だけに使用する場合には、このように デフォルトの設定ファイルで全てのパラメータを指定しても良いでしょう。

(4-5) 環境変数による設定方法

起動時に設定パラメータを環境変数として与えます。 以下の環境変数例は(4-4) と同じ意味です。
(4-5ak) $ export DGROOT=DgRoot
        $ export ADMIN=foo@bar.baz
        $ export SERVER=http
        $ export DGOPTS=-P8080
        $ DgExe
実際には、環境変数では DGROOT や ADMIN などの固定的なパラメータを指定し、 SERVER やポートなどはコマンド引数で指定するのが良いでしょう。

(4-6) コマンド引数による設定方法

起動時に設定パラメータを引数として与えます。 以下の引数例は(4-4) と同じ意味です。 説明の都合上、後回しになりましたが、これが最も一般的に使用される方法です。
(4-6ak) $ DgExe DGROOT=DgRoot \
                       ADMIN=foo@bar.baz \
                       SERVER=http \
                       -P8080

(4-7) 設定ファイルの明示的なロード

設定ファイルを指定して読み込むには、"+=Url" と指定します。 Url 部分にファイル名だけが指定された場合には、 DgRoot/etc (あるいは他のDGPATH に指定されたディレクトリ) の下を探索します。
(4-7ak) $ DgExe +=xxx.conf +=http://server/path/yyy.conf ..
        [xxx.confの内容]
        ADMIN=foo@bar.baz
        SERVER=http
        -P8080
なお、+=Url でロードされるファイル中でDGROOT を 指定することはできません。 それは、+=Url が処理される時点では、既にDGROOTは確定しており、 UrlDGROOTから相対的に解釈されるからです。

(4-8) 設定パラメータの実行ファイルへの埋め込み

実行ファイル(DgExe)に設定パラメータを埋め込むには、 -Fimp オプションを使用します。 以下の例は (4-4) と同じ意味です。
(4-8ak) $ DgExe -Fimp DGROOT=DgRoot ADMIN=foo@bar
        $ DgExe -Fimp SERVER=http -P8080
        $ DgExe
埋め込まれているパラメータやヘルプ情報を表示するには DgExe -Fimp -h とします。

(5) 起動・終了 TOP

(5-1) 起動

起動すると、デフォルトで、バックグラウンドで実行される サービス(Windows)、あるいはデーモン(Unix)になります。
(5-1ak) $ DgExe [引数リスト]
デフォルトの設定ファイルに全てのパラメータを書いてある場合には、 DeleGateのアイコンをクリックするだけです。

(5-1w) Windowsの場合

サービスとして実行するには、管理者権限でDeleGateを起動する必要があります。 起動の際にDeleGateがいくつか質問してきますので、答えます。 DeleGateがサービスとして登録され、引数はレジストリに保持されます。

(5-1u) Unixの場合

一般にUnixで特権ポート(ポート番号1024未満)を使用する場合には、 特権ユーザとしてプログラムを起動する必要がありますが、 DeleGateでは"subin" にある"dgbind" を使用して、 一般ユーザ権限で起動することを推奨します。

(5-2) テスト用の起動

"-fv" オプションを付けて起動すると、フォアグランドで実行され、 コンソールにログを出力します。 Control-C で終了させることができます。
(5-2ak) $ DgExe -fv [引数リスト]

(5-3) 終了

"-Fkill" オプションを指定すると、指定したポート番号 nnnn で 現在実行しているデーモンを終了させます。 再起動するための終了の場合には、"-Fkill" ではなく、 下記(5-5)の"-r" オプションを使います。
(5-3ak) $ DgExe [引数リスト] -Fkill [-Pnnnn]

(5-4) ホストのブート時の自動的な起動

(5-4w) Windows の場合

上記(5-1) でサービスとして登録する際に「自動的な起動」を選択します。

(5-4u) Unix の場合

OS により流儀が色々あります。 OSによらない方法としては、一般ユーザ権限で、 crontab の @reboot で例えば、以下のように起動することをお勧めします。
(5-4uk) @reboot /path/of/dgrc.sh

(5-5) 設定変更と再起動

運用に伴って、アクセス拒否リストの追加などを行なうために、 設定値を変更することがあります。 新たな設定値を有効にするためには、DeleGate を再起動する必要があります。
可変なパラメータを再起動時に読み込むために、パラメータをコマンド引数で 直接与えるのではなく、 "+=Url" により設定ファイルから読み込むようにして置くと良いでしょう。

(5-5w) Windowsの場合

コマンドラインで DgExe を実行する
自動的にサービスの停止−削除−登録−起動が行なわれます。
サービス管理機能を使う
コントロールパネル/管用ツール/サービス を用いて、再起動させる。 引数リストはレジストリに登録されていますので、レジストリの編集の後、 サービスを再起動することで、編集後の引数リストを反映することができます。 サービス管理機能を用いると、サービスの停止・再開も行なえます。

(5-5u) Unixの場合

即時強制再起動
"-r" オプションを追加して起動すると、現在実行中のデーモンを実行中のセッションとともに (SIGTERMにより)終了させてから、新たなデーモンを起動します。 これは、-Fkill を行なってから起動を行なうのと同等ですが、 前のデーモンがポートを解放するのを待ってから再起動するため、 起動に失敗する可能性が低くなります。
(5-5ak) $ DgExe -r [引数リスト]
   
穏便な再起動
"-r" オプションでは、現在実行しているセッションを強制的に終了させます。 これに対して"-Fkill-hup" では、現在のデーモンにSIGHUPを送り、 現在実行しているセッションが終了するまで待ってから再起動を行ないます。
(5-5bk) $ DgExe [引数リスト] -Fkill-hup [-Pnnnn]
        $ DgExe [引数リスト]
    

(6) 運用・維持 TOP

(6-0) 増大するファイルの管理

DeleGateの運用にあたって必要になる作業のうちで重要なのは、 増大するファイルの管理です。 キャッシュがほとんど用いられなくなった現在、 問題の中心となるのはログファイルです。
ログファイルには2種類があります。 ひとつはクライアントからサーバへのアクセスを、日時とともに記録したもので、 統計の作成や監査のために、圧縮・アーカイブなどして、 長期間保存するべきものです。
もう一つは、DeleGate の動作を比較的詳細に記録するもので、 これは初期の設定や、設定の変更、異常の発生の際に、 DeleGate の動作を観察したり、 開発者に送って検証させるために用いられます。 こちらは、ディスク容量に余裕が無い場合には、 短期間で削除するか、あるいは作成しないようにしても構わないでしょう。

(6-1) ログファイルの切り分け

設定パラメータに以下の(6-1ak) の一行目を追加します。 LOGDIRはログファイルを置くディレクトリ名を指定するパラメータですが、 ディレクトリ名を日によって変える記法が用意されています。 以下の例で[data+format]と指定されている部分です。 この例により、ログファイルは日毎に切り分けられます。 例えば「2014年10月31日のぶんのHTTPプロキシのログファイル」は、 「DgRoot/log/y14/m10/31/8080.http」 となります。
(6-1ak) LOGDIR='log[date+/y%y/m%m/%d]'         ... 将来のデフォルト値
        LOGFILE='${LOGDIR}/${PORT}'            ... デフォルト値
        PROTOLOG='${LOGDIR}/${PORT}.${PROTO}'  ... デフォルト値
この分割に伴い、[date+format] という部分を除いたログファイルが同時に作られます。 Unixでは以下のようなハードリンクが作られます。
(6-1bk) DgRoot/log/8080.http == DgRoot/log/y14/m10/31/8080.http
これにより、 ログファイルがどのように分割され、最新のもの(例えば今日の)がどこに あるか意識することなく、LOGDIR の直下を見れば良いようになっています。

(6-2) ログファイルの圧縮・削除

上記 (6-1) のようにファイルを切り分けた上で、ファイルの圧縮や削除を行ないます。 一般にファイルの圧縮、バックアップ、削除、などの機能は、 OS環境ごとに 十分なものが用意されていますので、それらを利用することを推奨します。 例えば、以下のようなコマンドをcronで毎日深夜に実行して、古いログファイル を圧縮すると良いでしょう。
(6-2ak) $ find DgRoot/log -type f -mtime +1 -exec gzip -f "{}" ";"

(6-3) ログの詳細化・無効化オプション

デフォルトでは、デバッグあるいは詳細追跡用のログファイルが作成されます。 このログファイルは巨大になることがあります。 これは以下のようなオプションで、無効化したり詳細化したりできます。
-vd ... デバッグ用のログを詳細化する
-vt ... デバッグ用のログを簡略化する
-vs ... デバッグ用のログが作成されないようにする
-vS ... HTTPやFTPのアクセスログが作成されないようにする(これはお勧めしません)

(7) アンインストール TOP

(7-0) アンインストールの基本

特に設定をしない限り、DeleGate が作成するファイルは全て、 DgRoot の下にあります。 ですので、このディレクトリをまるごと削除してやれば、 アンインストールは完了です。 ただし、その前に、 Windows ではDeleGateのサービスおよびレジストリへの登録の削除を、 Unix ではデーモンプロセスの終了を、 行なう必要があります。

(7-1) 実行中のサービスの終了

(7-1w) Windows の場合

DeleGate をコンソールから起動すると、サービスとして実行中のDeleGateがある場合、 それを削除するかどうか聞いてきますので、削除を選択します。 これにより、レジストリに記録されている情報(設定パラメータ)も消去されます。
(7-1wk) $ DgExe -Pnnnn
        (サービスを削除するか聞いてくるので y と答える)

(7-1u) Unix の場合

DgExe -Fkill または kill コマンドで、DeleGateプロセスを終了させる。

(7-2) ファイルの削除

DgRoot フォルダ(ディレクトリ)をまるごと削除する。

(8) サポート TOP

(8-0) 公式サイトではサポートを提供していません。

(8-1) サポートサイト にある フォーラム で、サポートが提供されています。 ただし、これはあくまでもボランタリベースで提供されているものであり、 お問い合わせ等に対して回答が保証されるものではありません。 あらかじめ御了承下さい。

(8-2) フォーラムに投稿された記事は、ウェブで公開され、アーカイブされ、また Google などの検索エンジンに対する探索・検索の対象にもなります。投稿される際には、個人情報や組織内情報などを書かないようにご注意下さい。

(8-3) フォーラムで質問される場合には、検討や回答のために必要十分な情報を書いて下さい。ひとつの模範的な例がここにあります。

(8-4) サポートサイト側から配信を行なうメーリングリストはありません(過去にはありましたが、廃止されました)

(9) 著作権とライセンス TOP

(9-0) DeleGateは(2014年現在)産業技術総合研究所(産総研)がその 全著作権を保持する知的財産です。

Copyright (c) 1994-2000 Yutaka Sato and ETL,AIST,MITI
Copyright (c) 2001-2014 National Institute of Advanced Industrial Science and Technology (AIST)
AIST-Product-ID: 2000-ETL-198715-01, H14PRO-049, H15PRO-165, H18PRO-443

(9-1) DeleGateは、 個人または非営利組織による利用、 あるいは営利組織による評価目的での短期間の利用に対して無償で利用許諾されています。 それ以外の場合には、 公式サイト にあるライセンス情報を御覧下さい。

(9-2) 第9版での商用利用のライセンス条件は、第8版のそれから変更されましたのでご注意下さい。

(9-3) この文書「DeleGate導入の手引」は(DeleGateの作者である) 佐藤@DeleGate.ORG によって個人的に書かれたものであり、 その全著作権は佐藤個人に帰属します。

(X) 追加情報 TOP

(X0)

(X0-1) リリース v9.9.13 での変更点

(a) Windows版のソースの同梱
(b) ソースからのビルドにinstall.sh を追加(バイナリ版と同じディレクトリ構造を生成)
(c) Unix版バイナリ配布ファイルにsubin を同梱
(d) デフォルトの設定ファイルとして ${EXECDIR}/../etc を追加
(X1)

(X1-1) バイナリ配布ファイルの対応プラットフォーム (9.9.X)

con32-dg9_9_13.exe:
PE32 executable (console) Intel 80386, for MS Windows
win32-dg9_9_13.exe:
PE32 executable (GUI) Intel 80386, for MS Windows
cygwin-dg9.9.13.exe:
PE32 executable (console) Intel 80386, for MS Windows
freebsd10-dg9.9.13:
ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), dynamically linked (uses shared libs), for FreeBSD 10.0 (1000510), not stripped
linux2.4-dg9.9.13:
ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.2.5, not stripped
linux2.6-dg9.9.13:
ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, BuildID[sha1]=0x3aabcda2a15307b16a9b9518caaf4e25d7989592, not stripped
linux2.6_32-dg9.9.13:
ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x4a8630b447ee693b97a39f6082c73e4353d72631, not stripped
macosxi-dg9.9.13:
Mach-O 64-bit executable
macosxp-dg9.9.13:
Mach-O executable ppc
netbsd6-dg9.9.13:
ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for NetBSD 6.1.4, not stripped
solaris11i-dg9.9.13:
ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked (uses shared libs), not stripped
(X2)

(X2-1) make 用設定ファイル -- DELEGATE_CONF

ADMIN やCC、CFLAGS などの make 用のパラメータは、Makefile を直接書き換える のではなく、DELEGATE_CONF というファイルに 列挙しておく方法を推奨します。 DeleGateは、make を行なうディレクトリから親ディレクトリ方向に向けて、 DELEGATE_CONF というファイルを探索して、最初に見つかったものを、 src/DELEGATE_CONF にコピーし、Makefile に取り込んで使用します。 Unix においてはこのコピーはシンボックリンクです。 DELEGATE_CONF を書き換えた後に make を行なうと、 その変更を反映するようMakefile (Makefile.go) が再生成されます。

(X2-2) config というステップはありません

make の前に一般に行なわれるconfig (Configure) というステップはありません。 プラットフォーム依存、環境依存、コンパイラ依存といった構成の違いは、 make の過程で自動的に選択されます。 構成に依存した関数は、"maker" というディレクトリの下に置かれています。 この下にあるプログラムのコンパイルが試行され、コンパイルに成功したものが採用されることで、 構成の違いに適応しています。 環境の違いによって有無や版が異なるライブラリについては、 動的にローディングするようにし、無い場合にはスタブを使用することで適応しています。

(X2-3) make install はありません

DeleGateはもともと、一般ユーザが作成して、自分の権限で実行することを 想定して作られています。 root 権限の下で、得体の知れない(笑)プログラムや設定情報をシステムの あちこちにばらまくのもばらまかれるのも恐ろしい事です。 プラットフォームによっていろいろとある流儀に対応するのも大変です。 アンインストールが面倒なことになるのも面倒です。 そんなこんなで、DeleGateには一般にroot権限で実行されるmake install というものはありません。
開発者も、使用している多数の実マシン・仮想マシンは全て自分専用なので、当然 rootにもなれますが、恐ろしいrootにはなりたくないので、一般ユーザとして DeleGateのディレクトリを所有し、一般ユーザとしてDeleGate を実行しています。 DeleGate の使用するファイルは基本的に全てDGROOT の下に置いています。
v9.9.13 でinstall.sh なるものを追加しましたが、これは単にバイナリ配布版と ソース配布版で共通のDGROOT 以下の構造を作るだけのためのものです。
ただし、どうしても特権ユーザ権限で実行しなければならない機能 (システムコール)があります。代表的なものが、特権ポートの使用 (ソケットの bind() )です。 DeleGateではそれらを行なうためだけに特化したプログラム(例えば bind() だけを行なうdgbind)を作り、DGROOT/subin の下に配置して使用します。 これらはインストール時に一度だけ、chown とchmod をしてやる必要 があります。v9.9.13 以降では、DGROOT/subin の下にある setup-subin.sh を実行すればOKです。 これは、テストなどのために何度もmakeを行なうような場合に特に重宝です。

(X3)
(X3-1) Windowsでの使用にあたって
  • DeleGateに指示するパス名の区切り文字はバックスラッシュ"\" でなく、 スラッシュ "/" を用いて下さい。 DeleGateは(Unix環境で育ったので)"\" を エスケープ文字として解釈することがあります。 また、HTTPのURLやFTPのファイル名、あるいはDeleGateのMOUNT では パスの区切りを"/" を使っていますので、これに統一するのが良いでしょう。

  • Cygwin をインストールして使用されることを推奨します。

  • Unix使いの方が、何らかの理由で仕方なく(笑)Windowsを使わなければ ならなくなった場合。Cygwin では cron を提供していますが、インストールが 何やら面倒くさいです。 DeleGate を cronの代替として使うことでより簡便に、 バックグラウンドでの定期的な実行ができます。 例えば、以下のように。

    $ DgExe CRON="0 * * * * c:/cygwin/bin/sh.exe d:/path/of/script.sh"
        

(X3-2) Unixにおいて特権ユーザ権限を代行する外部プログラム [インストール方法]

dgbind ... 特権ポート(80番や443番) で待ち受ける(socket を bindする)
dgchroot ... chroot する(CHROOT指定時)
dgcpnod ... 特殊ファイル(nullおよびurandom) を作成する(CHROOT指定時)
dgforkpty ... forkpty()が特権を必要とする場合(yysh使用時)
dgpam ... PAM で認証する
(X4)

(X4-1) DgRoot の位置

DGROOT=DgRoot というパラメータが、 設定値として(コマンドライン引数、デフォルトの設定ファイル、環境変数、 あるいは組み込みパラメータにおいて)明示的に与えられた場合にはそれに従います。 指定されなかった場合には、OSや、 DeleGateを実行するユーザ、rootか否か、などに依存したデフォルトの位置になります。 Windows では "/Program Files/DeleGate"、Unix では $HOME/delegate です。 残念ながらこのデフォルト位置は、必ずしも適切なものとは言えません。 適切な場所を選び、DGROOTを明示的に指定されることをお勧めします。

(X4-2) 関連ファイルのデフォルトの配置

DgRoot/act ... 実行中のDeleGateデーモンのPIDなど (ACTDIR)
DgRoot/adm ... DeleGate によって生成されたファイル(認証情報、カウンタなど) (ADMDIR)
DgRoot/bin ... DeleGateの実行形式ファイルや補助プログラム
DgRoot/cache ... HTTP や FTP のキャッシュファイル (CACHEDIR)
DgRoot/data ... HTTP や FTP でサービスされるデータファイル
DgRoot/etc ... 設定ファイルなど (ETCDIR)
DgRoot/etc/cert ... SSL 用証明書類(CERTDIR)
DgRoot/log ... ログファイル (LOGDIR)
DgRoot/subin ... 特権ユーザで実行するプログラム(dgbind など)の置場所
DgRoot/tmp ... 一時ファイルやリゾルバのキャッシュ (TMPDIR)

(X4-3) 主な設定パラメータとオプション

DeleGateでは、NAME=VALUE の形式の設定値を「パラメータ」、 "-" で始まる設定値を「オプションと」呼んでいます。 これらは DeleGate 本体の機能・動作を制御する中核であり、1万行ほどの リファレンスマニュアル に記載されています。 ここではその主なものを挙げます。
なお、以下で"*" の印を付けたものは、複数指定することができ、いずれもが有効になるものです。
基本
DGROOT ... DgRoot のパス
-Pnnnn ... クライアントからの接続を受け付けるポート
-Qnnnn* ... -P と同様。ただし複数指定可能
SERVER ... クライアントとDeleGateの間のプロトコル
ADMIN ... このDeleGate の管理者のメールアドレス
DGOPTS ... オプションを環境変数で与えるためのパラメータ
-fv ... 実行ログをログファイルとコンソールに出力
-Fimp ... 実行形式への設定値の埋め込み
-Fkill ... デーモンを終了させる
ライブラリとデータのパス設定
DYLIB ... 動的ライブラリのパスおよび名前のパターン定義
DGPATH ... +=file でロードする設定ファイルの探索パス
リゾルバとホストの定義
RESOLV ... 使用するhostsファイル、DNS サーバ など、およびそれらの試行順序
HOSTS* ... ホスト名のリストとアドレスのリストの対を定義
HOSTLIST* ... ホストのリストを仮想的なホスト名としてまとめて定義
リソースの使用制限
TIMEOUT* ... 各種のタイムアウトの指定
MAXIMA* ... 並列性の最大値などの制限
アクセス制御
RELIABLE* ... アクセスを許可するクライアント
REACHABLE* ... 許可すべきアクセス先のサーバ
REMMITTABLE* ... 許可すべきサーバ向けプロトコル
PERMIT* ... 許可すべき{プロトコル:サーバ:クライアント}の組合せ
仮想サーバ・リバースプロキシ
MOUNT* ... クライアントから見たURLを、サーバのURLへマップし、中継する
多段プロキシ・経路制御
FORWARD* ... 使用する上流のプロキシの{プロキシ種別,ホスト,認証情報}の指定
PROXY* ... 上流のアプリケーション・プロキシ (FORWARD の簡略形)
SOCKS* ... 上流のSOCKSサーバ (FORWARD の簡略形)
SSLTUNNEL ... 上流のSSLトンネル(HTTPサーバ)(FORWARD の簡略形)
CONNECT* ... PROXY, SOCKS, SSLTUNNEL などの試行順序
プロトコル固有の設定
HTTPCONF* ... HTTP固有の設定
FTPCONF* ... FTP固有の設定

(X4-4) 同一名の設定値が複数与えられた場合の解釈

起動時に一つだけが選択されるもの
  • DGROOT や ADMIN など、基本的なパラメータのいくつかは、 そのうち一つだけが優先順位に基づいて使用されます。 与えられた方法によって優先順位がありますが、同じ方法で複数与えられた場合には、最後に与えられたものが使用されます。

  • TIMEOUTやHTTPCONFなどは、さらにサブの値を指定しており、 起動時に最後に与えられたサブの値が使用されます。

  • RELIABLE や HOSTLIST など、リストを表すものは、 複数指定された場合、("+," の前置により)リストに追加することを明示しない限り、 後続のもので新たなリストが定義されます。

全てが有効に使用されるもの

多くのパラメータは、複数指定したものが全て、起動時には有効になり、 実行時に選択されます。 複数の方法で与えられた場合にも、それらが全て有効です。

  • PERMITやFORWARD などは、起動時に全てが取り込まれ、 実行時に与えられた順番に従ってマッチングの対象となり、 最初にマッチしたものが使用されます。

  • MOUNTは例外的に、与えられた順序によらず、起動時にソートされて、 実行時にその順序でマッチングが行なわれます。

(XX)

(XX-1) 遠隔管理機能の挫折

その昔、十年ほど前にver.9.0 の頃、DeleGate の遠隔管理・設定機能の 試作を行ないましたが、完成せずに挫折しました。 http://delegateHost/-/admin/ にその未完成版が残っています。 今となってはこれは、PHPなり何なりを使用して作成するのが良かったかと 思います。

(Y) 参照 TOP

[1] この手引きの最新版
http://ja.delegate.org/delegate/newbies-ja.shtml
[2] DeleGateサポートサイト
http://ja.delegate.org/
[3] DeleGate参照マニュアル
http://www.delegate.org/delegate/Manual.htm
[4] DeleGateに関するドキュメント一覧
http://www.delegate.org/documents/
[5] DeleGateによる日本語文字コード変換
http://ia.delegate.org/delegate/ccx/ja/
[6] Google 先生
https://www.google.co.jp ... 検索例「 delegate 設定

(Z) 設定ファイル雛型 TOP

(Z-1) 設定ファイル

プレインテキスト版
http://www.delegate.org/delegate/dg9.conf.txt
HTML版
http://www.delegate.org/delegate/dg9.conf.shtml

(Z-2) この手引き

設定ファイル付き版
http://ja.delegate.org/delegate/newbies-ja.shtml
設定ファイル無し版
http://ja.delegate.org/delegate/newbies-ja.html

(c)2014, Yutaka Sato @ DeleGate.ORG
DGbeecon-2014-10-26-sato-newbies-1A

<< 

PageViews: 4722 hits / 320 nets since Jul 18 2015

(Z) 設定ファイルのテンプレート

A Template of Configuration File of DeleGate
INDEX
head example dfltconf -vQ DGROOT common loading LDPATH ADMIN RESOLV HOSTS HOSTLIST MAXIMA TIMEOUT LOGDIR SERVCONF -r -f -v RELIABLE REACHABLE PERMIT AUTHORIZER FORWARD -P SERVER MOUNT STLS END DGOPTS setenv
#!/path/of/delegated += #
##
##---------------------------------------------------------------------
## A template of default configuration file for DeleGate version 9.X
##                 ver.0.4alpha, 2014-11-05, Yutaka Sato @ DeleGate.ORG
##---------------------------------------------------------------------
## - The latest version of this file is available at:
##   http://www.delegate.org/delegate/dg9.conf.txt
##
## - This is an example of a configuration file of DeleGate. 
## - The "configuration" of DeleGate is a set of parameters (or options)
##   which can be given in command line options, in configuration files,
##   in environment variables, and so on.
## - A "configuration file" of DeleGate is a plain text file including
##   a list of configuration parameters one per line.
## - The "default" configuration file is the one named as "XXX.conf"
##   that is loaded on invocation of an executable file of DeleGate
##   named as "XXX".
## - You may give all of parameters in the default configuration file
##   and invoke DeleGate without command line options.
## - But it is more likely that writing a common set of parameters in
##   the default configuration file while giving other parameters in
##   command line options those are specific to individual usage.
##
## - Category of parameters
##     ==A ... access control
##     ==C ... configuration file
##     ==D ... deployment of directories
##     ==L ... logging
##     ==N ... networking
##     ==P ... application server
##     ==R ... resource restriction
##     ==S ... daemon and service
## - Multiplicity of parameters
##    [0-1] ... at most one is given
##    [0-n] ... can be given multiply

#
##==C [0-n] ---- shortcut example --------------- MINIMUM CONFIGURATION
#@ typical and minimum configuraiton for a HTTP proxy, plus alpha
##---------------------------------------------------------------------
## - The following is a typical set of configuraiton parameters for
##   DeleGate as a HTTP proxy.
#
#ADMIN=foo@bar.baz # mail-address of the administrator of this DeleGate
#SERVER=http       # the protocol DeleGate speaks with its clients
#-P8080            # the entrance port on which DeleGate waits clients
##
## - a little more parameters that are generally used.
#
#-vs                    # suppress logging of the behavior of DeleGate
#SOCKS=192.168.1.1:1080 # forwarding any protocol to a SOCKS server, or
#PROXY=192.168.1.1:8080 # forwarding HTTP to an upstream HTTP proxy
##
## - a little more, a little tricky usage.
#
#SSTUNNEL=192.168.1.1:8080 # forwarding any protocol to HTTP SSL-tunnel
#SERVER=tcprelay://odst.- # transparent TCPrelay maybe forwarded to SOCKS

#
##==C [0-1] ---- delegated.conf ------------ DEFAULT CONFIGURATION FILE
#@ ${EXECDIR}/${EXECNAME}.conf[.txt] ... the default configuration file
##---------------------------------------------------------------------
## - To be detected as the "default configuration file" by DeleGate,
##   this file must be located at and named as:
##     /path/of/delegated.conf[.txt]
##   where the path of the executable file of DeleGate is:
##     /path/of/delegated[.exe]
## - More generally, it must be EXECDIR/EXECNAME.conf[.txt] where
##   EXECDIR is the directory under which the executable file of
##   DeleGate is, and EXECNAME[.exe] is the name of the executable file.
## - On Unix, an EXECNAME file can be a symbolic link to the executable
##   file so that each symbolic name can have each configuration file.
## - In v9.9.13 or later, also EXECDIR/../etc/EXECNAME.conf[.txt] is a
##   candidate of a default configuration file.

#
##==L [0-1] ---- -vQ --------------- TRACING CONFIGURATION FILE LOADING
#@ -vQ ... quietly loading the default configuration file
#@ -vq ... quietly loading all configuration files (loaded by +=URL)
##---------------------------------------------------------------------
## - Uncomment the following line to suppress the message shown on the
##   invocation of DeleGate as "#### loading default conf: ..."
#
#-vQ

#
##==D [0-1] ---- DGROOT ----------------------- DELEGATE ROOT DIRECTORY
#@ DGROOT=dirPath ... the root directory of DeleGate
##---------------------------------------------------------------------
## - The root directory of DeleGate under which all of directories of
##   DeleGate are located by default.
## - DeleGate may load multiple configuration file but only the
##   "default configuration file" can set the DGROOT value.
## - It can be specified as an absolute path like bellow:
#DGROOT='/home/${HOME}/delegate'    # the default on Unix
#DGROOT='C:/Program Files/DeleGate' # the default on Windows
## - Or it can be specified as a relative path that is relative to the
##   executable file of DeleGate using the string '${EXECDIR}'.
## - '${EXECDIR}' is substituted by the path of directory under which
##   the executable file of DeleGate is located.
## - For example, if the path of executable is
##   ".../DGroot/etc/delegated.exe" then the ${EXECDIR} points
##   ".../DGroot/etc", thus "${EXECDIR}/.." points ".../DGroot".
#
DGROOT='${EXECDIR}/..'

#
##==C [0-1] ---- common.conf ---------------- COMMON CONFIGURATION FILE
#@ ${DGROOT}/common.conf ... the common configuration file
##---------------------------------------------------------------------
## - "common" configuration file is commonly used among DeleGates that
##   uses the same DGROOT.
## - It is loaded unconditionally if exists.

#
##==C [0-n] ---- +=URL ---------- LOADING CONFIGURATION FILE EXPLICITLY
#@ +=URL ... loading configuration file from the specified URL
##---------------------------------------------------------------------
## - If the URL is a relative path, it is relative from the
##   configuration file that loades it.
## - Configuration file can be loaded recursively.
#
#+=http://server/path/dgconf.txt
#+=/path/of/dgconf.txt
#+=dgconf.txt

#
##==D [0-1] ---- LDPATH ------------------------------- DYNAMIC LIBRARY
#@ LDPATH=listOfDirectory ... search path for dynamic libraries
#@ DYLIB=listOfNamePattern ... name pattern of dynamic libraries
##---------------------------------------------------------------------
#LDPATH='${ETCDIR};${LIBDIR};${HOME}/lib;/usr/lib;/lib'
#DYLIB='lib*.so.0.9.8,lib*.so.1,lib*.so' # Unix
#DYLIB='lib*.0.9.8.dylib,lib*.dylib'     # MacOSX
#DYLIB='cyg*-0.9.8.dll,cyg*-1.0.0.dll'   # Cygwin
#DYLIB='*.dll'                           # Windows

#
##==L [0-1] ---- ADMIN ---------------------------------- ADMINISTRATOR
#@ ADMIN=mailAddress ... mail address of the administrator
##---------------------------------------------------------------------
## - The address is used to notify fatal "incident" to administrator
##   from DeleGate via mail.
## - "Incident" includes a detection of an attack from intruder that
##   caused fatal error like segment violation in DeleGate.
## - It is also used to show the contact address of the administrator
##   of this DeleGate to clients on usual error like broken links.
## - Thus, it is recommended to be not a personal address but an
##   address of a role name like "delegate-admin@bar.baz".
#
#ADMIN=foo@bar.baz

#
##==N [0-1] ---- RESOLV -------------------------- HOST NAME RESOLUTION
#@ RESOLV=orderOfResolver ... order of trial of resolution methods:server
#@ RES_AF={46,64,4,6} ... order of IPv4 and IPv6
##---------------------------------------------------------------------
## - Controls the behavior of host-name resolver of DeleGate.
## + orderOfResolver is a list of followings:
##   - cache: cache file for "file", "dns" and "sys" bellow.
##   - file[:pathOfHosts] ... file in the format of /etc/hosts
##     If the path is a relative one, it is searched under DGROOT/etc.
##   - dns[:DNSserver] ... DNS server.
##   - sys ... the resolver of the host system.
#
#RESOLV=cache,file,dns,sys # typical configuration
#RESOLV=cache,file:hosts,dns:192.168.1.1,sys

#
##==N [0-n] ---- HOSTS --------------------------- HOST NAME DEFINITION
#@ HOSTS="nameList/addressList" ... defining a pair of hotname/address
##---------------------------------------------------------------------
## - HOSTS pre-defines an entry in the on-memory cache of the resolver
##   of DeleGate, suppressing resolution by resolvers listed in RESOLV.
## - It can be used to define hosts that are unresolvable by resolvers
##   listed in RESOLV.
#
#HOSTS="localhost/127.0.0.1"
#HOSTS="{host1,host2}/1.2.3.4"
#HOSTS="host3/{1.1.1.1,1.1.1.2}"

#
##==N [0-n] ---- HOSTLIST ------------------------ HOST LIST DEFINITION
#@ HOSTLIST="name:listOfHosts" ... definition of named list of hosts
##---------------------------------------------------------------------
## - HOSTLIST defines a named list of hosts to be referred like a host
##   name in other named or unnamed host lists.
## - A host list is used for matchhing of access control list (ex.
##   REACHABLE), routing destination (ex. FORWARD), MOUNT, and so on.
## - A member of the list is one of host-name, domain-name with a wild
##   card, IP-address, masked IP-address or range of IP-addresses.
## - "*" matches any hosts
## - Wild card in domain name matching is like *.subdoamin.domain
## - The matching can be negation by "!" prefix to a host
## - A masked IP address is n.n.n.n/m.m.m.m, n.n.n.n/m, or host-name/m
## - A range of IP addresses is as n.n.n.[n-m]
#
#HOSTLIST="reachable:host1,host2,*.dom1,!*.dom2.dom1,!10.0.0.0/8"
#HOSTLIST="unreachable:!reachable"

#
##==R [0-n] ---- MAXIMA ----------------------- RESOURCE USAGE LIMITTER
#@ MAXIMA=what:maxValue ... limitter of resource usage
##---------------------------------------------------------------------
## - The number of processes of DeleGate increases/decreases dynamically
##   based on the current load onto DeleGate.
## - A "resident" process is the one that stays for a while after it
##   finished a processing of a request/session, waiting a next
##   connection from clients to process.
#
#MAXIMA=delegated:64 # max. parallel DeleGate processes
#MAXIMA=standby:32   # max. parallel resident DeleGate processes
#MAXIMA=conpch:16    # max. parallel connection from a client host
#MAXIMA=listen:16    # size of the backlog of the entrance socket

#
##==R [0-n] ---- TIMEOUT -------------------------------------- TIMEOUT
#@ TIMEOUT=what:timeOut ... timeout idle connection, process, response
##---------------------------------------------------------------------
##
#
#TIMEOUT=io:60       # breaking idle connection to terminate the session
#TIMEOUT=standby:30  # exit of resident DeleGate on no client connection
#TIMEOUT=dns:10      # giving up DNS response of too long latency
#TIMEOUT=http-cka:30 # breaking idle HTTP connection in keep-alive 

#
##==D [0-1] ---- LOGDIR ------------------- LOGGING DIRECTORY AND FILES
#@ LOGDIR=logDirectory ... directory under which logfiles are located
##---------------------------------------------------------------------
#
#LOGDIR=${DGROOT}/log # the default
#LOGDIR=/var/spool/delegate/log
##
## - Logfiles can be split day by day using "[date+format]" specifier
##   where "format" is the one like in strftime() function.
## - For example, "%y", "%m", "%d" and "%H" mean two digits
##   representation of year, month, day and hour respectively.
## - The following is the recommended one that will be the default in
##   future version of DeleGate. With this parameter, the log-file of
##   HTTP in 31 October 2014 is "DGROOT/log/y14/m10/31/80.http".
## - On Unix, a hard link for a split log-file created with a name
##   without the "[date+format]" part, that is "DGROOT/log/80.http" in
##   the example bellow.
#
#LOGDIR='log[date+/y%y/m%m/%d]'        # split log-directory day by day
#PROTOLOG='${LOGDIR}/${PORT}.${PROTO}' # the default log-file path

#
##==S [0-n] ---- SERVCONF --------------- RESTARTING SERVICE ON WINDOWS
#@ SERVCONF=[yesall|auto|demand] ... starting service without interaction
##---------------------------------------------------------------------
## - DeleGate on Windows become a service of name with the port number
##   as "DeleGate-P8080".
## - It starts with interaction with the user on the console as follows:
##    1) stop the current service if running ... asking [y]/n
##    2) delete the current service if exists
##    3) create a new service ... asking [y]/n
##    4) set automatic start of the service ... asking [y]/n
##    5) start the new service
## - SERVCONF=yesall ... sets "y" for all interaction 1),3),4)
## - SERVCONF=auto ... sets "y" for 4)
## - SERVCONF=demand ... sets "n" for 4)
## - "yesall" behaves like "-r" option for Unix daemon.
#
#SERVCONF=yesall  # restart without interaction
#SERVCONF=auto
#SERVCONF=demand

#
##==S [0-1] ---- -r --------------------------------- RESTARTING DAEMON
## -r ... restart after terminating current daemon process
##---------------------------------------------------------------------
## - The process-id of current daemon is recorded in
##   '${DGROOT}/act/pid/${PORT}' where '${PORT}' is the "primary" port
##   of the daemon.
## - The "primary" port is the one of entrance ports given firstly in
##   "-P" or "-Q" option.
## - With "-r" option, DeleGate kills currently running DeleGate daemon
##   process by SIGTERM, and wait until the process releases the
##   entrance port.
## - This option is applicable to a daemon on Unix, or a daemon running
##   in foreground on Windows.
## - "-r" behaves like SERVCONF=yesall for Windows service.
#
#-r

#
##==S [0-n] ---- -f ----------------------------- RUNNING IN FOREGROUND
#@ -f[v] and -v[v] ... running in foreground
##---------------------------------------------------------------------
## - running DeleGate in foreground mainly for testing and debugging.
## - In this mode, DeleGate is kept connected to the console (tty) from
##   which it is invoked so that it can put log messages to the console
##   and can be terminated with Control-C.
## - Also DeleGate stays on the working directory of the parent process
##   (shell command usually) by which it is invoked so that
##   configuration files and core files are get from or put to the
##   working directory.
#
#-f     # Running in foreground
#-fv    # like -f, putting log both to console and log-file (LOGFILE)
#-v     # Running in foreground, putting log to console
#-vv    # like -v, with detailed log

#
##==L [0-1] ---- -v ------------------------------------- LOGGING LEVEL
#@ -v[stud] ... log detailness level
##---------------------------------------------------------------------
## - -v[stud] specifies detailness of information in "LOGFILE".
## - -vS specifies not creating "PROTOLOG".
#
#-vd    # detailed
#-vs    # silent, don't create LOGFILE.
#-vt    # terse
#-vu    # usual
#-vS    # suppress "PROTOLOG" for HTTP (as 80.http) and FTP (ex. 21.ftp)

#
##==A [0-n] ---- RELIABLE ---------------------------- RESTRICT CLIENTS
#@ RELIABLE=hostList ... list of client hosts to be accepted
##---------------------------------------------------------------------
## - A comma separated list of client hosts to be accepted by DeleGate.
## - It is a unnamed hostList of which syntax follows the one of value
##   part of HOSTLIST parameter.
# 
#RELIABLE="localhost,10.10.0.0/16,!10.1.2.[5-7],*.delegate.org"
#RELIABLE="+,192.168.1.1/24"
#RELIABLE="*"  # running as a server open to public

#
##==A [0-1] ---- REACHABLE --------------------------- RESTRICT SERVERS
#@ REACHABLE=hostList ... server hosts to be reachable
##---------------------------------------------------------------------
## - A comma separated list of server hosts to which connections from
##   the DeleGate are allowed.
## - It is a unnamed hostList of which syntax follows the one of value
##   part of HOSTLIST parameter.
# 
#REACHABLE="*"
#REACHABLE="*,!10.0.0.0/8"

#
##==A [0-n] ---- PERMIT ----------------- RESTRICT CLIENTS WITH SERVERS
#@ PERMIT="protoList:servList:clntList" ... permit by combination
#@ REJECT="protoList:servList:clntList" ... reject by combination
##---------------------------------------------------------------------
#
#PERMIT="+:.reachable:.reliable" ... default
#PERMIT="*:*:*" ... fully open

#
##==A [0-n] ---- AUTHORIZER ---------- AUTHENTICATION AND AUTHORIZATION
#@ AUTHORIZER=listOfAuthMethod ... auth. method of users
#@ MYAUTH=user:pass ... auth. info to be sent to server (by proxy)
##---------------------------------------------------------------------
##
#AUTHORIZER=-list{user:pass},-pam
#AUTHORIZER=-dgauth{user:pass} ... digest authentication (HTTP only)

#
##==N [0-n] ---- FORWARD ----------------------------------- FORWARDING
#@ FORWARD=gwproto://[gwuser:gwpass@]gwhost:gwport[-_-protoL:servL:clntL]
#@ SOCKS=host[:port] ... upstream SOCKS server
#@ PROXY=host[:port] ... upstream proxy in protocol proto of SERVER=proto
#@ SSLTUNNEL=host:port ... upstream HTTP proxy as a SSL-tunnel
##---------------------------------------------------------------------
## - Forwarding to upstream proxy server.
## - Upstream proxy is one of SOCKS, application proxy (HTTP or FTP),
##   or SSL-tunnel(HTTP proxy).
## - FORWARD is a generic parameter for forwarding. It defines an
##   upstream proxy by its protocol (socks, http, ssltunnel, etc.), its
##   host and port, and user name and password if necessary.
## - Multiple FORWARD can be specified and one of them are selected
##   based on destination protocol, server, and source client.
## - Examples:
#FORWARD=socks://192.168.1.1:1080
#FORWARD=http://192.168.1.1:8080 # applicable when client's speaks HTTP
#FORWARD=ssltunnel://192.168.1.1:8080
## - Examples: The above can be abbreviated as the bellow.
#SOCKS=192.168.1.1:1080
#PROXY=192.168.1.1:8080
#SSLTUNNEL=192.168.1.1:8080

#
##==N [0-n] ---- -P --------------------------------- LISTENING CLIENTS
#@ -Pnnnn ... entrance ports for clients
#@ -Qnnnn ... an entrance port for clients
##---------------------------------------------------------------------
## - The entrance port(s) on which DeleGate listens and accepts
##   connections from clients.
#
#-Q8080
#-Qlocalhost:8080
#-Q192.168.1.1:8080
#-Q8080/http
#-Q1080/socks

#
##==P [0-n] ---- SERVER ----------------- PROTOCOL OF CLIENT AND SERVER
#@ SERVER=protocol[://server[:port]] ... protocol with clients
##---------------------------------------------------------------------
## - The protocol in which DeleGate communicates with clients.
## - If a server is specified, DeleGate forwards its request to the
##   server in the protocol with clients.
#
#SERVER=ftp
#SERVER=http
#SERVER=smtp
#SERVER=socks
#SERVER=http://host.domain
#SERVER=tcprelay://host.domain:22
#SERVER=udprelay://host.domain:53
#SERVER=tcprelay://odst.-                   # transparent proxy

#
##==P [0-n] ---- MOUNT -------------------- MAPPING VIRTUAL TO PHYSICAL
#@ MOUNT="vURL rURL mountOptions" ... serving as a server and a proxy
##---------------------------------------------------------------------
## - This is the central parameter to configure DeleGate as an
##   application level origin/proxy server.
## - It maps a logical resource name in a request message from a client
##   (like URL) to (more) physical one to access to a server.
## - Also it maps a physical name in a response message from a server
##   to a logical name for a client.
## - It is applicable to HTTP, FTP, NNTP, SMTP and POP.
#
#MOUNT="/*      file:data/www/*"            # an HTTP origin server
#MOUNT="/abc/*  http://def/ghi/* moved"     # redirection
#MOUNT="/*      http://server/* nvhost=xyz" # virtual hosting
#MOUNT="/xyz/*  http://server/*             # reverse proxy
#MOUNT="/xyz/*  ftp://server/*              # protocol translation
#MOUNT="/xyz/*  sftp://server/*             # protocol translation
#MOUNT="//xyz/* smtp://server/*             # SMTP routing
#MOUNT="/-/ = AUTHORIZER=-list{adm:xyz}     # access control
#MOUNT="/-/builtin/* data:builtin/*         # customizing builtin data

#
##==N [0-n] ---- STLS ------------------------------------ SSL WRAPPING
#@ STLS={fsv,fcl}* ... inserting SSL filter
#@ CERTDIR=dirPath ... location of certificates
#@ TLSCONF=options ... configuration and debugging of SSL behavior
##---------------------------------------------------------------------
## - do TLS unconditionally, or on-demand by STARTTLS (or STLS)
##   negotiation with client and server.
#
#STLS=fcl   # wrapping communication with client by SSL
#STLS=-fcl  # like fcl, but if explicit STARTTLS negotiation is done
#STLS=fsv   # wrapping communication with server by SSL
#STLS=-fsv  # like fsv, but if explicit STARTTLS negotiation is done


#
##==C [0-1] ---- END ------------------------ ENDING CONFIGURATION FILE
#@ END ... ending of a configuration file
##---------------------------------------------------------------------
END

Lines in a configuration file after "END" is ignored.

##--------------------------------------------------------------- ANNEX

#
##==C [0-1] ---- DGOPTS ------------ OPTIONS IN AN ENVIRONMENT VARIABLE
#@ DGOPTS="-opt1;-opt2;..." ... defining options in a parameter
##---------------------------------------------------------------------
## - This parameter is for giving options starting with "-" in a
##   environment variable.
#DGOPTS="-Q8080;-r;-vd"

#
##==C [0-1] ---- -eNAME=VALUE ----------- DEFINING ENVIRONMENT VARIABLE
#@ -eNAME=VALUE ... setting environment variable
##---------------------------------------------------------------------
## - Defines an environment variable of name NAME with value VALUE to
##   be used in DeleGate or its libraries.
#
#-eTZ=JST
#-ePATH=/usr/bin:/bin

##==C [0-1] ---- scripts ------------ CONFIGURATION BY SCRIPT LANGUAGES
To configure DeleGate reflecting the system environment or so, it
should be invoked by a script language, like /bin/sh for example.
It is recommended to define dynamic configuration in a script language,
static one in a configuration file, then load it by +=URL notation in
the script.

  [console]
  $ export LD_DEBUG=symbols
  $ sh httpd.sh -fv

  [httpd.sh]
  #/bin/sh
  . dgcommon.sh                   # include a shell script
  DgExe=/path/of/delegated        # path name of DeleGate executable
  $DgExe -P80 +=dghttpd.conf $*   # invoke a DeleGate

  [dgcommon.sh]
  #!/bin/sh
  export MALLOC_CHECK_=2
  if [ "$OS" = "Windows_NT" ]; then
    export DGROOT=C:/DeleGate
  else
    export DGROOT=$HOME/delegate  # this is the default on Unix
  fi

  [dghttpd.conf]
  +=dgcommon.conf                 # load a configuration file
  SERVER=http                     # speak HTTP with the client
  HTTPCONF="max-ckapch:8"         # limit the parallel connections to 8
  HTTPCONF="methods:GET,POST"     # allow only GET and PUT method
  MOUNT="/* file:data/www/*"      # map /* to DGROOT/data/www/*
  RELAY=no                        # don't relay as a proxy server

  [dgcommon.conf]
  ADMIN=foo@bar.baz
  RESOLV=cache,sys

##==C [0-1] ---- NAME="VALUE" ------------------------------- QUATATION
## - Quations for a parameter value is not necessary in a configuration
##   file (except the MOUNT parameter).
## - But it is recommended to do so to be compatible with the
##   notation in script languages so that it can be moved between script
##   file and configuration file without modification.

#==C [0-1] ---- #!magic ---- CONFIGURATION FILE AS AN EXECUTABLE SCRIPT
On Unix or Cygwin, a configuration file can be used as an executable
script.  To do so, the configuration file is needed to be with
executable flag set, and the file starts with a line as this:
#!/path/of/delegated +=

#######################################################################