Могу ли я заставить один сервер прослушивать более 65535 портов, подключив адрес IPv4

В неотшлифованной версии скрипт Bash -мог бы выглядеть так, предполагая, что ваши данные содержатся вdatafile:

#!/bin/bash

printf "IPs where status is fail:\n"
grep -z -oP 'IP=\K.*\n(?=STATUS=FAIL)' datafile

printf "Avg time taken by all requests where status is 'success':\n"
grep -z -oP 'STATUS=SUCCESS\nTIME=\K\d+' datafile | \
  awk '{ total += $1; count++ } END { print ( count == 0 ? "NaN" : total/count); }'

printf "Number of logins (successful and failed) via Mobile:\n"
grep -c 'Source=Mobile' datafile

Краткое разъяснение:

  • Q2 )Расчет среднего времени :команда grepизвлекает значения времени (, которые, как предполагается, все в секундах ). Эти значения передаются в команду awk, которая вычисляет их среднее значение, а затем печатает это среднее значение.
11
05.03.2021, 10:42
4 ответа

Вы наверняка можете иметь несколько процессов, прослушивающих один и тот же порт, если они привязаны к разным 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-адресами на этом компьютере ), оба используют порт 1234.

Затем

netstatпоказывает два прослушивающих сокета.

Я провел тест на macOS, но в Linux вы можете добавить -pв netstat, чтобы показать два разных процесса. В macOS вы можете использовать lsof -nP, чтобы показать то же самое.

Обратите внимание, что, поскольку вы открываете «дыру» в уровне безопасности, вы, вероятно, не хотите привязываться к доступному извне (общедоступному )IP-адресу, иначе любой сможет подключиться к этому IP+порту и добраться до удаленной системы, которую, очевидно, нужно было защитить.

Следует использовать только петлевые IP-адреса (127.0.0.1, 127.0.0.2... )или частные IP-адреса в частной сети, доступной только для доверенных систем.

Для полноты уточним, что активное TCP-соединение определяется 4 -кортежами (локальный IP-адрес, локальный порт, удаленный IP-адрес, удаленный порт ), но прослушивающий сокет действительно определяется только локальным ИП и порт. Соединения, установленные с этим сокетом, получат полный кортеж 4 -.

3
18.03.2021, 22:27

Порт назначается IP-адресу, и вы можете назначить (в Linux, поскольку я знаю )более одного IP-адреса для интерфейса. Но, конечно, могут быть и другие ограничения (, такие как доступные файловые дескрипторы -сокет ()системный вызов возвращает файловый дескриптор или -1 ошибка ).

4
18.03.2021, 22:27

Ограничение на количество прослушиваемых портов указано для каждого адреса независимо от IPv4 или IPv6. Ограничение исходит из заголовков пакетов TCP и UDP , которые состоят из двух байтов, поэтому номера портов для TCP и UDP могут быть только в диапазоне от0x0000(0 )до 0xFFFF(. 65535 ).

Когда какая-либо служба (, включая SSH-сервер ), прослушивает порт, она может выбрать прослушивание одного IP-адреса или каждого IP-адреса. Таким образом, добавление нового адреса не обязательно поможет, если вы не настроите каждую службу для прослушивания одного конкретного IP-адреса.

Однако две или более службы могут совместно использовать один и тот же порт, если они прослушивают разные IP-адреса.


Честно говоря, NAT всегда был чем-то вроде взлома. Потребность в этом отпала в IPv6, где каждая машина имеет собственный общедоступный IPv6-адрес и брандмауэр, ограничивающий входящие соединения, вместо NAT.


Более распространенным подходом к этой ситуации является использование машины-бастиона... пользователи подключаются по ssh к бастиону, а оттуда по ssh к нужной им машине.

14
18.03.2021, 22:27

Оба IPv4 и IPv6 не имеют концепции порта, только исходный и целевой IP-адреса. Ограничение портов определяется протоколами TCP и 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=...
5
18.03.2021, 22:27

Теги

Похожие вопросы