MacでSOCKS非対応のアプリケーションをSOCKS経由で通信できるようにするtsocks

WindowsにはFreeCapというソフトウェアがあり、これを使うとSOCKS非対応のアプリケーションでもSOCKS経由で通信できるようになります。

今時SOCKSなんていつ使うんだよ、と思われるかもしれないですが、意外と使うのです。弊社はゲートウェイになっているサーバーがあり、そのサーバー経由でグローバルIPを持っていないデータベースサーバーやアプリケーションサーバーに接続してMySQL Query Browserなどを使っています。図解すると以下のような感じになります(SOCKSなので、DBサーバーからはあたかもゲートウェイサーバーからアクセスがあったように見えます)。

自分のPC --(SSH tunnel)--> ゲートウェイサーバー(SOCKSサーバー) ---> DBサーバー or APサーバー

Windowsであれば前述のFreeCapを使えば、SOCKS非対応のMySQL Query BrowserなどもSOCKS経由させることができ、プライベートIPしか持っていないデータセンター内のDBサーバーなどにアクセスできるわけです。

Mac OS XでFreeCapのようなものがないかと探していたら、tsocksというソフトを見つけました。これもFreeCapのように、SOCKS非対応のソフトのパケットを乗っ取り、SOCKS経由にできるソフトです。

tsocks自身はLinux向けに開発されていると言うこともあり、sourceforgeからのものだとMacには入ってくれませんでした。なので、MacPortsMacPortsをGUIで管理できるPorticusなどでインストールすることになります。

インストール後、/opt/local/etc/tsocks.confを以下の内容で作成します。

server = 127.0.0.1
server_type = 4
server_port = 1080

その後、SSHで適宜SOCKSサーバーにトンネルを掘ります。SSH Tunnel Managerなど使うと便利ですが、コマンドラインからでも掘ることはできます。

# ssh -N -p 22 -c 3des -D 1080 katz@socks.example.jp

トンネルを掘った後は、tsocksコマンドを使い、SOCKS経由したいアプリケーションを起動します。MySQL Query Browserの場合は以下のような感じになります。

$ tsocks /Applications/MySQL Tools/MySQL Query Browser.app/Contents/MacOS/MySQL Query Browser

ただ、毎回ターミナルを開いてtsocksコマンドを叩くのは面倒くさいので、ドロップレットを作りました。解凍してできたアプリに、SOCKS経由したいアプリ(例えばMySQL Query Browser)をドロップすれば、自動的にSOCKS経由になります。

Leave a Reply

Your email address will not be published. Required fields are marked *