web-dev-qa-db-ja.com

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

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

サーバー[〜#〜] b [〜#〜]は私のウェブサイトの1つをホストするサーバーです。一部のソフトウェアをインストールするためにファイルをダウンロードしたい。しかし、接続はブロックされています。ファイルを転送できましたが、[〜#〜] a [〜#〜][〜でソフトウェアバージョンが異なるため、複雑でした#〜] b [〜#〜]、したがって、依存関係が異なり、[〜#〜] a [〜#〜]および[〜#〜] b [〜#〜]

インターネットで検索したところ、リバーストンネルが必要なようです。しかし、私は ポートがリダイレクトされる であるソリューションのみを見つけました。しかし、[〜#〜] b [〜#〜]にアクセスしたくないので、必要なものではありません[〜#〜] a [〜#〜]がインターネットへ。

18
A.L

コンピューター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を介してインターネットにアクセスできます。

8
Lawrence

@Lawrenceと@SpiRailの回答にいくつかの明確なステップを追加するだけです。

次のように設定します。

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

  1. ホストAにプロキシサーバーSquidをインストールします。デフォルトでは、Squidはポート3128でリッスンします。
    _yum install squid_
  2. _http_access deny all_をコメントにしてから、/ etc/squid/squid.confに_http_access allow all_を追加します
  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_

トラフィックフロー図enter image description here

11
Dhiru

@Lawrenceの答えは私がそれをすべて理解するのに十分良かった。しかし、ここに私が使用したより詳細なステップがあります。

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

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

(一般的なイカだけでなく、構築にあまりにも多くの問題がありました)デフォルト設定は私には十分に思えました。

4gに接続wifiに接続-wifiに静的IPを構成し、ゲートウェイアドレスを削除します(高度な処理を行わない限り)。それ以外の場合は、2つのデフォルトルートがあり、非常に煩わしいものになります。 -Wi-Fiルーターが同じ192.168.x.yの範囲を使用していないことを確認します(この場合は別の「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 =

5
SpiRail