例えばなんですが。
顧客のサーバがありまして、そこに繋ぐにはVPNを張らなくちゃいけなくて、そのVPNを張るにはWindowsからじゃないとダメ(VPNのセッションを確立するプログラムが.exeとか)で、でも普段はWindows使わずにUbuntuとかで開発してて。
こんな場合、いちいちUbuntuとWindowsを行ったり来たりするの面倒ですよね。例えばとか言いながら今そんな状態で、今まではSynergyで行ったり来たりしてたのですが、それだと僕しか使えませんでした。
なので、「VPNを張った状態のWindowsを経由して、Ubuntuからssh接続する」をやってみた。
まず下記の要件とします。
各マシン | IPアドレス |
---|---|
Ubuntuマシン(自分の開発に使ってるやつ) | 192.168.10.1/24 |
Windowsマシン(こいつを経由する) | 192.168.10.2/24 |
サーバ(最終的にこいつに繋ぐ) | 192.168.20.1/24 |
VPNを張るのはそれぞれのソフトのやり方があると思うので、それは省略し、まずはWindowsを経由できるように、Windowsマシンにプロキシをインストールします。使用するのはSquidで、http://uguisu.skr.jp/Windows/squid_win_tips.html みたいな感じでインストール。
なお、aclをsquid.confに記述する箇所がありますが、上記の例では192.168.10.0/24とします。VPNが張られ、Squidが起動していればWindowsの方は準備OKです。
次にUbuntuからsshコマンドで接続するのですが、プロキシを経由するためにconnectコマンドをインストールします。
$ sudo apt-get install connect-proxy
これでconnectコマンドがインストールされました。次に~/.ssh/configに下記を追記します。
Host server-with-proxy
User takkkun
ProxyCommand connect -H 192.168.10.2:3128 192.168.20.1 22
ProxyCommandでどこを経由し、どこに繋ぐかを指定する感じですね。Hオプションでプロキシを。今回はWindowsマシンなので、そのIPアドレスである192.168.10.2と、Squidがデフォルトで使用するポート番号である3128を指定(squid.confで変更してたらもちろんここは変更)。そして最終的に接続したいサーバのIPアドレスとポート番号を指定って具合です。
これで後は:
$ ssh server-with-proxy
とするだけで、Windowsにインストールしたプロキシを経由し、VPNのトンネルを抜けてサーバに接続することが出来ます。めでたし。