web-dev-qa-db-ja.com

SSH接続を確立するときにローカルポートを指定するにはどうすればよいですか?

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

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

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

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

13
fajin yu

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

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

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

からunbuntuサーバーでSSHのソースポートを設定するにはどうすればよいですか?(ServerFaultで)

26
PapEr

1回限りの、またはとにかく時折の状況では、ProxyCommandアプローチは非常に便利です。

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

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

iptablesスイートを備えた典型的なLinuxシステムと言えば、サンプルケースのserver1に適用するNATルールは次のようになります。

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

このコマンドは、Linuxカーネルに、ポート33から33109の範囲内で選択されたソースポートを使用して出て行くようにポートserver2-portserver2-ip-addressに接続するように指示します。その時点で利用可能です。

そのルールが整ったら、いつもの方法でserver2に接続します。

ssh username@server2 -p remote_port

NATルールで指定された範囲に使用可能なポートがある限り、この同じsshコマンドを必要な回数だけ同時に使用することもできます。

ただし、サーバーでnetstat(または同等のコマンド)を実行すると、接続のローカルアドレスがnmodifiedであると報告されます。実際に配信されるトラフィックであっても、ランダムに選択されたソースポート番号です。サーバー2に変更済み送信元ポート番号が含まれます。

NATルールを元に戻すためのコマンドは、-Dの代わりに-Iオプションを除いて同じです。

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

私はBSDライクなシステムの経験はありませんが、同等のものがあると信じています。

2
LL3