#contents *SSH逆ポートフォワードを利用してFW/NAPT環境ホストに外部からRDP接続する [#l41dcf4c] FW/NAPT環境ではインターネットへ向かうアクセスは問題なく行えるが逆方向へのアクセスは制限されている。~ FW環境ではポートへのアクセス制御がされていたり、インターネットからのアクセスをすべて拒否しているなど、ポリシー上で制限がかけられている。~ NAPT環境ではそもそもインターネットからホストを特定する手段がなく不可能である。~ このような場合には、グローバル環境のSSHサーバを経由した逆方向のポートフォワードを利用し、リモートホスト(グローバル環境)のポートをローカルホスト(FW/NAPT環境)のポートへ転送することで、ローカルホストへの接続を実現する。~ **準備するもの [#w38ed603] -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フリースポットなどでも可。~ **接続方法 [#x521ca2c] ***SSHクライアントとRDPクライアントを別ホストにする場合 [#xd4ea814] + 逆ポートフォワード~ 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クライアントを同一ホストにする場合 [#t190c38c] + 逆ポートフォワード~ teratermでSSHサーバに接続する前に[設定] - [SSH転送] からポート転送の追加で~ リモートサーバのポート:sshsrv_rdp_port~ ローカル側ホスト:localhost~ ポート:rdpsrv_rdp_port~ を選択してからsshsrvへSSH接続する。~ ~ + RDPでの接続~ RDPクライアントからSSHサーバの転送ポートへRDP接続することで、ローカル環境のRDPサーバへ接続することができる。 ** 実例 [#kc0bab17] *** 自宅の仮想環境へ外出先端末(windows)からWiFiフリースポット経由で接続する。 [#fefeb2e3] +前提条件~ --LinuxとWindowsが同一セグメント上で稼動している。~ ---Linuxは192.168.1.1~ ---Windowsは192.168.1.2で22222ポートでRDPを待ち受けている。~ --外部のVPSとしてhost.example.comを契約している。~ ---SSHサーバを11111ポートで動作させている。~ ~ +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