HTB шейпер не работает с MARK

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

TonnyBennet
Сообщения: 230
ОС: Ubuntu Server 9.10

HTB шейпер не работает с MARK

Сообщение TonnyBennet »

Здравствуйте.

В офисе использую route2 для маршрутизации подсетей на два разных провайдера. Маркерую сети при помощи MARK в iptables и использую правила маршрутизации ip rule. Всё работает нормально. Решил используя те же метки сделать распределение скорости.

Шлюз Ubuntu Server 11.10. eth0 локальная сеть. ppp0 PPPoE от провайдера.

Локальная сеть офиса 192.168.0.0/24. Сеть для IT отдела 192.168.0.96/29.

В Iptables маркировка выглядит так:

iptables -t mangle -A PREROUTING -s 192.168.0.96/29 ! -d 192.168.0.0/16 -j MARK --set-mark 105
iptables -t mangle -A PREROUTING -s 192.168.0.96/29 ! -d 192.168.0.0/16 -j REURN

(Вот тут сразу вопрос: в описании HTB сказано, что он накладывает ограничения на очереди только ИСХОДЯЩИХ пакетов, т.е. если трафик идёт из интернета и то после обратного преобразования адресов в NAT при передаче пакета локальному компьютеру у пакета будет стоять адрес получателя локальной сети и этот пакет не пометится?

Как быть если помимо NAT я использую SQUID как прозрачный прокси?
iptables -t nat -A PREROUTING -i eth0 ! -d 192.168.0.0/24 -p tcp -m multiport --dport 80,8080 -j REDIRECT --to-ports 3128
)

Натим маркерованные пакеты.

iptables -t nat -A POSTROUTING -m mark --mark 105 -j SNAT --to-source ВНЕШНИЙ_АДРЕС_ШЛЮЗА

Скачал скрипт инициализации шейпера. Положил в /etc/init.d/htb поправил пути к файлам конфигурации и кеша. Создал файлы:

eth0

Код:

DEFAULT=100 R2Q=100


eth0-2.full_100Mbit

Код:

RATE=100Mbit


eth0-2:100.default

Код:

RATE=1Kbit CEIL=100Kbit LEAF=sfq PRIO=30


eth0-2:3.it

Код:

BURST=50Kb RATE=1Mbit CEIL=1Mbit LEAF=sfq PRIO=1 MARK=105


По идее при таком раскладе у меня должна скрорость на подсеть быть не более 1Mbit/s, но это не получается сделать трафик ограничивается дефолнтым классом. Если в классе it прописать вместо MARK 105 RULE 192.168.0.96/29 скорость ограничивается.

Скорее всего проблема с маркировкой пакетов в iptables. Пробовал добавить следующие правила
iptables -t mangle -A PREROUTING -d 192.168.0.96/29 -j MARK --set-mark 105
iptables -t mangle -A PREROUTING -d 192.168.0.96/29 -j RETURN

Ситуация не изменилась.
Спасибо сказали:
Аватара пользователя
kisil
Сообщения: 204
ОС: Slackware 13,37-14

Re: HTB шейпер не работает с MARK

Сообщение kisil »

Ну а если маркировать в таблице filter и по интерфейсу -o eth1 например.
Спасибо сказали:
TonnyBennet
Сообщения: 230
ОС: Ubuntu Server 9.10

Re: HTB шейпер не работает с MARK

Сообщение TonnyBennet »

kisil писал(а):
06.09.2012 23:02
Ну а если маркировать в таблице filter и по интерфейсу -o eth1 например.


По-моему маркировать пакеты можно только в mangle, и поясните пожалуйста причём тут интерфейс eth1?
Спасибо сказали:
Аватара пользователя
kisil
Сообщения: 204
ОС: Slackware 13,37-14

Re: HTB шейпер не работает с MARK

Сообщение kisil »

Да точно только в mangle
Спасибо сказали:
TonnyBennet
Сообщения: 230
ОС: Ubuntu Server 9.10

Re: HTB шейпер не работает с MARK

Сообщение TonnyBennet »

Похоже на одном компьютере сделать прозрачный прокси и шейпер не получится.

Для тестов сделал маркировку пакетов от mirror.yandex.ru для своего компьютера

iptables -t mangle -A POSTROUTING -d 192.168.0.97 -s 213.180.204.183 -j MARK --set-mark 205

Если с компьютера пропинговать mirror.yandex.ru, то в статистике появятся эти пакеты

Код:

sudo iptables -L POSTROUTING -t mangle -v Chain POSTROUTING (policy ACCEPT 37415 packets, 21M bytes) pkts bytes target prot opt in out source destination 4 240 MARK all -- any any mirror.yandex.ru 192.168.0.97 MARK set 0xcd


А если начать качать что-то с mirror.yandex.ru то счётчик не двигается. Происходит это из-за прозрачного прокси-сервера

Код:

iptables -t nat -A PREROUTING -i eth0 ! -d 192.168.0.0/24 -p tcp -m multiport --dport 80,8080 -j REDIRECT --to-ports 3128


Если это правило исключить и оставить только NAT - пакеты маркируются нормально. Видно обратное преобразование адреса происходит в таблице nat в цепочке POSTROUTING, а она обрабатывается после POSTROUTING таблицы mangle. Подумал что если перенести редирект куда-нибудь.... оказалость что его можно только в OUTPUT и PREROUTING nat использовать.

Изображение

Обидно :(
Спасибо сказали: