SSHで接続するクライアントを介して、サーバーにインターネットへのアクセスを許可します


17

自宅のコンピューターAを使用して、外部ネットワークへのアクセスがブロックされているサーバーBに SSH で接続できます。言い換えれば、Bからインターネットへのすべての要求はエラーをスローします:ネットワークは到達不能です。これらすべての要求をリダイレクトして、インターネットへの無制限のアクセス権を持つコンピューターAを通過させることはできますか?

サーバーBは、私のWebサイトの1つをホストするサーバーです。いくつかのソフトウェアをインストールするためにファイルをダウンロードしたい。ただし、接続はブロックされます。私は、ファイルを転送することができましたが、ソフトウェアのバージョンが上異なっているので、それが複雑になったAB、それが上の異なるファイルを必要と異なると依存関係AB

インターネットで検索しましたが、逆トンネルが必要なようです。しかし、私はポートがリダイレクトされるソリューションのみを見つけました。しかし、BAにアクセスするのではなく、インターネットにアクセスするために必要なものではありません。


この質問に反対票を投じた人がこのコメントを見た場合、その理由をお知らせください。答えが「不可能」であったとしても、私はそれについて何も間違っているとは思いません。
虐待14


sshを使用すると、ローカルまたはリモートのポート転送を実行できます。つまり、BのアプリケーションがローカルポートXを開こうとすると、指定したポートを開こうとしてAに転送されます。したがって、Aはその接続要求をインターネットに自由に転送できます。使用しようとしているポートまたはプロトコルについては言及していないため、詳細な回答を簡単に作成できます。
ステーブルドッグ14

composerを使用しようとしているので、パッケージをダウンロードするにはgithubへのHTTPおよびHTTPSリクエストである必要があります。
AL

回答:


8

コンピューターAを介してインターネットにアクセスするために、コンピューターBが接続するコンピューターAでプロキシを実行できます。

このようなもの

             +----------+            +-----------+
             |          |+----SSH+-->|           |
             |     A    |            |    B      |
             |+--------+|            |           |
  Internet <-++-+PROXY<++<SSH Tunnel--+          |
             |+--------+|            |           |
             +----------+            +-----------+

ポート3128でリッスンするAにsquidなどのプロキシをインストールすると、これでサーバーにsshできます-
ssh -L 3128:127.0.0.1:3128 user@B

これにより、BはA経由でインターネットにアクセスできます


Bに接続したら、インターネットへのリクエストはどのようにAにリダイレクトされますか?変更する構成はありませんか?
AL

Bのプロキシサーバーを127.0.0.1:3128に設定する必要があります
ローレンス14

10

@Lawrenceと@SpiRailの回答にさらに明確な手順を追加するだけです。

次のようにセットアップを行います。

ホストAでのセットアップ:

  1. ホストAにプロキシサーバーSquidをインストールします。デフォルトでは、Squidはポート3128でリッスンします。
    yum install squid
  2. コメントしてhttp_access deny allからhttp_access allow all/etc/squid/squid.confに追加します
  3. ホストA自体が10.140.78.130:8080などのプロキシを使用してインターネットに接続する場合は/etc/squid/squid.conf、次のようにそのプロキシも追加します。
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
cache_peer 10.140.78.130 parent 8080 0 no-query default
never_direct allow all

ホストBでのセットアップ:

  1. / etc / environmentに次のエントリを追加します
export http_proxy=http://127.0.0.1:3129
export https_proxy=http://127.0.0.1:3129
  1. source /etc/environment

これでセットアップが完了しました。

リモートポート転送を使用したSSHトンネルの作成

  1. ホストAから次のSSHコマンドを実行します
    ssh -R 3129:localhost:3128 user@HostB

    永続的なSSHトンネルを作成する場合は、次のようにautosshを使用できます。
    autossh -M 20000 -f -NT -R 3129:localhost:3128 user@HostB
    上記のautosshコマンドが機能するには、HostAからHostBへのSSHキーのセットアップが必要です。

  2. これにより、ホストBはホストAを介してインターネットにアクセスできます。

インターネットの確認:

  1. ホストBから次のコマンドを実行します
    wget https://google.com

トラフィックフロー図ここに画像の説明を入力してください


5

@Lawrenceの答えは、私がそれをすべて解決するのに十分でした。しかし、ここで私が使用したより詳細な手順を示します。

私はこれをラップトップ4gドングルを使用して、インターネットをwifiルーターへの固定回線接続でraspberry piにルーティングするために使用しました。

ホストがMacの場合:squidmanをインストールします http://squidman.net/squidman/

(一般的なsquidだけでなく、構築するのに苦労しすぎました)デフォルトの設定で十分だと思われました。

4gに接続し、wifiに接続します。wifiで静的IPを設定し、ゲートウェイアドレスを削除します(高度なことを行っている場合を除く)。-WiFiルーターが同じ192.168.xy範囲を使用していないことを確認します(この場合は別の「x」を設定します)

ssh -R 8080:localhost:8080 pi@<ip address of the pi or target machine>

PIで

export http_proxy=http://localhost:8080

visudoでテキストを追加します:

Defaults env_keep = "http_proxy https_proxy ftp_proxy"

これでwgetが機能し、sudo apt-getが機能するため、パッケージをインストールできます。

gitも必要な場合はこちら:https : //stackoverflow.com/questions/128035/how-do-i-pull-from-a-git-repository-through-an-http-proxy


ご回答有難うございます。visudoここの役割は何ですか?テキストはどこに追加しますか?(sudoWebホスティングでは使用できません)
-AL

私はあなたの質問を本当に理解していませんが、ターミナルにvisudoと入力するだけなら(「sudo visudo」が必要な場合があります)、テキスト行を下部に追加できます。
SpiRail

Webホスティングにはルートアクセスがありません。
-AL

今は昔です。しかし、メモリーからvisudoはsudoersファイルを編集し、追加される行は、sudoを入力するときにそれらのユーザー環境変数が保持されることを意味します。sudoを実行できない場合は、とにかくこの手順は必要ありません。
SpiRail
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.