web-dev-qa-db-ja.com

ローカルコンピューターとリモートコンピューターはNATの背後にあります。 SOCKSでローカルネットワークにアクセスできるようにする方法は?

私は

  • ローカルコンピューター(NATの背後)。
  • パブリックにアクセス可能で、固定IPアドレスを持つ中間サーバー。
  • リモートコンピューター(NATの背後にあり、ローカルコンピューターと同じではありません)。

ローカルコンピューターとSOCKS/SSHを使用した中間サーバーを介して、ローカルネットワーク上のWebサイトへのアクセスを一時的に共有し、リモートコンピューターで表示できるようにします。これは、リモートコンピューターとローカルコンピューターの両方がNATの背後にある場合に可能ですか?はいの場合、どのように?

                     NAT       -   Static Public IP  - NAT
Local Network <- Local Computer - Intermediate Server - Remote Computer 

Ngrokや同様のサービスでこれを実行できることは知っていますが、SSHとSOCKSを使用して自分で実行する方法を学びたいと思います。

報奨金:サンプルコードとその方法の説明を含む回答を優先します。ありがとうございました。

UPDATE:動的ポート転送にはSOCKSが必要です。 SOCKS with multiple Hops

2
TryHarder

動的ポート転送が必要な場合は、次の構成を試すことができます。

l-user:my-local-computerのユーザー
i-user:中間のユーザー
intermediate:中間ホストのIPアドレス

my-local-computerで:

ssh -R 10022:localhost:22 i-user@intermediate

上の-リモート:

ssh -D 3456 -J i-user@intermediate -p 10022 l-user@localhost

my-local-computerからの接続が開始される前にthe-remoteintermediateの間のリモートポート転送が存在している必要があります。

この構成では、the-remoteはポート3456でSOCKS5プロキシとして機能し、トラフィックをintermediate経由でmy-local-comuterに転送し、ローカルLANで終了します。

2
bey0nd

前提:ローカルWebサーバーはIP192.168.1.100の別のホストで実行されます
中間サーバーはIP2.3.4.5で実行されます

ローカルホストはssh経由で中間サーバーに接続し、リモートポート転送を行います。

Sudo ssh -R 10080:192.168.1.100:80 -R 10443:192.168.1.100:443 [email protected]

リモートホストはsshを介して中間サーバーに接続し、ローカルポート転送を実行します。

Sudo ssh -L 80:localhost:10080 -L 443:localhost:10443 [email protected]

書面で:
ローカルマシンは、リモートポートフォワーディングを備えたsshトンネルを使用して、中間サーバーのloインターフェイス上のポート10080および10443を「キャプチャ」します。次に、両方のリモートポートが、ローカルネットワークのWebサーバー(192.168.1.100)のポート80および443に転送されます。
リモートマシンは、独自のsshトンネルを使用して、独自のloインターフェイスのポート80および443を「キャプチャ」し、それらをのloインターフェイスのポート10080および10443に転送します。中間サーバー。
したがって、内部ポートlocalhost:80またはlocalhost:443に接続しているリモートマシン上のアプリケーションは、中間サーバーの内部ポート:10080または:10443に転送され、ローカルマシンを介してポート192.168に転送されます。 Webサーバーのlanインターフェイスで.1.100:80または192.168.1.100:443。

お役に立てば幸いです。

編集:loインターフェースのIPアドレスを作り直しました。

2
bey0nd