Я использую сервер Ubuntu 10.04 со стандартным ядром в качестве NAT-маршрутизатора. Я использую iptables и tc для приоритезации трафика на основе портов. Работает нормально. Я дал http более высокий приоритет. Так что моя сеть завалена YouTube и большим количеством загрузок http. Мой вопрос: можно ли заставить iptables распознавать и отмечать пакеты, принадлежащие потокам YouTube или более крупным файлам? Моя цель - ускорить просмотр веб-страниц.
Как уже писал Калеб, это не задача iptables, так как вам не хватает «правильных» функций проверки содержимого. Возможно, вы захотите взглянуть на HTTP-прокси, например Кальмар. Последние версии поставляются со сложными механизмами регулирования полосы пропускания, называемыми «пулами задержки», которые можно комбинировать с механизмами маркировки, называемыми «ACL», для сложных сценариев управления полосой пропускания.
Мы настроили установку Squid на сайтах клиентов с требованиями, очень похожими на ваши.
Это с точки зрения iptables
на секунду Когда вы обрабатываете пакеты один за другим, невозможно идентифицировать пакет как приходящий от передачи большого или маленького файла, вы просто передаете их. Если вы проведете глубокую проверку пакетов, вы сможете узнать немного больше о содержимом, но вы все еще не знаете, насколько большим будет файл или даже что он является частью файла, а не веб-страницы.
Вы можете пометить пакеты, направляемые на Youtube и из Youtube, и фильтровать их по отдельности, но я считаю, что последнее, что вы хотите делать с потоковым мультимедиа, - это замедлять его. Чем быстрее это произойдет, тем счастливее будут пользователи и тем скорее исчезнет трафик. Вы можете использовать TC, чтобы поместить все, что поступает с серверов Youtube (по блоку IP) в очередь с более низким приоритетом, но если ваши пользователи все еще смотрят видео, будет ли у них много времени или мало времени для загрузки того же количества байтов. перемещаться по вашей сети.
Я предлагаю вам рассмотреть это, по крайней мере, частично, как проблему с персоналом, и разработать и внедрить (используя человеческое общение, а не цифровое обнаружение) некоторые приемлемые политики использования. Затем, если вам все еще нужна пропускная способность сети, немного увеличьте свою инфраструктуру.
Вы можете попробовать использовать -m connbytes
. Пусть он совпадет с чем-то большим. Затем отметьте пакет и используйте tc
Механизм сопоставления fwmark.
Однако я склонен согласиться с другими, что для этой цели вам следует использовать что-то, что работает на уровне 7.
-m connbytes
iptables -A FORWARD -i $WAN_IFACE -o $LAN_IFACE -m connbytes --connbytes $TRIGGER_SIZE: --connbytes-dir reply --connbytes-mode bytes -j CONNMARK --set-mark $BULK_MARKER
iptables -t mangle -A PREROUTING -m connmark --mark $BULK_MARKER -j CONNMARK --restore-mark
Первое правило будет соответствовать связи общее количество переданных байтов превышает $ TRIGGER_SIZE (осторожно, это двоеточие должно существовать!)
Второе правило будет передавать CONNMARK в пакет MARK (fwmark), чтобы tc
может выполнять некоторое регулирование / контроль.
Обратите внимание, что я указываю ответы -i, -o и -dir в первом правиле; это будет соответствовать пакетам, входящим в интерфейс WAN (и выходящим из интерфейса LAN), которые ответы к исходящему соединению, инициированному кем-то в локальной сети. Если вы не укажете -i и -o и / или используете -dir оба, вы также будете сравнивать исходящие пакеты (например, почту с почтового сервера).