理工系研究者のための Mac OS X, Windows, Linux メモ
 
ホーム >> UNIX >> stone

stone

  1. インストール
  2. 443番ポート(https用)しか通さないproxyを越えて外部のsshサーバーと通信
  3. sshの接続を維持する
  4. Mac OS X の起動時にstoneサーバーを起動する

インストール

環境:Vine Linux 3.0

Mac OS X 上でmakeする時は、

$ make macosx-ssl

で問題がなかったが、Linux上でmakeするためには OpenSSL関連のヘッダーなどが必要。Vine Linux 3.0 では openssl 自体はインストールされているが、ヘッダー類は入っていないので、OpenSSLソースを持ってきて再度インストールしておく。

OpenSSLのウエブサイトからソースをとってくる。現時点の最新版は openssl-0.9.7d.tar.gz だった。展開してインストールする。

$ ./config
$ make
# make install

次に Stoneのウエブサイトから最新のソースファイル stone-2.2c.tar.gz を持ってくる。またはこちらのウエブサイトに書かれているように、CVSサーバーからとってきても良い。

ソースを展開して、makeする。

$ make

すると、プラットフォームを指定するように指示がでる。

$ make linux-ssl

ssl対応にする事で、通信を https の通信のように偽装する事が出来るのでここでは ssl を付けてmakeしておく。出来た stone を /usr/local/bin などにコピーする。

後に書くようにserver側でstoneをssl暗号化を有効にして立ち上げてみると
/path/to/certs/stone.pem が無いかのようなエラーがでた。これに対応するために、ここのウエブサイトに書かれているように

# cd /path/to/certs
# make stone.pem

として stone.pem を生成する事で無事に起動できるようになった。server側がMac OS Xだとファイルの位置が異なっているが locateコマンドなどで探して設定する。

443番ポート(https用)しか通さないproxyを越えて外部のsshサーバーと通信

詳しい説明はこちらのサイトに書いてある。

方法だけ書くと、まずファイアーウォールの外にある server 側でstoneを次のようにして立ち上げる。root で起動する。

server# stone localhost:22 443/ssl

これで待ち受け状態になる。次にclient側からは次のように stone を起動する。

client% stone localhost:10443/ssl 10022 -- proxy:8080/http 10443 "CONNECT server:443 HTTP/1.0"

server側で sshd が起動しているのを確認しておく。これで、proxyを越えた暗号化通信の準備が出来た。

最後にclient側の 10022番ポートにたいしてsshを起動する。

$ ssh -p 10022 localhost

sshの接続を維持する

sshでリモートログインした場合、通信経路にNAT機能を持つルーターが入っていると、通信していない間に接続が切れてしまう事がある(参考:NAT環境で放置したSSH接続が切れる問題への対処)。

これを防ぐには、定期的にssh client側から信号を送ってやればよい。client側の OpenSSH Heartbeat/Watchdog for OpenSSH のパッチを当てて、コンパイルし直す。

必要なものは

openssh-3.8p1.tar.gz(直リンク)
openssh-3.8p1-watchdog.patch.tgz (直リンク)

あとはソースを展開してパッチを当てて、コンパイル。OpenSSHをコンパイルするにはzlibをあらかじめインストールしておく必要がある。

$ tar zxvf openssh-3.8p1.tar.gz
$ tar zxvf openssh-3.8p1-watchdog.patch.tgz
$ cd openssh-3.8p1
$ patch -p0 < ../openssh-3.8p1-watchdog.patch
$ ./configure
$ make
# make install

ターミナルを開き直してsshを起動する。

例えば、inside.somehost.com から outside.otherhost.com にトンネルを掘る場合には、次のように指定する。

inside$ ssh -o 'Heartbeat 60' -N -p 10022 localhost -R 2200:outside.otherhost.com:22

これによって接続が維持され、外部からトンネルを通って接続するには、

outside$ ssh -p 2200 localhost

とすればよい。

.ssh/config に

Heartbeat 60

と書いておけば オプション -o で指定しなくてもよい。

何秒おきに信号を送るかはルーターに依るが、家にある無線ルーターは120秒で切れる模様。したがって、110秒に設定したら切れなくなった。

Mac OS X の起動時にstoneをサーバーとして起動する

環境:Mac OS X 10.3

参考:mac magazine X

Mac OS X 起動時にアプリケーションを立ち上げるには、 StartupItems を使う。

/Library/StartupItems/

以下にディレクトリ stone を作成する。そのディレクトリ stone の中に スクリプトファイル stone を作成する。このスクリプトファイルはディレクトリ名と同じにしなければならない。stone には次のように記述する。

#!/bin/sh
. /etc/rc.common
##
# Start up stone
##
if [ "${STONE:=-NO-}" = "-YES-" ]; then
ConsoleMessage "Starting Stone"
/usr/local/bin/stone localhost:22 443/ssl &
fi

また stone/ 以下に StartupParameters.plist を作成。以下のように記述。

{
Descrption = "Stone";
Provides =("Stone");
Requires =("Resolver");
OrederPreference="None";
Messages =
{
start = "Starting Stone";
stop = "Stopping Stone";
};
}

最後に、/etc/hostconfig に

STONE=-YES-

を追記する。