Web カメラ*1の画像ファイルとか、ノート PC から cron で定期的にサーバへ送信している。しかしPUSHじゃなくてPULLも活用したい。
それから Web サーバはホスティングサーバなのであまりヘビーな事はできないし、ツールのビルドに必要なライブラリとかを一般ユーザで用意するのもいろいろ面倒ということで、一部の処理は手元のホストでやらせてもいいかなと。
だいたいいつもIPマスカレード下にいるので、トンネルを用意しないと。 SSHがやはりお手軽かな。 例えば、
ssh -R XXXX:127.0.0.1:80 www.naney.org
しておけば www.naney.org 上からそのホストに
wget http://localhost:XXXX/service.cgi?foo=1234
などとしてPULLできるようになる。 ...はずだがうまくいかないや。何故?
プライベートネットワーク同士ではうまくいったので「ルータがらみ?」かと思ったが、別の外部ホストに対して実験してみたところそっちではうまくいったので、そうでもない様子。
でいろいろチェックしてみたところ www.naney.org で
Feb 2 12:08:41 yyyy sshd[61628]: error: Hm, dispatch protocol error: type 80 plen 33
とエラー吐いてた。 もしやと思って ssh 実行時に -1 したら成功。 通常の SSH接続だと ssh -2 でもつながるし、LocalForward でもプロトコル2でつながっているんだけどなぁ。
そういえば ssh -4 は 'Use IPv4 only.' (OpenSSH_3.6.1p2)。 'Force protocol version 4' が必要な時代がきたらどうするのかな?
*1休止中
プライベートネットワーク上に設置したBL-C10を外部からアクセスできるようにする時の方法を確認。
ということで、公開しているサーバでHTTPを中継するという方向で。 となると SSH の remote port forwarding か。
として192.168.0.0/24 にいる自分のPCから
ssh -R 3000:192.168.0.X:80 www.example.com
で www.example.com:3000 にアクセスするとライブカメラが見られるようになる。 ただし www.example.com の sshd の設定で
GatewayPorts yes
になっていないと、他のホストからアクセスできない。 www.example.com 上の stone で外部からアクセスできるようにさらに転送用のポートを作る。
自分のPCから
ssh -R 3000:192.168.0.X:80 www.example.com stone 127.0.0.1:3000 30001
で、
www.example.com:3001 -> www.example.com:3000 -> 192.168.0.X:80
と転送されるようになる。 実験も成功 (実験環境では ssh を実行する時に -1 オプションをつけないと -R がうまく動かない事を忘れていてちょっとはまった)。
自宅(ADSL接続)上の BL-C10 を上の方法で晒してアクセスしてみる。 ADSL回線を上って下る事になるが、ちょっと覗くにはそれなりの描画更新ができている様子。 BL-C10 の内蔵 Web サーバで動画を見ながらカメラを操作した時のレスポンスが悪かったのだが、これは stone の -f オプションで子プロセスを数個上げておくようにすることで改善された。
上の方法だと ssh を止めてもリモートホストの stone のプロセスが残ってしまい、別途 kill しないといけないのでちょっと面倒。 何かうまい方法はないかな。
Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。
nDiki は1999年1月に始めたコンピュータ日誌を前身とする Naney の Web 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。
※内容は個人的見解であり所属組織とは関係ありません。