stone

スポンサーリンク

stoneとは

stoneを使うとパケットの中継やプロキシ動作を簡単に設定することができます。
また、いろいろと小回りの利く機能のわりにはコードのサイズが非常に小さくて軽いのも特徴の一つですね。
手軽にポートフォワードを設定したい時などに非常に重宝します。

インストール

stone-2.3e の例です。
※ 2.3c など下位バージョンもほぼ同様
Simple Repeater stoneからアーカイブを取得し、展開します。

 % gzip -dc stone-2.3e.tar.gz | tar xvf -
 % cd stone-2.3d-2.3.2.7

後はただ単に make するだけです。
ただし、ビルド環境を指定します。
Linux なら make linux となります。
インストーラーは付いていないので生成されたstoneプログラムを適当な場所へコピーすればインストール完了です。
例えば、/usr/local/bin にコピーしたければ下記のような感じ。

 % make linux
 % sudo cp -p stone /usr/local/bin

CentOS7 でのビルド

CentOS-7.6 上での例です。
※ CentOS-6.x 系でも同様です
上記のように make linux すると、下記のようなエラーが出ます。

stone.c: 関数 ‘strnUser’ 内:
 stone.c:4509:32: エラー: 不完全型のポインタへの間接参照
       socklen_t optlen = sizeof(*cred);
                                 ^
 stone.c:4524:46: エラー: 不完全型のポインタへの間接参照
       snprintf(str, STRMAX, "%d", (cred ? cred->gid : -1));
                                               ^
 stone.c:4536:28: エラー: 不完全型のポインタへの間接参照
    int ret = getpwuid_r(cred->uid, &pwbuf, sbuf, STRMAX, &passwd);
                             ^
 stone.c:4551:28: エラー: 不完全型のポインタへの間接参照
    int ret = getgrgid_r(cred->gid, &gbuf, sbuf, STRMAX, &group);
                             ^
 stone.c:4557:46: エラー: 不完全型のポインタへの間接参照
       snprintf(str, STRMAX, "%d", (cred ? cred->uid : -1));

以下のように Makefile を修正して、コンパイル時に -D_GNU_SOURCEを付加するとビルドできます。

diff Makefile.orig Makefile
 100c100
<     $(MAKE) FLAGS="-O -Wall -DCPP='\"/usr/bin/cpp -traditional\"' -DPTHREAD -DUNIX_DAEMON -DPRCTL -DSO_ORIGINAL_DST=80 -DUSE_EPOLL $(FLAGS)" LIBS="-lpthread $(LIBS)" stone
---
>     $(MAKE) FLAGS="-O -Wall -DCPP='\"/usr/bin/cpp -traditional\"' -DPTHREAD -DUNIX_DAEMON -DPRCTL -DSO_ORIGINAL_DST=80 -DUSE_EPOLL -D_GNU_SOURCE $(FLAGS)" LIBS="-lpthread $(LIBS)" stone 

使用方法

様々な使用方法があるのですが、その中で簡単な例を。

proxy として使用。ログを syslog へ出力。

 % stone -l proxy 8080 

localhost:8888のパケットをxxx:8888に中継する

 % stone xxx:8888 localhost:8888

コメント

タイトルとURLをコピーしました