サーバーにやってきた TCP セッションをそのまま他のサーバーやポートにリダイレクトする必要がでてきた。
xinetd でも出来るみたいだが、うちでは xinetd がうまく動かなかったので rinetd を使ってみることにした。そのときのメモを残す。
FTP のリダイレクトは出来ないので注意 (本当は FTP のリダイレクトやりたかった)。
OS | VineLinux 2.6 |
---|
配布元:http://www.boutell.com/rinetd/
配布元のページから最新の rinetd.tar.gz を入手し解凍する。
# tar zxvf rinetd.tar.gz
Makefile を VineLinux 用に書き換える。最終行のマニュアルのインストール場所がデフォルトと異なっていた。
CFLAGS=-DLINUX -g
rinetd: rinetd.o match.o
gcc rinetd.o match.o -o rinetd
install: rinetd
install -m 700 rinetd /usr/sbin
install -m 644 rinetd.8 /usr/share/man/man8
make してインストールする。インストールのときだけは root 権限が必要になる。
# make
# make install
/etc 以下に rinetd.conf というファイルを作りそこに設定を書く。以下の例では 25 番ポートへの接続を 192.168.0.100 の 25 番ポートへリダイレクトしている。
-------- /etc/rinetd.conf --------
0.0.0.0 25 192.168.0.100 25
logfile /var/log/rinetdlog
1 行目はリダイレクトの設定をしている。以下の 4 つの情報を書く。
バインドするアドレス バインドするポート 接続するアドレス 接続するポート
バインドするアドレスを 0.0.0.0 にするとサーバへのすべてのコネクションをリダイレクトする設定になる。
2 行目はログファイルの指定をしている。デフォルトではログをファイルに残さないので、ログが欲しいときにはファイルを指定する必要がある。
allow 206.125.69.*
上記のような形で allow や deny のルールも指定できるらしい。
/etc/rc.d/init.d/rinetd というファイルを作り以下の内容を書き込む (inet のマネなのでどこかおかしいかも)。
-------- /etc/rc.d/init.d/rinted --------
#! /bin/sh
#
# rinet internet ``redirection server''
#
# chkconfig: 345 50 50
# URL: http://www.boutell.com/rinetd/
# processname: rinetd
# pidfile: /var/run/rinetd.pid
# config: /etc/sysconfig/network
# config: /etc/rinetd.conf
# Source function library.
. /etc/rc.d/init.d/functions
# Get config.
. /etc/sysconfig/network
# Check that networking is up.
if [ ${NETWORKING} = "no" ]
then
exit 0
fi
[ -f /usr/sbin/rinetd ] || exit 0
RETVAL=0
# See how we were called.
case "$1" in
start)
echo -n "Starting RINETD services: "
daemon rinetd
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/rinet
;;
stop)
echo -n "Stopping RINETD services: "
killproc rinetd
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/rinet
;;
status)
status rinetd
RETVAL=$?
;;
restart)
$0 stop
$0 start
RETVAL=$?
;;
reload)
killall -HUP rinetd
RETVAL=$?
;;
*)
echo "Usage: rinet {start|stop|status|restart|reload}"
exit 1
esac
exit $REVAL
起動する場合
/etc/rc.d/init.d/rinetd start
終了する場合
/etc/rc.d/init.d/rinetd stop
OS 起動時に自動的に起動するように設定する。
root になって chkconfig で起動の設定をする。
% chkconfig --level 345 rinetd on