Суть такова: есть коробка с линуксом (Debian 7), которая терминирует vlan’ы, поднимает pppoe и запускает эти vlan’ы в интернет через pppoe. С помощью iptables настроен файрвол и NAT, поднимающиеся во время загрузки одним скриптом. (pastebin.com/7ShyK22N)
Пустил домашнюю сеть (14 машин) через этот шлюз. Через какое-то время (5-7 дней) начал тормозить интернет: то Chrome загружает страницу по минуте с постоянным «Ожидание…» внизу, то отваливаются торренты. С помощью
/sbin/sysctl net.netfilter.nf_conntrack_count
посмотрел, сколько активных NAT-трансляций, их оказалось очень много. Уменьшил тайм-ауты и увеличил размер таблицы, старался придерживаться RFC5382:
echo 65536 > /sys/module/nf_conntrack/parameters/hashsize
echo 524288 > /proc/sys/net/netfilter/nf_conntrack_max
echo 120 > /proc/sys/net/netfilter/nf_conntrack_generic_timeout
echo 7440 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established
но даже с одним компьютером в сети все равно
net.netfilter.nf_conntrack_count = 294
и тормоза пускай и уменьшились, но все равно сохраняются.
Что я делаю не так? Есть какие-то развернутые инструкции по поднятию интернет-шлюза на Linux’е для абсолютных новичков?
P. S. pastebin.com/VQ6T19Xp — список NAT-трансляций при условии, что в сети только я и мой телефон.
Евгений Ферапонтов @e1ferapontov
left;»>Виноват оказался PMTU Discovery blackhole. У провайдера где-то перекрыт ICMP трафик, а мое правило iptables для сжимания mtu на внешнем интерфейсе не работало.
Оказывается, TCP MSS правила можно и нужно записывать исключительно в таблицу mangle, чего я как раз и не понял в первый раз ввиду отсутствия документации. После этого все заработало:
iptables -t mangle -A FORWARD -p tcp —tcp-flags SYN,RST SYN -j TCPMSS —set-mss 1300