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 서버 포함)가 특정 포트를 수신할 때 하나의 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청취 모드를 두 번 시작했습니다. 한 번은 바인딩 127.0.0.1하고 다른 한 번은 바인딩 192.168.1.178(이 컴퓨터에서는 두 개의 IP 주소임)하여 둘 다 ports 를 사용했습니다 1234.

netstat그러면 두 개의 청취 소켓이 표시됩니다.

macOS에서 테스트했지만 Linux에서는 -pnetstat를 추가하여 두 가지 다른 프로세스를 표시할 수 있습니다. 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 오류를 반환함).

관련 정보