« ピアノ | トップページ | postgresにアクセスするWindowsアプリを作る »

2009年3月 8日 (日)

TCPポートのリダイレクト

サーバのリプレイス等でTCP接続をリダイレクトさせたい場合の方法を調べた。

Linuxにはiptablesというコマンドがあって、
通信を受けたり出したりする時の処理を設定できるらしく、
下記のコマンドでリレーさせることができた。

# iptables -t nat -A PREROUTING -p tcp --dport [port1] -j DNAT --to-destination [hostname:port2]
# iptables -t nat -A POSTROUTING -p tcp -d [hostname] --dport [port2] -j SNAT --to-source [localhost]

元ネタ: http://www.vector.co.jp/soft/unix/net/se304540.html

ところが、上記では何故かうまくいかないケースがあり、
一時的にTCP通信の受け流しをさせたいだけなので
プログラムで中継させたいと思ったのだが、
良さげなソフトが見つからなかった。
(世の中には超便利なのが絶対あると思うんだけど)

ので、自分で作ることにした。

で、できた。-> 「TcpRedirect.tar.gz」をダウンロード
中身は200行ちょっとのC++ソースコード(やっつけ)です。
不具合や改善点などお気づきのことがありましたら、
お気軽にご連絡いただけると幸いです。

● コンパイルの方法

$ tar xzvf TcpRedirect.tar.gz
$ g++ -o TcpRedirect TcpRedirect.cpp

● 使い方

$ ./TcpRedirect [listen port] [destination host] [destination port]

● 実行例

$ ./TcpRedirect 8000 192.168.1.51 80
connect:192.168.1.12         クライアントからの接続
192.168.1.12->:663[byte]    クライアントからの通信
192.168.1.12<-:276[byte]    サーバーからの通信
192.168.1.12<-:-1[byte]      サーバーから切断
disconnect:192.168.1.12      切断処理実施

● 動作環境

Linuxにg++が入っていれば大丈夫だと思います。
CentOS release 5.2で動いています。

初めてソケットプログラミングをしたのが高専の時で、
環境はSonyのNEWSだったのを思い出した。
会社に入ってからWindowsで通信テストのための
プログラムはいくつか書いたけど、
生ソケットでselectとか使ったのは、学生のとき以来ですね。

こういう低レイヤのプログラム、今でも好きだなぁ。
組込みC++開発者からITのマネージャに転職したの
もったいなかったかなぁ。

|
|

« ピアノ | トップページ | postgresにアクセスするWindowsアプリを作る »

コメント

それなんて stone ?
http://www.gcd.org/sengoku/stone/Welcome.ja.html

投稿: yyuuii | 2009年3月12日 (木) 21時38分

そお!これこれ!!会社で聞いたことあった!!!
TCP、port、redirect、relayとかで検索したんだけど、見つけられなかったんですよぉ。

投稿: くす | 2009年3月13日 (金) 00時02分

大学内しかアクセスできないサービスがあり、VPNでつなごうと考えましたが、recirect tcp でググってこのページがヒットしました。

結果、思い通りにつながって万々歳です。

ありがとうございました。

投稿: hiroshi kimura | 2010年10月 1日 (金) 23時48分

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/533276/44269402

この記事へのトラックバック一覧です: TCPポートのリダイレクト:

« ピアノ | トップページ | postgresにアクセスするWindowsアプリを作る »