概要
リモートデスクトップ接続を通常の接続ではなく、Linuxサーバを経由して接続する場合、sshのポートフォワーディングなどの方法がありますが
これは接続しようとするユーザに、やや負担があります。
また、Apache Guacamoleを利用して、ブラウザ経由でリモートデスクトップ接続させることもできますが、環境構築がやや面倒ですし、できればWindow標準のリモートデスクトップクライアントで繋ぎたいです。
そこで、以下の方法でより簡易にフォワーディングすることができます。
イメージ図
インストール
まずLinuxサーバにsocatが入っていなければsocatをインストールします。
$ uname -a
Linux ip-hogehoge 4.4.44-39.55.amzn1.x86_64 #1 SMP Mon Jan 30 18:15:53 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
$ sudo yum install socat
$ socat -V
socat by Gerhard Rieger - see www.dest-unreach.org
socat version 1.7.2.3 on Mar 6 2014 21:44:52
running on Linux version #1 SMP Mon Jan 30 18:15:53 UTC 2017, release 4.4.44-39.55.amzn1.x86_64, machine x86_64
features:
#define WITH_STDIO 1
#define WITH_FDNUM 1
#define WITH_FILE 1
#define WITH_CREAT 1
#define WITH_GOPEN 1
#define WITH_TERMIOS 1
#define WITH_PIPE 1
#define WITH_UNIX 1
#define WITH_ABSTRACT_UNIXSOCKET 1
#define WITH_IP4 1
#define WITH_IP6 1
#define WITH_RAWIP 1
#define WITH_GENERICSOCKET 1
#define WITH_INTERFACE 1
#define WITH_TCP 1
#define WITH_UDP 1
#define WITH_SCTP 1
#define WITH_LISTEN 1
#define WITH_SOCKS4 1
#define WITH_SOCKS4A 1
#define WITH_PROXY 1
#define WITH_SYSTEM 1
#define WITH_EXEC 1
#define WITH_READLINE 1
#define WITH_TUN 1
#define WITH_PTY 1
#define WITH_OPENSSL 1
#undef WITH_FIPS
#undef WITH_LIBWRAP
#define WITH_SYCLS 1
#define WITH_FILAN 1
#define WITH_RETRY 1
#define WITH_MSGLEVEL 0 /*debug*/
socatを起動
以下のように3389で待ちうけて、対象サーバへフォワーディングします。
$ socat tcp4-listen:3389,reuseaddr,fork TCP:35.160.1.26:3389
すると、「63.36.3.10」へ接続するだけで、うまく接続を「35.160.1.26」へフォワーディングしてくれます。
試してダメだったこと
最初はnc(netcat)を利用してやろうとしましたが、できませんでした。
ncは標準で入っていたnc(BSD版?)やGNU Netcatでやりましたが、結果は同じく、繋いだ瞬間に"connection reset by peer"となりました。
BSD_netcat
$ mkfifo fifo
$ nc -l 3389 < fifo | nc 35.160.1.26 3389 > fifo
GNU_netcat
$ nc -L 35.160.1.26:3389 -p 3389 -vvv
追記
試しに多段経由もしてみましたが、問題なく接続できました。