私数字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では-p
netstatを追加して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エラーを返します)。