次のコマンドを使用して、ローカル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
あまりにも。トンネルは正常に構築され、サーバー上で機能しますが、クライアントからの接続を「見る」ことができません。
次のようにbind_addressを指定するには、コマンドを変更する必要があります。
ssh -N -f -L 0.0.0.0:5431:localhost:xxxx mycloudserver.com
これにより、すべてのインターフェースで待機します。確認するには、以下を使用します。
netstat -lnp | grep 5431
これは本当に間違ったアプローチです。 SSHトンネルを使用しないでください。代わりに、クラウドサーバーでSSLを設定し、必要に応じてIPアドレス制限を使用して直接SSL接続を確立します。
または、VPNを使用する必要がある場合は、sshをジョブに組み込むのではなく、その役割用に設計されたVPNを使用します。
SSHトンネルTCP TCP経由。これにより、輻輳制御、再送信、ウィンドウスケーリングアルゴリズムで問題が発生します。アドホックな作業には優れたユーティリティですが、本番環境のマルチユーザー操作は推奨しません。かなりの帯域幅を使用するもの。
本当に必要の場合、*
で-L
のバインドアドレスを使用できます。例:.
-L *:5431:localhost:xxxx
または、そのホストのGatewayPorts yes
に.ssh/config
を設定するか、次のように-o
コマンドラインオプションを使用します。
-o GatewayPorts=yes