Мы используем NAT, созданный с помощью iptables. Однако при большом количестве подключений (или сеансов) через сервер NAT пакеты начинают сбрасываться. В системном журнале нет журнала и т. Д. Я думаю, это вызвано конфигурацией sysctl, но я не знаю, как исправить или увеличить количество разрешенных подключений.
Изменить: глубоко сожалею о том, что не предоставил дополнительную информацию. Итак, информация ниже;
NAT основан на 64-битном Ubuntu 12.04 LTS. На сервере NAT есть два интерфейса, у одного публичный IP, у другого локальный IP. Локальная IP-подсеть - 255.255.0.0.
Изменить 2: О «партиях»: я действительно понятия не имею, сколько, но я знаю, что это стандартная версия Ubuntu. То есть мы еще ничего не настраивали.
Спасибо
Вы не говорите, в какой системе вы используете iptables.
Если вы используете FreeBSD, он хранит сетевые пакеты в кластерах mbuf.
Вы можете настроить количество кластеров mbuf с помощью: sysctl kern.ipc.nmbclusters = 65536
Установив его на 65000, вы будете использовать 144 МБ памяти, и вы не должны превышать это значение без настройки адресного пространства.
Тогда это открывает вопрос об адресном пространстве в ядре. На i386 память ядра установлена на 1 ГБ. Вы можете увеличить до 2 Гб в файле конфигурации ядра:
options KVA_PAGES=512
На amd64 значение по умолчанию составляет 2 ГБ, и его нельзя настроить.
Вы можете увеличить объем физической памяти (по умолчанию 320 МБ), установленный в /boot/loader.conf
vm.kmem_size=1G
Это краткое изложение отличного отчета Игоря Сысоева, которое можно найти здесь: http://rerepi.wordpress.com/2008/04/19/tuning-freebsd-sysoev-rit/
Вы достигнете вышеуказанных пределов до ограничения количества портов в 64 КБ. Если ваш сервер является действительно загруженным брандмауэром, это вполне вероятно. Если вы используете Linux, может потребоваться аналогичная настройка.
Первый ответ был связан с FreeBSD. Проблемы те же, но параметры в Ubuntu разные:
Стандартный Ubuntu прошел долгий путь. Когда вы начнете настраивать эти параметры, вы можете создать больше проблем, чем исправить. Из-за недостатка информации вы даете мой совет - не трогайте эти параметры, пока вы немного лучше не разберетесь в сетевых частях. И если у вас действительно есть проблемы с некоторыми из этих параметров, вы обычно получите записи в журнале ядра.
300 серверов за NAT и всего 600 правил - это не слишком большое количество. Если это всего лишь группа серверов с небольшим входящим и исходящим трафиком, это должно быть прогулкой по парку. Если какой-либо из серверов имеет большой входящий или исходящий трафик, все может быстро испортиться.
Первая проблема, которую нужно решить, - это сколько «лотов». Цифры, которые вы пока показали, не страшны. И вы действительно должны убедиться, что у вас большие числа, прежде чем начинать настраивать сетевой стек с помощью sysctl. Будьте очень осторожны с этим.
Чтобы узнать, есть ли у вас большое количество одновременных подключений через ящик, вы можете сделать:
wc -l /proc/net/tcp
Или, чтобы получить еще больше статистики, вы можете сделать netstat -s
(Linux) или netstat -m
(FreeBSD). Это сообщит вам используемые в настоящее время числа. Имея эту информацию под рукой, вы можете решить, нужно вам настраивать или нет.
Наиболее частая проблема с занятыми NAT - это net.ipv4.netfilter.ip_conntrack_max
который определяет, сколько подключений вы отслеживаете. Вы можете увидеть, сколько записей находится в таблице отслеживания, с помощью:
sysctl net.netfilter.nf_conntrack_count
Проверьте установленный вами текущий максимум:
sysctl net.ipv4.netfilter.ip_conntrack_max
По умолчанию AFAIK - 65536. Вы можете увеличивать это число по мере необходимости, если у вас есть для него память.
Давидго упоминает 64К портов. Вы можете проверить количество настроенных эфемерных портов, используя:
sysctl net.ipv4.ip_local_port_range
Может, здесь нужно увеличить количество портов.
Интересно узнать, как быстро вы отбрасываете закрывающиеся сокеты. Это может привести к зависанию сокетов, и на загруженном сервере вы захотите освободить их быстрее:
sysctl net.ipv4.tcp_fin_timeout
Вы можете освободить порты быстрее, уменьшив значение thie до 25, может быть, 10 секунд.
Это, как обычно, те, которые нужно настроить, но есть и другие важные:
sysctl -a | grep conntrack | grep timeout
Вы можете установить все параметры, используя sysctl
командовать или редактировать /etc/sysctl.conf
Ваши результаты могут отличаться, но чтобы дать вам представление, приведенные ниже числа были установлены на достаточно загруженном сервере:
net.ipv4.netfilter.ip_conntrack_max = 196608
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 86400
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_orphan_retries = 1
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_max_orphans = 8192
net.ipv4.ip_local_port_range = 32768 61000
Вы не сообщили, что такое «много» соединений, и не предоставили нам подробностей об оборудовании, поэтому сложно дать окончательный ответ.
Возможно, вы столкнулись с жестким ограничением NAT, поскольку существует ограниченное количество (около 64 КБ) портов, и каждое соединение требует своего собственного порта в реализации Linux. Вы можете смягчить / преодолеть это, используя несколько IP-адресов (не уверен, что это вариант для вас) или, возможно, используя прозрачный прокси, если многие соединения являются HTTP)
Кроме того, что вы подразумеваете под «серверными пакетами»? Если вы имеете в виду «пакеты», вы можете обнаружить, что это ограничение не является ограничением NAT, а скорее может быть ограничением размера вашего Интернет-соединения или ограничением количества пакетов, которые может обработать подключенный маршрутизатор. [Более подробная информация может помочь нам и здесь]