harumaki.net

インフラ屋の覚書や、ラーメン食べある記とか。

bash GNU/Linux network

ポート転送ツール rinetd

投稿日:2007年3月20日

Last Updated on 2018年6月13日 by かんりにん

[pukiwiki]

#topicpath

#contents

ポート指定で別の外部ホストへサービスを転送できるツール。
受付ホストと転送先ホストをIPアドレスで指定するところがポイント。
URLをそのままに、ホストだけ変更するような場合に有効。

【本家サイト】

http://www.boutell.com/rinetd/

【ダウンロード元】

-ソース
本家サイトから
http://www.boutell.com/rinetd/http/rinetd.tar.gz

-RPM
RHEL4版(ソースは共通なのでRHEL3でもインストール可能)
initスクリプトやlogrotateスクリプト、コンフィグファイルも含まれ
一通りの環境がセットアップできるので、こちらがお奨め。
ftp://sea-mew.jp/rpms/el4/i386/rinetd-0.62-5.RHEL4.i386.rpm

【参考】
Linuxサーバhacks

【検証環境】
テスト環境:192.168.0.12(eth0)、192.168.1.13(eth1)
転送先環境:192.168.100.212

**1)インストール [#hb40db37]

***1-1)ソース版 [#xd640004]

+ダウンロードと展開
# wget http://www.boutell.com/rinetd/http/rinetd.tar.gz
# tar -zxvf rinetd.tar.gz
+Makefileの修正
デフォルトのMakefileではmanページのコピー先が異なるため修正。
# cd rinetd
# cp -p Makefile Makefile.org
# vi Makefile
[変更箇所]
8c8
< install -m 644 rinetd.8 /usr/man/man8 — > install -m 644 rinetd.8 /usr/share/man/man8
+インストール
# make
# make install
インストールされるのは実行ファイルとmanページ。
/usr/sbinにバイナリが、/usr/shareにmanページがコピーされる。

***1-2)RPM版 [#vd2fb2f9]

-インストール
# cd /usr/src/redhat/RPMS/i386/
# wget ftp://sea-mew.jp/rpms/el4/i386/rinetd-0.62-5.RHEL4.i386.rpm
# rpm -ivh rinetd-0.62-5.RHEL4.i386.rpm
Preparing… ########################################### [100%]
1:rinetd ########################################### [100%]
#
-構成ファイル
インストールされるファイルは以下のとおり。
/etc/logrotate.d/rinetd
/etc/rc.d/init.d/rinetd
/etc/rinetd.conf
/usr/sbin/rinetd
/usr/share/doc/rinetd-0.62
/usr/share/doc/rinetd-0.62/CHANGES
/usr/share/doc/rinetd-0.62/README
/usr/share/doc/rinetd-0.62/index.html
/usr/share/man/man8/rinetd.8.gz

**2)セットアップ [#f01951c5]

設定ファイルは/etc/rinetd.confとなるが
ソースではデフォルトでは用意されていない。
以下、RPMでの環境をベースに設定。
-設定
# cd /etc/
# vi rinetd.conf
-[設定内容]
書式は
[宛先IP] [宛先ポート] [転送先IP] [転送先ポート]
0.0.0.0 80 192.168.100.212 80
-ログファイルの設定
デフォルトは/var/log/rinetd.logとなる。
ここをコメントアウト。
logfile /var/log/rinetd.log
-ログ出力形式の設定
デフォルトではタブ区切りの独自のログフォーマットだが
以下の設定を追加すると、apacheのアクセスログと同じ形式のログとなる。
logcommon

**3)動作確認 [#leb03ec0]

***3-1)デーモン起動 [#jaeeb581]
RPMではinitスクリプトが用意されるので
こちらから起動。
# /etc/init.d/rinetd start
rinetd を起動中: [ OK ]
#
同時にログファイルも生成される。
# ll /var/log/rinetd.log
-rw-r–r– 1 root root 0 3月 14 20:52 /var/log/rinetd.log

***3-2)動作確認 [#g220a164]

ためしにIPアドレス指定でブラウザからログインし、転送が実行されることを試す。

-接続元
192.168.0.2(クライアントPC)

-接続先
http://192.168.0.12/

-転送先
http://192.168.100.212/

但しブラウザのアドレスバーのURLは変更されず、かつ転送先のサイトでリンク先へ遷移しても
最初にリクエストしたURLが保持されたままページが遷移される。
今回はIPアドレスでテストしたが、サーバのIP変更などでURLの変更が好ましくない場合に有効。

***3-3)ログ出力形式 [#k4f44bfb]

-デフォルト
–書式
[日時] [リクエスト元] [接続先IP] [ポート] [転送先IP] [転送先ポート] [受信bytes] [転送bytes] [動作結果]
–出力結果
14/Mar/2007:21:05:53 192.168.0.2 192.168.0.12 80 192.168.100.212 80 10060 5769 done-local-closed
14/Mar/2007:21:05:53 192.168.0.2 192.168.0.12 80 192.168.100.212 80 9665 5534 done-local-closed
-common形式(logcommonオプション有効)
apacheのアクセスログと同じ書式。
–出力結果
192.168.0.2 – – [14/Mar/2007:21:08:58 +0900] “GET /rinetd-services/192.168.0.12/80/192.168.100.212/80/done-local-closed HTTP/1.0” 200 34182 – – – 10339
192.168.0.2 – – [14/Mar/2007:21:08:58 +0900] “GET /rinetd-services/192.168.0.12/80/192.168.100.212/80/done-local-closed HTTP/1.0” 200 4387 – – – 7671

**4)そのほかの設定 [#p4d0bace]

***4-1)chkconfig [#u938f002]

chkconfig –addでそのまま自動起動の設定を追加することが可能。
# chkconfig –add rinetd
# chkconfig –level 345 rinetd on

***4-2)logrotate [#f45fe3ce]

RPMではインストールと同時に
/etc/logrotate.dにスクリプトが配置されるので
そのままローテートまで可能。

# cat /etc/logrotate.d/rinetd
/var/log/rinetd.log {
missingok
notifempty
delaycompress
postrotate
/sbin/service rinetd restart 2> /dev/null > /dev/null || true
endscript
}

**5)注意点 [#aa826880]

***サービス起動時のポートの競合 [#le54cf9b]

rinetd.confに追加したIPとポートは、実行時にrinetdデーモンがポートを使用(待機)するため
元のサービスを実行するとポートが競合し、起動できなくなる(当たり前だが)。

apacheで複数のグローバルIPをバーチャルホストで使用している場合は
転送するIPアドレスのバーチャルホスト設定を無効化してからapacheとrinetdをそれぞれ起動すること。

ちなみに以下は今回検証した192.168.0.12で
eth1(192.168.1.13)をapacheで通常通りサービスを提供し
eth0(192.168.0.12)をrinetdで転送した際のlsofの結果。
# lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
httpd 3414 root 3u IPv4 2989054 TCP 192.168.1.13:http (LISTEN)
httpd 3417 apache 3u IPv4 2989054 TCP 192.168.1.13:http (LISTEN)
httpd 3418 apache 3u IPv4 2989054 TCP 192.168.1.13:http (LISTEN)
httpd 3419 apache 3u IPv4 2989054 TCP 192.168.1.13:http (LISTEN)
httpd 3420 apache 3u IPv4 2989054 TCP 192.168.1.13:http (LISTEN)
httpd 3421 apache 3u IPv4 2989054 TCP 192.168.1.13:http (LISTEN)
httpd 3422 apache 3u IPv4 2989054 TCP 192.168.1.13:http (LISTEN)
httpd 3423 apache 3u IPv4 2989054 TCP 192.168.1.13:http (LISTEN)
httpd 3424 apache 3u IPv4 2989054 TCP 192.168.1.13:http (LISTEN)
rinetd 3586 root 4u IPv4 2989529 TCP 192.168.0.12:http (LISTEN)
#

[/pukiwiki]

-bash, GNU/Linux, network
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

phpinfoの内容をコマンドラインで出力

phpの環境確認のため、いちいちhtdocs以下にinfo.phpとかを置くのもアレなので コマンドライン上で手っ取り早く。 [pukiwiki] 参考サイト  お世話になっております!  http: …

no image

RPMパッケージのJcodeインストール

[pukiwiki] &topicpath;   [参照サイト] お世話になっています。 http://fedorasrv.com/cpan2rpm.shtml **【インストール手順】 イ …

no image

[Juniper]SRX ssh公開鍵認証でログイン

LinuxサーバーへdailyでSRXのコンフィグをバックアップするべく、tftpサーバーを設定しようと思ったら どうやらtftpらしきものがないので、sshでリモートコマンドを使ってコンフィグをとっ …

[AWS] EC2 HVMタイプを使う時のファイルシステム周りの作業1(容量拡張、growpart利用)

hvmタイプのAMIを使用する際に初期設定として、ファイルシステムの容量拡張が必要になる。 インスタンス作成時にEBSを標準サイズから拡張してセットしても マウントされたストレージサイズが上がるだけで …

no image

[Linux]statコマンド

ファイル、および当該ファイルのファイルシステムのステータスを表示する。 実際には、指定したファイルのinode情報を表示するコマンドの様子。 -参考にしたサイト お世話になっております! Linux …