IPv4アドレスを追加して、単一のサーバーに65535を超えるポートをリッスンさせることはできますか?

IPv4アドレスを追加して、単一のサーバーに65535を超えるポートをリッスンさせることはできますか?

数字SSH経由でアクセスするサーバー(一部は他のNATの背後にある)にはSSHトンネルが必要な場合があります。現在、私はこの目的のために単一のVPSを使用しています。そんなとき数字達成する65535 - 1023 = 64512、VPSにトンネルを接続できるポートが不足しています。別のVPSを起動する必要がありますか、または既存のVPSに追加のIPアドレスを追加する必要がありますか?

つまり、Linuxシステムあたりまたはネットワークインタフェースあたり65535の制限が設定されていますか?この回答通常、すべてのIPアドレス、特にすべてのIPv4アドレスを意味するようです。一つも同じです。5タプル新しいIPアドレスを導入するには新しいタプルが必要なので、制限がリセットされることを意味しますか?これがIPv4に当てはまる場合、IPv6では異なりますか?

答え1

受信ポートの制限は、IPv4 または IPv6 に関係なく、アドレス別に適用されます。制限は以下に由来します。伝送制御プロトコルそしてUDPプロトコルパケットヘッダーは2バイトなので、TCPとUDPのポート番号は0x0000(0)から0xFFFF(65535)の範囲にしかありません。

すべてのサービス(SSHサーバーを含む)が特定のポートをリッスンするときに、1つのIPアドレスまたはすべてのIPアドレスでリッスンすることを選択できます。したがって、各サービスが特定のIPアドレスを受信するように設定しない限り、新しいアドレスを追加することは必ずしも役に立ちません。

ただし、2つ以上のサービスできる異なるIPアドレスを受信する限り、同じポートを共有します。


正直言って、NATはいつもハッキングでした。 IPv6では、各システムには独自のパブリックIPv6アドレスがあり、着信接続を制限するファイアウォールがNATに代わるため、その必要性が減少しました。


この状況を解決する最も一般的な方法は、「bastion」マシンを使用することです。ユーザーはsshを介してbastionに接続し、そこから希望のボックスにsshを接続します。

答え2

両方IPv4そしてIPv6ポートの概念はなく、送信元IPアドレスと宛先IPアドレスのみがあります。ポート制限は次の式で決定されます。伝送制御プロトコルそしてUDPプロトコル規約。

開始ポート制限(デフォルト:1024)を拡張してエンドユーザーにさらにポートを追加するには、次のコマンドを使用して特権ポート範囲をより低い数値に下げることができますsysctl

echo "net.ipv4.ip_unprivileged_port_start=100" > /etc/sysctl.d/privileged_ports.conf

IPエイリアスを使用して、単一のネットワークインターフェイスカードに複数のIPアドレスを追加できます。

systemdを使用すると、次のことができます。.network文書:

[Network]
Address=192.168.55.1/24
Address=192.168.55.2/24
Gateway=...

答え3

複数のプロセスが異なるIPにバインドされている場合、同じポートで複数のプロセスがリッスンする可能性があります。

以下は使用デモですnc

% nc -l 127.0.0.1 1234 &
[1] 24985
% nc -l 192.168.1.178 1234 &
[2] 24988
% netstat -an | grep 1234
tcp4       0      0  192.168.1.178.1234     *.*                    LISTEN     
tcp4       0      0  127.0.0.1.1234         *.*                    LISTEN     

ご覧のとおり、私はncリスニングモードを2回開始しました。一度はバインド127.0.0.1し、もう1つはバインディング192.168.1.178(このコンピュータでは2つのIPアドレス)で、両方ともportsを使用しました1234

netstatこれにより、2つのリスニングソケットが表示されます。

macOSでテストしましたが、Linuxでは-pnetstatを追加して2つの異なるプロセスを表示できます。 macOSでは、lsof -nPこれを使用して同じコンテンツを表示できます。

セキュリティ層に「穴」を開いているので、外部からアクセス可能な(パブリック)IPアドレスにバインドしたくありません。それ以外の場合は、誰でもそのIP +ポートに接続してリモートシステムに接続できます。保護が必要です。

信頼できるシステムを介してのみアクセスできるプライベートネットワークでは、ループバックIPアドレス(127.0.0.1、...)またはプライベートIPアドレスのみを使用する必要があります。127.0.0.2

完全性を確保するために、アクティブTCP接続は4タプル(ローカルIP、ローカルポート、リモートIP、リモートポート)として定義されますが、リスニングソケットは実際にはローカルIPおよびポートとしてのみ定義されることを指定します。このソケットへの接続は完全な4タプルを取得します。

答え4

ポートはIPアドレスに割り当てられています(私が知っている限りLinuxでは)、このインターフェイスに複数のIPアドレスを割り当てることができます。ただし、もちろん、他の制限もあります(たとえば、使用可能なファイル記述子 - ソケット()システムコールはファイル記述子または-1エラーを返します)。

関連情報