web-dev-qa-db-ja.com

ファイアウォールをバイパスする方法とNAT逆SSHトンネルを使用)

ルーターの背後にあるマシンでSSHサーバーを生成しようとしています。

まず、SSHをパブリックIPアドレスにバインドしようとしました。

ssh -R 10002:localhost:22 <ip_address>

次に、パスワードの要求を求められますが、ユーザー名のパスワードが機能していないようです。

明らかに私は自分のユーザー名パスワードを知っているので、同じネットワーク上の別のコンピューターで認証しようとしているように見えます。

これを修正する方法の提案はありますか?

また、ルーターにアクセスできない場合に、ルーターの背後にSSHサーバーを作成する方法についての代替案も役立ちます。

Iptablesのポートはすべて開いています。

[〜#〜]更新[〜#〜]

Thomas Oster 回答で示唆されているように、私は次のことを試しました。

ルーターの背後にあるマシンで、次のコマンドを実行しました。

$ ssh -R10002:localhost:22 <remote_public_ip_address> -l <my_remote_server_username>

<remote_ip_address>私が完全に制御できるパブリックIPおよびSSHサーバーを備えたサーバーのremote_ip_addressです。

<my_remote_server_username>リモートサーバーのユーザー名です。

その後、次のようにリモートサーバーからルーターの背後にあるサーバーに接続しようとしました。

$ ssh -p 10002 <remote_public_ip_address>

ただし、このコマンドは次の出力を表示します。

ssh: connect to Host <remote_public_ip_address> port 10002: Connection refused

そこで、次のコマンドを使用して、iptablesファイアウォールで10002ポートを開きました。

Sudo iptables -A INPUT -p tcp --dport 10002 -j ACCEPT

その後、コマンドを再度実行しましたが、同じエラーメッセージが表示されます。

ルーターの背後にある私のマシンでは、iptablesですべてのポートを開いています。

UPDATE 2

Remove_public_ip_addressサーバーの/ etc/ssh/sshd_configでポート転送を許可する必要があります

このコマンドを追加して、sshd_configファイルでポートフォワーディングを許可しようとしました。

LocalForward 10002 <my_remote_public_server_ip>:22

しかし、それは私にこのエラーメッセージを与えました:

Bad configuration option: LocalForward

「ssh-R ....」の後、ウィンドウを開いたままにしましたか?

そのコマンドを実行した後、リモートのパブリックマシンに接続し、はい、ウィンドウを開いたままにしました。

トンネルが作成された後、パブリックサーバーでssh -p 10002 localhostを使用できますか?

はい、パブリックサーバーでそのコマンドを実行すると、資格情報を要求された後に接続されます。

ルーターの背後にあるマシンで「sshlocalhost」を試して、sshdが実行され機能しているかどうかを確認してください。

これも機能します。

UPDATE 3

私はついにそれを機能させることができました(ありがとう Thomas Oster

3台のマシンで作業します。

宛先マシン:接続したいマシン。

ミドルマシン:接続の仲介役として機能するサーバー(私の場合はLinode)

ホームコンピューター:宛先マシンにアクセスする場所。

これらは私が従ったステップです

ステップ1:

[destination computer]$ vi /etc/ssh/sshd_config

GatewayPortsオプションを追加します。

GatewayPortsはい

Sshを再起動します。

ステップ2:

[destination computer]$ ssh -R 4040:localhost:22 middle-machine-user@middle-machine-public-ip

これにより、パブリックマシンがポート4040を介して宛先コンピューターにリンクされます。

ミドルマシンに接続し、ターミナルにプロンプ​​トを表示します。このタブは開いたままにしておく必要があります。

ステップ3:

自宅から接続する:

ssh destination-user@destination-ip -p4040

または、中間のマシンから接続します。

[home computer]$ ssh middle-machine-user@middle-machine-ip

[middle computer]$ ssh destination-user@localhost -p4040

ソース

11
rfc1484

パブリック「ip_address」で実行されているsshサーバーはありますか?あなたがしようとしているのは、「「ip_address」へのssh接続を開いてから、ポート10002での着信要求をlocalhost:22にトンネリングする」ことです。

「ip-address」がdsl-routerのパブリックIPアドレスである場合は、ルーターの構成でHost:22へのポート転送を作成する必要があります。

ルーターにアクセスできない場合、考えられる唯一のことは、インターネットでsshを実行している別のサーバーにアクセスでき、そこからトンネリングできる場合です。

# open a session to the public available machine and create a tunnel from port 10002 back  to your local sshd (22)
ssh -R 10002:localhost:22 ip_of_public_server
# as long as this session is open, all calls to the public available machine on port 10002 will be tunneled to your local machine (make sure sshd is running on port 22)
ssh -p 10002 ip_of_public_server
5
Thomas Oster

あなたが言ったように、私たちは「宛先マシン」(sshを使用して接続したい場所)、「ミドルマシン」(フォワーダーとして機能するパブリックサーバー)、「他のコンピューター」(ネット上の他のコンピューター)を持っています

@ thomas-osterが言ったように、あなたは使用しなければなりません

[destination computer] $ ssh -R 2222:localhost:22 ip_of_public_server

ただし、トンネルをlocalhostではなく0.0.0.0にバインドするには、「ミドルマシン」(パブリックサーバー)の/ etc/ssh/sshd_configにあるGatewayPortsを使用する必要があります。

GatewayPorts yes

もちろん、このオプションを追加した後、sshdを再起動する必要があります。

説明については http://www.snailbook.com/faq/gatewayports.auto.html をお読みください:「デフォルトでは、SSHはループバックアドレスの転送されたポートへの接続のみをリッスンします」

これにより、中間マシン(パブリックサーバー)のIPを使用して、ネット上の任意のコンピューターから宛先コンピューターに接続できるようになります。

[any computer on the net] $ ssh -p 2222 ip_of_public_server

パブリックサーバーのファイアウォールがポート2222/tcpへの接続を許可していることを確認してください。

5
javierwilson

私は最近同じ問題に遭遇しましたが、SSHサーバーに対するroot権限がありませんでした。

前述のように、ネットワークのクライアントもSSHサーバーのリモート転送ポートに接続できるように_GatewayPorts yes_が必要です。デフォルトでは、noに設定されています。したがって、root権限がない場合は、SSHD設定を変更してGatewayPortsオプションをtrueに設定することはできません。ただし、その場合は、次の回避策を使用できます。

_ssh -R 4041:localhost:22 myserver.com 'socat TCP-LISTEN:4040,fork TCP:127.0.0.1:4041'
_

socat は、インターフェイス_4040_のTCPポート_0.0.0.0_をバインドする優れたネットワークユーティリティです。これにより、ネットワークから表示され、すべてのトラフィックがにリダイレクトされます。 SSHDがリッスンしてクライアントのポートにリダイレクトする_127.0.0.1:4041_ _22_。

したがって、誰かが(クライアントで)説明したようにポート22でローカルSSHに接続したい場合、彼は次のことを行います。

_ssh -p 4040 myserver.com 
_

そしてそれはこのように機能します:

SSH client --> myserver.com:4040 (socat) --> 127.0.0.1:4041 (myserver.com, SSHD) --> SSH client port 22

socat ソースからビルドすることも、システムにすでにインストールされていることもできます。これは、RHEL/CentOSのRPMForgeリポジトリに存在します(ただし、root権限がない場合は、インストールできません)。

1
ph4r05