んで、自宅内のWindowsマシンに、外出先からリモートデスクトップ(RDP)接続出来るようにしたい。
ただ、「外部からsshでログインその1」でルータに設定を施したように、Windowsマシンへも転送するようにすれば、別にsshを通す必要は無い。
これなら、RDPのポート番号さえ分かっていれば、簡単に実現できる。
ただこの場合、幾つか問題点がある。
- WindowsPCが増えるたびに、ルータのポート転送を追加する必要がある
- 当然、WindowsPCが減ったら、ルータのポート転送を削除する必要がある
- ポートスキャンをかけると、RDPサービスだということがバレる
- アクセス制御が、RDPの仕組み(ユーザ認証)しか無い
- 生RDP通信であり、暗号強度が不安(どのような暗号アルゴリズムなのか不明)
- ルータにたくさんの穴開けをしないといけなくなる(台数分)
(ま、WindowsOSのライセンスが高いので、そんなに作ることは無いと思うが)
3,4,5は、RDPセキュリティに関連するそのことだが、正直RDPの暗号強度が高いとは思えない。
また、「外部からsshログインその1」「その2」で書いたように、外部からのアクセスはユーザID/パスワードの組み合わせ以外の仕組みも使いたい。
そういった点を考慮しつつ、それでもRDPで接続出来るようにならないか?
というところで出てくるのが、先に紹介した「sshポートフォワーディング(ローカルポートフォワーディング)」だ。
ローカルポートフォワーディングを使って、以下のような接続状況を作ればいい。
と言っても、これだけではイマイチ良く分からない。
なので、実際に動かしながらやってみよう。
条件としては、外(The Internet側)から、家の中のUbuntu Linuxへsshログイン出来ること。
Ubuntu Linuxと同じネットワーク内(家のネットワーク)に、RDP接続を許可したWindowsマシンがいること。(そもそも、WindowsのHome EditionではRDP接続出来ないため、Professionalとかそういうエディションを使うこと)
作業用PC(クライアント)は、Windows+teratermでサンプルを書く。
- teratermでsshログインする前の設定
ログインする前に、teratermの設定でSSHポート転送を有効にしておこう
設定内容は以下の通りだ。- ローカルのポート
13389 - リッスン
127.0.0.1 - リモート側ホスト
接続先Windows機のIPアドレス - ポート
3389
- ローカルのポート
- sshログイン
上記の設定を施したら、「OK」ボタンで設定を確定し、今まで通りにUbuntu Linux機へsshログインしよう。 - RDPクライアントでログイン
端末側でRDP接続を起動して、以下のようにログイン情報を入力する。 - コンピュータ
127.0.0.1:13389 (sshポートフォワードの設定で入れた「リッスン」と「ローカルのポート」を「:」で繋いだもの) - ユーザ
接続先Windows機のユーザアカウント名 - リモートデスクトップ接続に成功する
成功すれば、リモートデスクトップの画面が出てくるはずだ。
これで普通に操作が可能だ。
ウィンドウタイトル部分をよく見てみると、接続先が「127.0.0.1:13389」になっていると思う。これは、RDPクライアントとしては「127.0.0.1:13389」へ接続していると思い込んでいる、ということだ。実際には、sshがパケット転送をしてくれて、自宅内のWindows機へ接続している形になっている。
また、ここで入力するパスワードは、操作用PC(クライアント)のパスワードではなく、接続先の(自宅内の)Windowsマシンのパスワードだ。
この時のダイアログをよく見てみて欲しい。
「これらの資格情報は、127.0.0.1(RDP接続先のIPとして指定したIP)への接続に使用されます。」となっているはずだ。
このアドレスは、自分自身を示すアドレスのため、「遠隔のWindows機ではなく、自分自身へ接続しようとしている」ことになる。
これが、ローカルポートフォワーディングの基本的な考え方だ。
つまり「ローカル(自分自身)への接続を、他のマシンへ転送する」ということだ。
そこで、一体どのようなフローで接続できたのかを確認しておきたい。
簡単な図に書いてみたが、先にポートフォワードを有効にしてsshログインを行うことで、作業用PCとUbuntu Linuxの間でポート転送の設定が行われる。
その上で、RDP通信を行うと、上記図のようにRDP通信がsshのコネクション内を通って行く形になる。
そして、そのRDP通信を受けたsshd(sshサーバ)が、指定されたIP:ポートへパケットを転送する、という形だ。
TCP通信のため、当然戻りパケットも発生するが、これは同じ経路を通って流れていく。
ちょうど、sshで作成したコネクションをトンネルにして、他の通信(この場合RDP通信)が流れていくため、「sshトンネル」等と呼ばれている。
この図で記載したが、赤い線で示した区間は、sshによる暗号化通信が行われている。そのため、単純にパケットを読み取られても、それがRDP通信であることは分からない。(ssh暗号を解読して、初めてRDPであることが判明する。)
そのため、非常に強固で安全性の高いRDP通信を行うことが出来る。(当然、sshの暗号アルゴリズムは強固なものを使う前提だ)
更に、ブロードバンドルータ側には、RDPのための設定は一切行っていない。ポート転送はsshのみだ。
最初にsshによる認証が必要になり、こちらは既に公開鍵認証方式のみ利用できる設定にしているため、外部からのパスワード推測系の攻撃を受けても、突破されることは無い。
とまぁこのように、セキュリティレベルをある程度維持したまま、宅内のWindows機へRDP接続が出来るようになった。
以後は必要に応じて、このパターンでRDP接続しよう。
となると、普段電源を落としている or スリープモードにしている or ハイバネーション(休止状態にしている)Windowsマシンを、遠隔で電源入れられるようにしたい。Wake On LANだ。
次はWake On LANに挑戦したい。
今回は以上。
0 件のコメント:
コメントを投稿