web-dev-qa-db-ja.com

SSHポートトンネルをローカルネットワークと共有する

次のコマンドを使用して、ローカルLinuxサーバー上のクラウドpostgresqlサーバーへのSSHトンネルを正常に作成しました。

ssh -N -f -L 5431:localhost:xxxx mycloudserver.com

(xxxxはリモートポートです)

このコマンドを使用すると、ポート5431を介してリモートPostgreSQLデータベースにアクセスできますが、このLinuxサーバー上でのみアクセスできます。

ここで、この接続をネットワーク上の他のPCと「共有」して、SSHソフトウェアをインストールせずにODBCドライバーを使用してlinux_server:5431に接続し、クラウドデータベースを読み取ることができるようにします。クライアント。iptablesでポート5431を開くことができませんでした。

iptables -A INPUT -p tcp -s 0/0 --sport 1024:65535 -d 192.168.128.5 --dport 5431 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s 192.168.128.5 --sport 5431 -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT

すでに試しました

 ssh -N -f -L 5431:0.0.0.0:xxxx mycloudserver.com

あまりにも。トンネルは正常に構築され、サーバー上で機能しますが、クライアントからの接続を「見る」ことができません。

3

次のようにbind_addressを指定するには、コマンドを変更する必要があります。

ssh -N -f -L 0.0.0.0:5431:localhost:xxxx mycloudserver.com

これにより、すべてのインターフェースで待機します。確認するには、以下を使用します。

netstat -lnp | grep 5431
5
Khaled

これは本当に間違ったアプローチです。 SSHトンネルを使用しないでください。代わりに、クラウドサーバーでSSLを設定し、必要に応じてIPアドレス制限を使用して直接SSL接続を確立します。

または、VPNを使用する必要がある場合は、sshをジョブに組み込むのではなく、その役割用に設計されたVPNを使用します。

SSHトンネルTCP TCP経由。これにより、輻輳制御、再送信、ウィンドウスケーリングアルゴリズムで問題が発生します。アドホックな作業には優れたユーティリティですが、本番環境のマルチユーザー操作は推奨しません。かなりの帯域幅を使用するもの。

本当に必要の場合、*-Lのバインドアドレスを使用できます。例:.

-L *:5431:localhost:xxxx

または、そのホストのGatewayPorts yes.ssh/configを設定するか、次のように-oコマンドラインオプションを使用します。

-o GatewayPorts=yes
3
Craig Ringer