ネットワークの知識がホットミルクの膜くらい薄い僕が、リモートアクセスしたという話

どうも皆さんお久しぶりです。

前回は激エモなFullerのインターン記事を書いてから、もう一つインターンの記事と、Androidに関する記事を書いている最中、

ネットワークに関する、本当に基本的な技術である

ポートフォワーディング

を利用し、PCの遠隔アクセスに成功したため、それに対して備忘録&

同じことをやろうとしている人のために、手助けになる記事を今書かなきゃ忘れてしまうということで、書いていこうと思います。

この記事なんですが、原始人が始めて火をつけることに成功して、

「ホラ、ヒ。ヒ!アツイ!コレ、ヒ!」みたいに自慢する記事なので、

極めてレベルが低く、現代人から見たら「馬鹿じゃねえの」ライターシュボー

ってやりたくなる記事なので、まぁ優しく見てほしい。

さて、今回の記事の対象者は、

家から研究室など閉じたネットワークにアクセスしたい人。

です。まぁ理系大学生なら一度は考えたことがあるだろうと思います。

出不精な人なら部屋から出たくないなどは勿論、研究室にウィニングイレブンしにくる先輩の友達の叫び声がうっとうしい場合にも、家でアクセスしたいことって全然ありますよね。

何より、リモートで研究して進捗出す先輩ってカッコいい。研究できなくてもリモートで繋がって、何か書いているっていう事実自体がカッコいい。たとえその先輩がHelloWorldしか書けなくても何かカッコいい。

さてやり方を書いていくぜ。

1.SShでアクセスできるレンタルサーバを借りよう!

まずこれが絶対条件です。FTPでファイルを送信してWebサイトを公開するだけのじゃなくて、サーバーにアクセスすることを目的とするサーバーです。

ちなみに僕はConohaという会社のVPSで512MBでUbuntuの一番安い奴を借りました。

まぁここで、ウォーミングアップということで、SShでサーバに接続してみてください。当然外部にあり、グローバルIPが割り当てられているため、すげー単純なコードで接続できます。

WindowsならTeraTermやRloginなどのアプリを使ってもいいし、OpenSSHで繋がってもよしです。

MACユーザーは、まぁターミナルから普通にSSHで接続してもいいんじゃね(Windowsユーザー特有の無知)

一応、Conohaで接続する方法を書いておきます。参照

2.サーバーの設定を変える

恐らくここで接続に至った挑戦者はレンタル会社で設定したパスワードを入力して、SSh接続したと思いますが、

何かの拍子でこのパスワードばれたりしたら、自分のサーバーにアクセスされ、踏み台として、あらゆる悪事に使われる可能性が出てくると思います。

そうなれば孫の代まで祟られるので、必要な設定を変更しましょう。

これも、「VPS レンタル 初期設定」とかで調べればめちゃくちゃ出てきます。参考に置いておきます。

1. OSのアップデート
2. SSH接続用の設定(2)ポート番号の変更
3. SSH接続用の設定(3)管理者用の一般ユーザー作成と設定
4. ファイアウォール(CentOS ならiptables Ubuntuならufw)の設定
5. SSH接続用の設定(1)公開鍵認証

上のURLのサイトにあった設定ですが、この順序が一番挫折しないんじゃないかなあと思います。4番は使用用途によって結構異なってくるのでめっちゃ適当にやった覚えある(脆弱性の鬼)

5番は、結構聞いたことあるだろう公開鍵認証ですね。

すっげぇ簡単に言えば、「鍵ファイル持っている奴以外サーバーに入れなくする仕組み」です。もうこいつだけで勝てんじゃね???

5番で生成した鍵ファイルを、自宅PCと研究室PCどちらにも用意する必要があるので、それをした後、

どちらからもレンタルサーバーにアクセスできることを確認してください。

ここ終わればほぼ勝利です。色々調べてやってみましょう。

3.接続する予定のサーバーのトンネルを掘り、接続!

さて、ここで、一度状況を整理したいと思います

まず、これが1.までの状況です。Conohaのページから設定したパスワードによって、レンタルサーバに入れた状況です。

んで2.まではこれです。サーバーのセキュリティ設定を変えたおかげで、鍵の認証でのみ接続できます。

すなわち、目標のサーバーと自分の家のPCのみで入れる状況であります。これ出来てない場合、2に戻りましょう。

では接続したいわけですけど、目標のサーバーはグローバルなIPなんてありませんから、直接入れるわけはありません。

そこでポートフォワーディングという技術によるトンネリングを行う必要があります。

まぁこれは調べればめちゃくちゃ詳しく書いてある記事がありますが、にわか知識で間違えたことを伝えるのも怖いので、単純に今回使用するケースで、直感的な理解に繋がる画像を用意しました。

まずつながる目的のPC(研究室のPC)から①に対応する設定を行うコードを打ち込みます。

これによって、レンタルPCにアクセスするPCが②を行えば、目的のPC(研究室のPC)にアクセスできるというわけです。

これを所謂トンネリングという言うそうです。

さて、できることがわかったため、実際のコードを書いていきましょう。

まず①のコードを目標のサーバーから打つと、レンタルサーバーに行くことができます。上のポートフォワーディングの説明の画像の①に相当するコードです。

簡単に言えば、レンタルの10122にアクセスすると、目標サーバーの22(SSh接続のポート)に行く設定を行ったわけですね。

ちなみに赤字の10122は基本的に何でもいいですけど、1024以下はウェルノウンポートだったりするし、なんか自分のサービスで使ってないポートを適当に使いましょう。

んで目標のサーバーがレンタルにつながった状態のまんま(これが切れると接続できない)今度は自宅のPCに行きましょう。

んで自宅PCのターミナルから、②を打つと、またサーバーに行けると思います。ここは楽勝ですよね。

そして、③は自宅のPCから繋がったレンタルサーバのターミナル上で実行してください。簡単に言えば、自分のポート10122に行くって意味です。ポートフォワーディングの画像の②に相当する部分です。

さてここまでやると、自宅のPCから目標のサーバーへ無事繋がってる予定です。

僕の場合だと、MAC→サーバー→WSLのUbuntuを確認しました。

まぁお使いのPCでの状況や環境によって、これまで説明した部分はいくらでも崩れ行くと思います。(僕の場合、WSLにそもそもSSH接続できない設定だったりした。)

まぁ実際ちょっと繋がったの確認しただけなので、実際につなぐにはautoSshを使用することにはなりそうですね。

↑これをめちゃくちゃ参考にしました。というより、これの劣化コピーなんでこっち見てください(本末転倒)

ということで、すごく簡単にポートフォワーディングによるリモート接続について説明しました。

何をすればいいか一つもわからなかったひとは、なんとなく調べることがわかるきっかけになったと思います。

逆に何をすれば完璧にわかってた人は、ものすごい粗が見つかったと思うので、指摘お願いします。

それでは失礼いたします。