ip_conntrack_tcp_timeout_installed не применяется ко всей подсети

У меня есть настройка nat с тысячами подключенных к ней устройств. Шлюз имеет свой интернет, предоставляемый eth0, а устройства на стороне локальной сети подключаются к eth1 на шлюзе.

У меня есть следующие настройки с iptables:

/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
/sbin/iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

eth1 настроен следующим образом:

    ip: 192.168.0.1
subnet: 255.255.0.0

Клиентам назначаются ips от 192.168.0.2 до 192.168.255.254.

В /etc/sysctl.conf у меня есть следующая настройка для ip_conntrack_tcp_timeout_installed

net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=1200

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

Кажется, это работает хорошо, и мы протестировали настройку с более чем 10000 клиентских устройств.

Однако проблема, которую я вижу, заключается в том, что установленный TCP тайм-аут 1200 применяется только к устройствам в диапазоне IP-адресов от 192.168.0.2 до 192.168.0.255. Все устройства с IP-адресами в диапазоне от 192.168.1.x до 192.168.255.x по-прежнему используют 5-дневный тайм-аут по умолчанию.

Это оставляет слишком много «УСТАНОВЛЕННЫХ» соединений в таблице /proc/net/ip_conntrack, и в конечном итоге она заполняется, хотя время их ожидания должно истекать в течение 20 минут, они показывают, что время ожидания истекает через 5 дней.

Очевидно, я где-то пропустил настройку или что-то настроил неправильно.

Какие-либо предложения?

Спасибо


person Stephen Hankinson    schedule 17.02.2012    source источник
comment
+1 за хороший вопрос, но, вероятно, лучше обратиться к людям с serverfault.com   -  person Adam Liss    schedule 17.02.2012
comment
На всякий случай, если у кого-то еще есть аналогичная проблема. В основном я установил conntrack_tools и запустил sudo /usr/sbin/conntrack -F для сброса таблицы, и после этого все соединения, казалось, начали использовать тайм-аут 1200 с вместо 5-дневного тайм-аута.   -  person Stephen Hankinson    schedule 17.02.2012


Ответы (1)


Как упоминает @StephenHankinson, существующие соединения (см. conntrack -L) во время изменения переменной sysctl не сбрасывают тайм-аут. Обычно это не должно быть проблемой, поскольку эти соединения в конечном итоге заканчиваются, но NFCT можно заставить забыть обо всех CT, используя conntrack -F. Обратите внимание, однако, что это может уничтожить существующие соединения, если ваш набор правил не разрешает «НОВЫЕ» соединения, не начинающиеся с TCP SYN.

person jørgensen    schedule 20.02.2012