SSH接続を確立するときにローカルポートをどのように指定しますか?

SSH接続を確立するときにローカルポートをどのように指定しますか?

IDCでホストされている2つのサーバーがあります。ポート20/21/22/23/3389/33101-33109を使用して、2つのサーバー間の接続のみを確立できます。 IDCネットワークデバイスは、送信元ポートまたは宛先ポートが20/21/22/23/80/3389/33101-33109リスト/範囲にない他のすべてのパケットをブロックします。ただし、SSHの送信元ポートはランダムです。

このコマンドを使用すると、リモートポートを簡単に指定できます。ssh username@server -p remote_port

sshもしそうなら、ポート33101などを使用してSSH接続を確立できるようにローカルソースポートを指定するコマンドパラメータや他の方法はありますか?

私のネットワークトポロジは次のとおりです。
ネットワークトポロジ

答え1

SSH クライアントの送信元ポートは指定できません。

ncただし、次のようにプロキシとして使用できます。

ssh -p 33101 -o 'ProxyCommand nc -p 33101 %h %p' $SERVER_2

~からunbuntuサーバーでSSHの送信元ポートを設定するには?(サーバー障害関連)

答え2

ワンタイムまたは時々発生する状況では、ProxyCommandメソッドは間違いなく非常に便利な方法です。

一方、複数の同時接続が必要な場合、または日常業務でこのコマンドを頻繁に使用する必要がある場合は、サーバーにネットワークアドレス変換(NAT)ルールを設定することも検討できます。

root単一のNATルールを最初に適用するには、サーバーへのスーパーユーザー(通常)アクセスが必要です。参考にしてください可能「サーバー」が実際にはマシンではなくコンテナ(Dockerコンテナなど)の場合、スーパーユーザーアクセスがあってもNATルールはまったく(または効果的に)適用されません。

このスイートを含む一般的なLinuxシステムについて言えばiptables、例の例でserver1に適用されるNATルールは次のとおりです。

iptables -t nat -I POSTROUTING -d <server2-ip-address> -p tcp --dport <server2-port> -j SNAT --to :33101-33109

このコマンドは、Linuxカーネルにポートへの接続を確立するように指示します。サーバー2ポート~のserver2-ip-アドレスその時点で利用可能な33101-33109の範囲で選択されたソースポートを使用してください。

ルールが適用されると、正常に server2 に接続できます。

ssh username@server2 -p remote_port

sshNATルールで指定された範囲内に利用可能なポートがある限り、同じコマンドを必要に応じて同時に使用できます。

ただし、netstatサーバーで実行される(または同等のコマンド)は、接続のローカルアドレスを次のように報告します。変更されていない、ランダムに選択されたソースポート番号。サーバー2に送信された実際のトラフィック修正済みソースポート番号。

NATルールを元に戻すには、コマンドは同じで-Dオプションに置き換えられます-I

起動時のNATルールの自動適用は、サーバー上のLinuxディストリビューションと特定のファイアウォール構成があるかどうかによって異なります。

私はBSDに似たシステムの経験はありませんが、同等のシステムがあると信じています。

関連情報