Назад | Перейти на главную страницу

NAT Gateway - Максимальный лимит подключений

Я знаю сети достаточно, чтобы быть опасным. Я не особо разбираюсь в мельчайших подробностях NAT на низком уровне.

Я случайно оказался сегодня в дискуссии о размещении группы наших узлов за шлюзом NAT. (1 публичный IP-адрес и X частных LAN-адресов). Я вызвал 16-битное ограничение на поля порта источника и назначения в протоколе TCP, (http://www.ietf.org/rfc/rfc793.txt - стр.15) и упомянул, что это ограничит нас примерно 65 000 подключений (65536). - Я больше не уверен в этом ответе. Вы можете мне помочь с некоторыми подробностями?

Я понимаю, что входящий порт (порт сервера) на нашей стороне может принимать столько подключений, сколько существует комбинаций sourceIP x SourcePort. Давайте временно отбросим их и сосредоточимся на соединениях, возникающих в локальной сети, проходящих через шлюз NAT и заканчивающихся на случайном хосте на случайном порту.

В обычной системе [Linux] исходящие соединения, как я полагаю, ограничены 1 на порт на исходный IP-адрес. Если мы представим, что живем в простом мире, где каждая система имеет только 1 IP-адрес, тогда «нормальная система» будет ограничена абсолютным максимумом в 65536 подключений.

1) В TCP ограничен ли IP-адрес одного источника до 65536 MAX теоретических исходящих соединений?

2) Или на самом деле ограничение составляет 65536 подключений для каждого удаленного хоста?

2) [Написано по-другому]: Можно ли использовать один и тот же исходный порт для другой комбинации remoteHostIP: RemotePort?

Например: (Это нормально?)

Source IP   |Source Port |Remote IP|Remote Port   
192.168.0.20:36500   -->    8.8.8.8:23
192.168.0.20:36500   -->    8.8.4.4:23

3) Отличаются ли ответы на вопросы 1 и 2 для ... «ненормальной системы» [маршрутизатор Cisco, действующий как шлюз NAT]?

Пример: специализированное сетевое устройство с одним общедоступным IP-адресом и до ~ 65 000 LAN IP [или более] за ним? Есть ли магия на месте или ответ на вопрос 2 всегда: да? (или нет)

4) Все вышеперечисленные вопросы предполагают TCP-соединение с отслеживанием состояния. Отличается ли история с соединением без сохранения состояния, например UDP?

И в конечном итоге:

5) Будет ли наша локальная сеть ограничена 65536 (или другим теоретическим пределом) одновременных подключений к внешнему миру через один общедоступный IP-адрес?

Спасибо! :)


Для ответа на этот вопрос мы разработали ПОЧЕМУ СОВЕРШЕННО НОВУЮ ПОМОЩЬ Cisco Nexus (я думаю, серии 7000). Возможно, лучше игнорировать ограничения памяти и т. Д., Если они не могут быть конкретно определены количественно.

Поправьте меня, если я ошибаюсь, но я так понимаю. Ограничения указаны для каждого клиента / сервера / порта. Итак, в свете этого.

1) В TCP ограничен ли IP-адрес одного источника до 65536 MAX теоретических исходящих соединений?

Нет. Я считаю, что теоретический максимум 65536 для одного и того же IP-адреса назначения.

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

Вы, вероятно, достигнете других ограничений ресурсов, когда начнете увеличивать число где-то около 64 КБ.

Маршрутизаторы потребительского уровня могут иметь гораздо более низкие ограничения из-за ограниченных ресурсов.

2) Или на самом деле ограничение составляет 65536 подключений для каждого удаленного хоста?

да

3) Отличаются ли ответы на вопросы 1 и 2 для ... «ненормальной системы» [маршрутизатор Cisco, действующий как шлюз NAT]?

Нет

4) Все вышеперечисленные вопросы предполагают TCP-соединение с отслеживанием состояния. Отличается ли история с соединением без сохранения состояния, например UDP?

UDP не требует установления соединения. Так что это не имеет отношения к UDP.

5) Будет ли наша локальная сеть ограничена 65536 (или другим теоретическим пределом) одновременных подключений к внешнему миру через один общедоступный IP-адрес?

Нет.


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

Короче говоря, он сильно зависит от платформы, конфигурации и реализации.

Но позвольте мне быстро объяснить:

По-видимому, в других ответах говорится о достижении теоретического предела> 65535 (обратите внимание, что порт 0 часто зарезервированный), которые в определенной степени верны, например ...:

  • В большом CGNAT системы или аналогичные полноценные маршрутизаторы, основная цель которых - это одно, включая NAT-PAT.
  • В определенных Дистрибутив Linux Теоретически это возможно при использовании ПК для программного NAT / маршрутизации процессором при определенных обстоятельствах, таких как RAM> 1 ГБ, ядро ​​подготовлено и т. д.

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

  • Cisco упоминает, что начиная с IOS 12 максимальное значение NAT зависит от DRAM, что приводит к примерно 10 КБ трансляций (источник), что меньше тех 65К в вашем вопросе.

  • Возьмите свой старый маршрутизатор xDSL, если вы хотите запустить P2P дома с большим количеством подключений, большинство из них настроили глобальный максимальный лимит 1024 ~ 4096. Например, мой домашний маршрутизатор FTTH имеет ограничение NAT, установленное производителем на 8K.

в заключение, чтобы ответить Q2-rewrite, я видел продукты с неудачной реализацией RFC3489 со следующими таблицами NAT. Очевидно, что последний значительно ограничивает возможности NAT:

  • iAddr: iPort - eAddr: ePort - dAddr: dPort (типичный симметричный nat)
  • iAddr: port - eAddr: port - dAddr (продукт очень низкого уровня)

Радуйтесь, если вам нравится этот ответ!

5) Будет ли наша локальная сеть ограничена 65536 (или другим теоретическим пределом) одновременных подключений к внешнему миру через один общедоступный IP-адрес?

Нет, потому что один IP-адрес NAT порта может использоваться для нескольких подключений:

cat /proc/net/ip_conntrack | grep 51380
tcp      6 191 ESTABLISHED src=10.1.8.5 dst=17.133.254.23 sport=51380 dport=5223 src=17.133.254.23 dst=my.nat.pub.ip sport=5223 dport=51380 [ASSURED] mark=0 use=2
tcp      6 24 CLOSE_WAIT src=10.1.26.1 dst=80.68.255.71 sport=51380 dport=80 src=80.68.255.71 dst=my.nat.pub.ip sport=80 dport=51380 [ASSURED] mark=0 use=2

Поскольку существует множество подходов к проектированию NAT, ответ, конечно, «зависит от обстоятельств». Джефф Хьюстон написал отличный обзор различных конструкций NAT.

По моему опыту, многие маршрутизаторы для малых и домашних офисов не могут обрабатывать> 64 КБ адресов по одному и тому же адресу, но не только из-за исчерпания портов. Многие из них имеют ограниченную память, и им не хватит ОЗУ для таблицы NAT задолго до того, как достигнут предел в 64 КБ.

Первичный ключ таблицы сопоставления NAT:

sourceIP:sourcePort + DestinationIP:DestinationPort

Мы можем сопоставить разные sourceIp: sourcePort с одним и тем же DestinationIP: DestinationPort. Итак, номер порта (2^16) не предел для подключения.