web-dev-qa-db-ja.com

iptables転送でSSHリバーストンネルを作成する方法

ホームネットワークにサーバーがあり(ポート転送不可)、WANにVPSがあります。ホームサーバーに転送するVPSからではなく、toの特定のポートでの要求が必要です。 VPSでlocalhostにリクエストを送信すると正常に機能するSSHトンネルがあります。しかし、インターネットからVPSのlocalhostに転送されたリクエストを、トンネル経由でホームサーバーに送信したいのですが。また、双方向である必要があります。

私は this の質問を見ましたが、それは私にはうまくいきません。私が何か間違ったことをした可能性は十分にあります。

私の正確な手順:
ホームサーバーのサーバーaで、次のコマンドを実行してトンネルをセットアップしました。

ssh -v -N -R 2222:localhost:22 [email protected]

サーバーb(VPS)で次のコマンドを実行しました。

iptables -t nat -A PREROUTING -p tcp --dport 2223 -j DNAT --to-destination 127.0.0.1:2222

そして、別のマシンからsshを試しました:

ssh [email protected] -p 2223

GatewayPorts yes in sshd_configただし、同じ問題がまだ見つかります。
ssh:ホストserver-b.comポート2223に接続:接続が拒否されました

4
Jachdich

サーバーbGatewayPorts yesAllowTcpForwarding yessshd_configを設定します。 GatewayPorts clientspecifiedを使用して、サーバーaのIP 0.0.0.0または*に明示的に言及し、リバーストンネルを作成します。サーバーbのsshdがパブリックからの接続も受け入れるように:

ssh -NTR *:2222:localhost:22 [email protected]

それ以外の場合、sshdはGatewayPorts noの場合と同様に、ループバックインターフェイスでのみリッスンします。

別のマシンからポート2222sshを追加します。

ssh [email protected] -p 2222

認証後、サーバーaにログインします。
iptables転送を設定する必要はありません。ところで、可能であれば、リモートログインにはユーザーrootを使用しないでください。


GatewayPortsオプションを設定しない場合は、2223などの他のポートからlocalhost:2222にトラフィックを転送する必要があります。

  • これは、サーバーiptablesbで実行できます。

    iptables -t nat -I PREROUTING -p tcp -m tcp --dport 2223 -j DNAT --to-destination 127.0.0.1:2222
    

    * REDIRECTは同じインターフェースでのみ機能します

    しかし loopbackインターフェースへのルーティング は次の場合を除いて許可されません。

    echo 1 | Sudo tee /proc/sys/net/ipv4/conf/all/route_localnet
    

    別のマシンからポート2223sshを追加します。

    ssh [email protected] -p 2223
    

別のオプションは、sshsocatnetcat2223などのツールを使用して、ポート2222から*inetdに最小限のローカル転送サーバーをセットアップすることです。

  • サーバーbで、socatを使用:

    socat TCP-LISTEN:2223,fork TCP:127.0.0.1:2222
    
  • またはnetcatを使用:

    nc -l -p 2223 -c "nc 127.0.0.1 2222"
    
  • またはsshを使用:

    ssh -4gfNTL 2223:localhost:2222 localhost
    

上記のいずれかをリバーストンネルと組み合わせて、サーバーaからのダブルフォワーディングを1つの手順で実行できます。

ssh -TR *:2222:localhost:22 [email protected] "ssh -4gfNTL 2223:localhost:2222 localhost"
4
Irfan Latif