@e1ferapontov
Админю всякую виртуализацию

Почему тормозит интернет через Linux-шлюз?

Суть такова: есть коробка с линуксом (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-трансляций при условии, что в сети только я и мой телефон.
  • Вопрос задан
  • 3555 просмотров
Решения вопроса 1
@e1ferapontov Автор вопроса
Админю всякую виртуализацию
Виноват оказался 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
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
merryjane
@merryjane
Системный администратор
A в логи ничего не падает?
В тот же dmesg\syslog\messages?
Поставьте на сервер какой-либо сервер статистики, чтобы потом увидеть на графиках, что происходит с сетью, количество ошибок на интерфейсах, потребление памяти, процессора.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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