SSH逆ポートフォワードを利用してFW/NAPT環境ホストに外部からRDP接続する †
FW/NAPT環境ではインターネットへ向かうアクセスは問題なく行えるが逆方向へのアクセスは制限されている。
FW環境ではポートへのアクセス制御がされていたり、インターネットからのアクセスをすべて拒否しているなど、ポリシー上で制限がかけられている。
NAPT環境ではそもそもインターネットからホストを特定する手段がなく不可能である。
このような場合には、グローバル環境のSSHサーバを経由した逆方向のポートフォワードを利用し、リモートホスト(グローバル環境)のポートをローカルホスト(FW/NAPT環境)のポートへ転送することで、ローカルホストへの接続を実現する。
準備するもの †
- RDPサーバ(以下 rdpsrv と表記)
接続したいWindowsホスト
FW/NAPT環境で用意
特に細工は不要。Windowsファイアウォールでリモートデスクトップ接続を許可すればOK。
ポート転送を行うSSHクライアントを別に用意するのであれば、SSHクライアントのアドレスは許可する範囲に収まっていること。
- SSHクライアント(以下 sshcli と表記)
RDPサーバそのものでも、別立てでもOK
FW/NAPT環境で用意
RDPサーバから接続する場合、teratermなどでポート転送の必要がある。
別立てでLinuxなどを利用する場合は、ssh(autossh)が必要
- SSHサーバ(以下 sshsrv と表記)
グローバルアドレスを持っていないと動作しないので、自宅のグローバルアドレスやVPSの契約が必要。
※sshd_configのGatewayPorts?をyesにする必要がある。
- RDPクライアント(以下 rdpcli と表記)
インターネットへ接続する環境があればOK
インターネットへ抜ける環境があれば、NAT環境でもグローバルアドレス環境でもOK。
ネットカフェやWiFi?フリースポットなどでも可。
接続方法 †
SSHクライアントとRDPクライアントを別ホストにする場合 †
- 逆ポートフォワード
SSHクライアントからグローバル環境のSSHサーバへ接続し、逆方向のポートフォワードを作成する。
[user@sshcli]$ ssh -N -R sshsrv_rdp_port:rdpsrv_ip:rdpsrv_rdp_port sshsrv_ip -p sshsrv_ssh_port
※sshsrv_ipのsshsrv_rdp_portをrdpsrv_ipのrdpsr_rdp_portへ転送する。
sshはautosshを利用してもよい
- RDPでの接続
RDPクライアントからSSHサーバの転送ポートへRDP接続することで、ローカル環境のRDPサーバへ接続することができる。
SSHクライアントとRDPクライアントを同一ホストにする場合 †
- 逆ポートフォワード
teratermでSSHサーバに接続する前に[設定] - [SSH転送] からポート転送の追加で
リモートサーバのポート:sshsrv_rdp_port
ローカル側ホスト:localhost
ポート:rdpsrv_rdp_port
を選択してからsshsrvへSSH接続する。
- RDPでの接続
RDPクライアントからSSHサーバの転送ポートへRDP接続することで、ローカル環境のRDPサーバへ接続することができる。
実例 †
自宅の仮想環境へ外出先端末(windows)からWiFi?フリースポット経由で接続する。 †
- 前提条件
- LinuxとWindowsが同一セグメント上で稼動している。
- Linuxは192.168.1.1
- Windowsは192.168.1.2で22222ポートでRDPを待ち受けている。
- 外部のVPSとしてhost.example.comを契約している。
- SSHポートフォワード(Linux~VPSのSSHトンネル)
[LinuxSrv]$ ssh -N -R 13389:192.168.1.2:22222 host.example.com -p 11111
- SSHポートフォワード(外出先端末~VPSのSSHトンネル)
外出先端末のteratermでSSHサーバに接続する前に[設定] - [SSH転送] からポート転送の追加で
ローカルのポート:33333
リモート側ホスト:host.example.com
ポート:13389
を選択してからhost.example.comへSSH接続する。
- RDP接続
外出先端末からRDP接続でlocalhost:33333に接続する
→localhost:33333はteratermのポート転送によりhost.example.com:13389へ転送
→host.example.com:13389はLinuxからのポート転送によりWindows:22222へ転送
→Windows:22222ではRDPを待ち受けているため、RDPとしてログインできる。
Counter: 6813,
today: 1,
yesterday: 2