TCP может обеспечить больше чем 65 535 портов?

Вы думали в правильном направлении, но использовали немного неправильного правила.

$ iptables -t nat -A PREROUTING -p tcp -d your_static_ip_of_eth1 \
--dport 8888 -j DNAT --to-destination 192.168.1.90:8888

Это правило передаст весь трафик, который достигает Вашего сервера с целевым портом 8888 и с целевым IP его интерфейса eth1 к Вашему внутреннему веб-серверу. Если Вы хотите изменить его так, Ваш сервер отвечает в порте 80 затем замените номер порта --dport опция. Если Вам нравится изменяться, порт веб-сервера затем изменяют порт --to-destination опция.

Я предполагаю, что Вы защитили свою систему с надлежащим набором правил iptables, но для полноты, рассмотрите эти правила также:

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth2 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -p icmp -j ACCEPT
-A FORWARD -i lo -j ACCEPT
-A FORWARD -o eth0 -j ACCEPT
-A FORWARD -o eth1 -j ACCEPT
-A FORWARD -i eth2 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

Также Вам нужна включенная маршрутизация ipv4, так отредактируйте/etc/ufw/sysctl.conf и некомментарий:

net/ipv4/ip_forward=1
50
22.07.2018, 06:51
4 ответа
[1131078] Глядя на RFC для TCP: [1131464]RFC 793 - Transmission Control Protocol[1131465], кажется, что ответ будет "нет" из-за того, что TCP-заголовок ограничен 16 битами для поля source/destination port. Хотя IPv6 и даст нам гораздо большее пространство IP-адресов, 32 бита против 128 бит, он не предпринимает попыток улучшить ограничение TCP-пакета 16 битами для номеров портов. Интересно, что в RFC для IPv6: [1131467]Internet Protocol, Version 6 (IPv6) Specification[1131468], поле IP должно быть расширено.

/nonew

Когда TCP проходит через IPv6, изменяется метод, используемый для вычисления контрольной суммы, согласно [1131799]RFC 2460[1131800]:

Любой транспортный или другой протокол верхнего уровня, который включает адреса из IP-заголовка в вычисление контрольной суммы, должен быть модифицирован для использования через IPv6, чтобы включить 128-битные адреса IPv6 вместо 32-.bit IPv4 addresses.

Так как можно получить больше портов?

Одним из подходов было бы суммирование дополнительных IP-адресов с использованием большего количества интерфейсов. Если ваша система имеет несколько сетевых карт, это проще, но даже с одной сетевой картой можно использовать виртуальные интерфейсы (так же известные как [1131474]псевдонимы[1131475]) для выделения большего количества IP-адресов, если это необходимо.

ПРИМЕЧАНИЕ:[1131477] Использование псевдонимов было заменено на


iproute2

, который можно использовать для суммирования IP-адресов на одном интерфейсе (т.е. [1131480]eth0[1131481]).

Пример


Linux Advanced Routing & Traffic Control HOWTO

Multiple default routes / public gateway IPs under Linux

iproute2 cheat sheet - сайт Даниила Батурина

84
27.01.2020, 19:33
[12160] Возможно ли настроить систему Linux таким образом, чтобы она обеспечивала более 65 535 портов? [12161]Нет.[12162]Намерением было бы наличие более 65k демонов, прослушивающих данную систему.[12163]Тогда вам нужна:[12164]конфигурация [1131899]iptables[1131900], которая перенаправляет содержимое трафика, или[12165]"сервис брокера", или "сервис мультиплексора", который будет принимать входящие соединения на одном порту и перенаправлять их к соответствующему демону "позади него". Если Вы хотите, чтобы стандартные протоколы проходили немодифицированные, Вам, возможно, придется реализовать прослушивание/распознавание протоколов в этой мультиплексорной службе, таким образом, что брандмауэр IDS или брандмауэр уровня 7 будет анайльзировать; это полностью возможно с подавляющим большинством протоколов. [12166] Во втором пункте вы можете создать эту службу для работы с более чем 2^16 "портами", если захотите. Я уверен, что влияние на производительность будет минимальным по сравнению с нагрузкой на 2^16+ работающих слушателей. [12167]Демоны в Linux могут прослушивать unix-сокеты, существующие в файловой системе, поэтому ваш "мультиплексорный сервис" может поддерживать внутреннее отображение внешнего порта <-> внутреннего unix-сокета. Скорее всего, вы столкнётесь с лимитом процессов ядра (32Кбайт процессов?), прежде чем закончится работа inodes в любой современной файловой системе.[1131315].
7
27.01.2020, 19:33

Да вы можете!

Это было сделано ранее, например, сервер шифрования EdgeHill, Wicch имеет> 25.000.000 Deamons, работающих в Интернете.

-3
27.01.2020, 19:33

Я хотел вмешаться только потому, что хорошего ответа нет.

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

Вы могли бы использовать эту опцию и ее информационную информацию для расширения номера порта источника, назначения или обоих портов.

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

Короче говоря, сделать это непросто, и лучше было бы использовать один многоразовый прослушиватель и данные, содержащиеся в полезной нагрузке пакета.

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

Rtsp, например, может использовать заголовок SessionId вместе с различными другими заголовками в полезной нагрузке IP-пакета, чтобы определить, для какого соединения был отправлен запрос, и действовать соответственно, например, если сокет, из которого было доставлено сообщение, не совпадает с удаленным адресом сокета, которому соответствует сеанс, тогда можно либо разрешить сеансу обновляться новым сокетом для обработки, отклонить сообщение или выполнить ряд других действий. в зависимости от приложения.

Http-сервер также может работать с этим или любым другим типом сервера.

Главное, что следует помнить при разрешении повторного использования портов, - это то, что вы также должны учитывать исходный IP-адрес.

2
27.01.2020, 19:33

Теги

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