DeleGate 9.9.0のインストールと設定
XenServerでサーバ仮想化+DeleGateでグローバルIPひとつを使い回す - yuhei.kagaya
XenServerのインストールと仮想マシンの作成 - yuhei.kagaya
の続きで、DeleGateを使ってLAN内部のサーバを公開する。
ソースをもってきてコンパイル
DeleGateの現在の最終バージョン9.9.0をインストールした。
コンパイルするときに以下はとくにanonymous-FTPを必要なかったのでやらなかった。
vi src/Makefile (*a) anonymous-FTP アクセス時などに、アクセス者名として使われるアドレスを、 以下のように定義して下さい。 #ADMIN = undef ADMIN = hoge@hoge.jp
cd /usr/local/src wget ftp://ftp.delegate.org/pub/DeleGate/delegate9.9.0.tar.gz tar xzvf tar xzvf delegate9.9.0.tar.gz cd delegate9.9.0/src make ... make[1]: Entering directory `/usr/local/src/delegate9.9.0/src' /usr/local/src/delegate9.9.0/mkmake.exe +r -ckconf Makefile.chk Makefile.tst DELEGATE_CONF "ar" "undef" "" ckconf: ADMIN = 'undef' get ADMIN value interactively ... !!!!!!!!!!!!!!!!!!!! WARNING !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! You should have defined ADMIN as: ! ! ADMIN = mail-address-of-the-DeleGate-administrator ! ! either in DELEGATE_CONF or in the Makefile. ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Enter your E-mail address [root@hoge.jp]: root@hoge.jp
コレで、src/deletaged ができた。
次に、インストール。
/usr/local/delegate にインストールして、
/usr/local/delegate/var 配下にキャッシュやログなどを置くことにした。
mkdir -p /usr/local/delegate/bin mkdir -p /usr/local/delegate/conf/conf.d mkdir -p /usr/local/delegate/var/cache mv /usr/local/src/delegate9.9.0/src/delegated /usr/local/delegate/bin/ /usr/sbin/groupadd delegate /usr/sbin/adduser -g delegate -d /usr/local/delegate/var -s /bin/false delegate chown -R delegate.delegate /usr/local/delegate/var
起動スクリプトの作成
こちらを参考にさせていただき、起動スクリプト /etc/init.d/delegate を作成。
delegate設定
vi /etc/init.d/delegate
#!/bin/sh # # chkconfig: 35 90 10 # description: Delegated, multi-purpose application level gateway # processname: delegated # # This file was automatically customized by debmake on Mon, 1 Dec 1997 17:23:23 +0900 # # Written by Miquel van Smoorenburg <miquels@drinkel.ow.org>. # Modified for Debian GNU/Linux by Ian Murdock <imurdock@gnu.ai.mit.edu>. # Modified for Debian by Christoph Lameter <clameter@debian.org> DAEMON=/usr/local/delegate/bin/delegated DGROOT=/usr/local/delegate/var SITECONF=/usr/local/delegate/conf/site.conf CONFDIR=/usr/local/delegate/conf/conf.d OWNER=delegate/delegate if [ ! -x $DAEMON ]; then echo "$DAEMON does not exist." exit 0 fi if [ ! -r $SITECONF ]; then echo "$SITECONF does not exist." exit 0 fi if [ ! -d $CONFDIR ]; then echo "$CONFDIR does not exist." exit 0 fi for p in $CONFDIR/*:[0-9]*.conf do if [ ! -f $p ]; then echo "[addr:port].conf does not exist." exit 0 fi done options="DGROOT=$DGROOT OWNER=$OWNER" case "$1" in start) if [ "$2" = "" ]; then for p in $CONFDIR/*:[0-9]*.conf do addrport=`basename $p .conf` $DAEMON -P$addrport $options +=$SITECONF +=$p done else if [ -f $CONFDIR/$2.conf ]; then $DAEMON -P$2 $options +=$SITECONF +=$CONFDIR/$2.conf else echo "no configuration for address:port $2 found." exit 1 fi fi ;; stop) if [ "$2" = "" ]; then for p in $CONFDIR/*:[0-9]*.conf do addrport=`basename $p .conf` $DAEMON -Fkill -P$addrport $options +=$SITECONF done else $DAEMON -Fkill -P$2 $options +=$SITECONF fi ;; restart|reload) if [ "$2" = "" ]; then for p in $CONFDIR/*:[0-9]*.conf do addrport=`basename $p .conf` $DAEMON -r -P$addrport $options +=$SITECONF +=$p done else if [ -f $CONFDIR/$2.conf ]; then $DAEMON -r -P$2 +=$SITECONF $options +=$CONFDIR/$2.conf else echo "no configuration for address:port $2 found." exit 1 fi fi ;; *) echo "Usage: /etc/init.d/delegate {start|stop|restart|reload} [addr:port]" exit 1 ;; esac exit 0
chmod 770 /etc/init.d/delegate
こちらのページを参考にさせていただき、CONFDIR=/usr/local/delegate/conf/conf.d に置いたファイル名が、待ち受けアドレス:ポートを表し、ファイル内容で詳細を記述する形式にした。
設定ファイル例:/usr/local/delegate/conf/conf.d/192.168.11.2:11022.conf
※DeleGateの動作するサーバのIPアドレス192.168.11.2のポート番号11022で動作させる設定ファイル
自動起動の設定
cd /etc/init.d/ /sbin/chkconfig delegated on /sbin/chkconfig --list delegated delegated 0:off 1:off 2:on 3:on 4:on 5:on 6:of
DeleGate全体の設定 site.conf
vi /usr/local/delegate/conf/site.conf CRON="0 3 * * * -expire 7" ADMIN="hoge@hoge.jp"
LANのなかのサーバに外部ネットワークからSSHを中継するDeleGateの設定
XenServerでサーバ仮想化+DeleGateでグローバルIPひとつを使い回す - yuhei.kagayaのvm11(192.168.11.)に、
ポート番号11022に接続してSSHで行けるようにする。
vi /usr/local/delegate/conf/conf.d/192.168.11.2:11022.conf RELIABLE="*" SERVER="tcprelay://192.168.11.11:22/" TIMEOUT=con:10800,io:10800,login:10800
ファイヤーウォールあけとく。
iptables -I RH-Firewall-1-INPUT 21 -p tcp -m state --state NEW -m tcp --dport 11022 -j ACCEPT /etc/init.d/iptables save /etc/init.d/iptables restart
この設定のDeleGateを起動、停止、再起動
/etc/init.d/delegate start 192.168.11.2:11022 /etc/init.d/delegate stop 192.168.11.2:11022 /etc/init.d/delegate restart 192.168.11.2:11022
DeleGateのリバースプロキシ機能を使ってLANのなかのサーバを公開する設定
XenServerでサーバ仮想化+DeleGateでグローバルIPひとつを使い回す - yuhei.kagayaの全体図のように
外部ネットワークから
- http://dev31.hoge.jpのリクエストがきた場合にvm31へ
- http://dev32.hoge.jpのリクエストがきた場合にvm32へ
と、リクエストをマウントしてDeleGateから代理リクエストしてクライアントへ返す。
vi /usr/local/delegate/conf/conf.d/192.168.11.2:80.conf SERVER=http URICONV="" ### vm31 HOSTLIST="vm31-virtualhost:dev31.hoge.jp" MOUNT="/* http://192.168.11.31/* nvhost=vm31-virtualhost,nvserv=-thru" REACHABLE="192.168.11.31" ### vm32 HOSTLIST="vm32-virtualhost:dev32.hoge.jp,aiueo.hoge.jp,kakikukeko.hoge.jp" HOSTLIST="vm33-virtualhost:+,test.hoge.jp" MOUNT="/* http://192.168.11.32/* nvhost=vm32-virtualhost,nvserv=-thru" REACHABLE="192.168.11.32" RELIABLE="*" LOGFILE="" PROTOLOG="${LOGDIR}/${PORT}/[date+%d].${PROTO}" CONNECT="direct:*:*"
URICONVを設定しないと、クライアントに返すHTMLドキュメント中のURIが/に書き換えられてしまう。cssやimageタグ、aタグのsrcにhttp://〜から指定しても/から書き換えられてしまう。
なので、わざとURICONVの設定を効かないようにする。
http://www.delegate.org/delegate/Manual.htm#HOSTLISTはカンマで区切ることにより複数のホストに一つの名前をつけておける。
名前をつけたホストのリストはnvhostで指定できる。また、「+,」から始めれば同リストにホストを追加できる。
上の場合、
- dev32.hoge.jp
- aiueo.hoge.jp
- kakikukeko.hoge.jp
- test.hoge.jp
で来たリクエストをマウントして192.168.11.32に代理リクエストするようになる。
Mountオプションの「nvhost=domain,nvserv=-thru」を使うことで、ドメインで来たリクエストをそのまま対象のサーバにドメイン名でリクエストすることができる。なので、対象サーバ(上の例だと192.168.11.31や192.168.11.32)のApacheではVirtualHostをきる設定が使える。
こちらのサイトを参考にさせていただきました。
DeleGate Home Page (www.delegate.org)
delegate設定
猫ぐらし: DeleGate(9.1.1)インストール&設定
Delegateのインストール
delegate のインストール
DeleGate version 9.9 リファレンスマニュアル の日本語訳
DeleGate 設定例
DeleGateðgÁÄLANàÌT[oðöJ·éû@