
公共のインターネットから自宅のコンピューターに ssh/接続するのに役立つソフトウェアはありますか? (たとえば、コーヒー ショップ)
これに似た質問がこれまでにもなされていることは承知していますが、どれも質問に実際に答えているようには思えません。DynDns とポート転送に関するよくある大量の回答を避けるために、いくつか詳細を追加させてください。
私はパブリックにアクセス可能な SSH サーバーにアクセスできます。そこからのポート転送だけでは、数日間持続する安定したソリューションにはなりません。ポート転送は接続を切断したり、速度が遅くなったりする傾向があります。
DynDns をセットアップしたり、料金を支払ったり、ルーターで NAT トラバーサルを構成したりしたくありません。
次のことは可能だと思うのですが、これをすでに実現しているソフトウェアが存在するかどうかはわかりません。
ピアツーピア プログラムが NAT トラバーサルをホールパンチするのと同じように、ホールパンチによって適切なポートへの外部アクセスを開くプログラムを自宅のマシンで実行できるはずです。さらに、プログラムは自宅のコンピューターのパブリック IP とホールパンチされた外部から見えるポートをどこか (たとえば、パブリック サーバーまたは電子メール) にブロードキャストし、この情報を定期的に更新できます。
このようなソフトウェアは存在しますか? この機能の一部は、すでにさまざまなトレント ソフトウェアによって実現されています。
答え1
自分が何をしているのかを本当に理解していて、デバイスとその周囲のネットワークを適切に保護できる場合を除き、いかなる状況でもデバイスを DMZ に配置することはお勧めしません。
インターネットを介してLANをエミュレートできるソフトウェアがあります。LogMeInハマチこれをホストにインストールして有効にすると、インターネット上のどこからでも VLAN にログインしてアクセスできるようになります。
ただし、ポート転送に必ずしも問題があるとは思いません。
もう 1 つのオプションは、SSH に組み込まれているポート転送機能を使用することです。接続しようとしているホスト (ホスト 2) と同じ LAN 上に、インターネットからアクセス可能な別の SSH ホスト (ホスト 1 と呼びます) がある場合、コンピューター (特定のローカル ポート) からの接続をホスト 1 経由でバウンスするコマンドを発行すると、ホスト 1 はトラフィックをその LAN 内のポート転送されていないホスト 2 にルーティングします。
コマンドは以下のとおりで、ホスト2に接続しようとしているローカルマシン上で実行されます。
ssh -L [local-port-to-open]:[local-IP-of-Host-2-according-to-Host-1]:[port-to-connect-to-on-Host-2-from-Host-1] [user-of-Host-1]@[Host-1-address]
これにより、SSH が管理するマシン上のポート (引数) が開き[local-port-to-open]
、そのポートからのすべてのトラフィックが、引数によって暗号化されたトンネルを介して、 で[user-of-Host-1]@[Host-1-address]
指定されているように Host-2 に送信されます[local-IP-of-Host-2-according-to-Host-1]:[port-to-connect-to-on-Host-2-from-Host-1]
。この方法は、ローカル ポート転送と呼ばれます (リモート ポート転送はよくわかりません)。
たとえば、ポート転送されているホスト 1 を使用して、ポート転送されていないホスト 2 に地元のコーヒー ショップから接続し、その LAN に接続をバウンスするとします。これにより、リモート マシンで PTS が開きますが、このトンネルを閉じるまでは無視できます。その後、通常どおりにそのターミナル セッションを閉じることができます。
ホスト 1 のパブリック IP は201.31.103.212
(ホスト 1 とホスト 2 の両方をカプセル化する NAT)1337
の SSH 用ポートです。LAN 内のホスト 2 は、ローカル IP が で192.168.254.40
、SSH 用ポートを使用します22
。ホスト 1 のログイン ユーザー名は ですfish
。
わかりました。ローカル ポートは8080
未使用なので、このデモでは一時的に使用できるとだけ言っておきます。
私が作成するコマンドは次のようになります。
ssh -L 8080:192.168.254.40:22 [email protected]
8080
これで、ローカルコンピュータのポートが開き、ホスト1(つまり)に従って192.168.254.40
ポート(ホスト2)に送信されます。22
[email protected]
ホスト2にSSH接続したい場合、ポートにコンピュータを指定するだけです8080
。ホスト2のログインユーザー名がturtle
ssh [email protected] -p 8080
SSH はポート を管理しており8080
、SSH 要求をホスト 1 に送信し、ホスト 1 はそれをホスト 2 に送信します。 を使用する代わりに、127.0.0.1
を使用することもできますlocalhost
。これは単なる好みの問題です。
SSH ポート転送のもう 1 つの用途はプロキシです。
シナリオ: 学校にいて、自分のラップトップから Twitter にアクセスしたいのですが、ブロックされています (高校では実際にブロックされているので、まさにこれを実行しました)。自宅には、39.34.81.56
ポート のIP を持つポート転送された SSH ホストがあります。ラップトップのポートから自宅のホストを経由して Twitter (Web サーバーはポート でホストされるのが最も一般的です)1337
への接続をバウンスしたいとします。ラップトップで次のコマンドを発行します。80
8080
ssh -L 8080:twitter.com:80 [email protected] -p 1337
これで、Web ブラウザーでアクセスできるようになりlocalhost:8080
、Twitter は暗号化されたトンネルを経由してサーバーから自宅、そして学校のラップトップにルーティングされます。
同じ方法を使用して、SSL を使用しない Web サイト (たとえば pastebin) に公開でログインし、認証情報が SSH を使用して暗号化され、安全であることを確認した自宅からのみ SSH なしで送信されるため、認証情報が安全であることを確認できます。
幸運を!
編集: 補足ですが、ここに表示されている IP アドレスは有効なアドレスではないはずですが、万が一有効なアドレスであったとしても、これらの IP のユーザーを攻撃しないでください。
答え2
そうですね、ポート フォワーディングはホール パンチング方式だと思います。必要なら、コンピューターを DMZ に配置して、すべての混乱を回避することもできます。