iptables転送を使用してSSHリバーストンネルを作成するには?

iptables転送を使用してSSHリバーストンネルを作成するには?

ホームネットワークにサーバーがあり(ポート転送できません)、WANにVPSがあります。特定のポートに対する要求が必要です。到着、私のホームサーバーに転送されるVPSではありません。 SSHトンネルがあり、localhostVPSに要求を送信すると正常に動作します。しかし、インターネットからVPSに転送された要求がlocalhost私のホームサーバーにトンネリングされることを望みます。そして双方向道路でなければなりません。

私は見たこれ質問がありますが、私にはうまくいきません。私が何か間違っているようです。

私の正確なプロセス:私のホームサーバーで次のコマンドを実行してトンネルを設定します
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まだsshd_config同じ問題が発生します。
ssh:ホストserver-b.comポート2223に接続中:接続が拒否されました。

答え1

サーバーに設定GatewayPorts yesします。 IPを明示的に参照するか、サーバーにリバーストンネルを作成します。このように、サーバーのsshdはパブリック接続も許可します。AllowTcpForwarding yessshd_configbGatewayPorts clientspecified0.0.0.0*ab

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

それ以外の場合、sshdは.NET Frameworkと同様にループバックインターフェイスのみを受信しますGatewayPorts no

今、ssh 別のマシンからポートへ2222

ssh [email protected] -p 2222

a認証後、サーバーにログインします。転送を
設定する必要はありませんiptables。ただし、可能であれば、ユーザーがrootリモートでログインするのを防ぎます。


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

  • iptablesこれはサーバーで実行できますb

    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
    

    今、ssh別のマシンからポートへ2223

    ssh [email protected] -p 2223
    

2223別のオプションは2222sshsocatnetcat*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サーバーのステップ:

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

関連情報