Решено: iproute2 (несколько шлюзов + очереди)

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

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

Venegance
Сообщения: 119
ОС: Debian

Решено: iproute2

Сообщение Venegance »

Есть машина под управлением Debian Lenny. На ней - iptables+iproute2. Интерфейсы eth0(внутренний) и eth1(внешний). Интернет через ppptp. Схема сети во вложении. С доступом в интернет все в порядке, скорость соединения успешно ограничивается через очереди iproute2. Проблема следующая - при маршрутизации трафика из сети 192.168.0.0/21 в сеть 195.222.0.0/16 пакеты попадают в очередь на интерфейсе eth0. Конфигурация очереди:

Код: Выделить всё

tc qdisc add dev eth0 root handle 1:0 cbq avpkt 10000 bandwidth 100mbit
tc qdisc add dev ppp0 root handle 2:0 cbq avpkt 10000 bandwidth 512kbit
tc class add dev eth0 parent 1:0 classid 1:101 cbq rate 256kbit allot 1500 bounded isolated
tc class add dev eth0 parent 1:0 classid 1:102 cbq rate 256kbit allot 1500 bounded isolated
tc class add dev eth0 parent 1:0 classid 1:103 cbq rate 80kbit allot 1500 bounded isolated
tc class add dev ppp0 parent 2:0 classid 2:201 cbq rate 256kbit allot 1500 bounded isolated
tc class add dev ppp0 parent 2:0 classid 2:202 cbq rate 256kbit allot 1500 bounded isolated
tc class add dev ppp0 parent 2:0 classid 2:203 cbq rate 80kbit allot 1500 bounded isolated
tc filter add dev eth0 parent 1:0 protocol ip handle 101 fw flowid 1:101
tc filter add dev eth0 parent 1:0 protocol ip handle 102 fw flowid 1:102
tc filter add dev eth0 parent 1:0 protocol ip handle 103 fw flowid 1:103
tc filter add dev ppp0 parent 2:0 protocol ip handle 201 fw flowid 2:201
tc filter add dev ppp0 parent 2:0 protocol ip handle 202 fw flowid 2:202
tc filter add dev ppp0 parent 2:0 protocol ip handle 203 fw flowid 2:203
iptables -t mangle -A POSTROUTING -d 192.168.2.162 -s ! 192.168.0.0/21 -j MARK --set-mark 101
iptables -t mangle -A POSTROUTING -d 192.168.2.163 -s ! 192.168.0.0/21 -j MARK --set-mark 102
iptables -t mangle -A POSTROUTING -d 192.168.7.10 -s ! 192.168.0.0/21 -j MARK --set-mark 103
iptables -t mangle -A PREROUTING  -s 192.168.2.162 -d ! 192.168.0.0/21 -j MARK --set-mark 201
iptables -t mangle -A PREROUTING  -s 192.168.2.163 -d ! 192.168.0.0/21 -j MARK --set-mark 202
iptables -t mangle -A PREROUTING  -s 192.168.7.10 -d ! 192.168.0.0/21 -j MARK --set-mark 203

При попытке сделать следующее:

Код: Выделить всё

iptables -t mangle -A POSTROUTING -d 192.168.2.162 -s ! 195.222.0.0/16 -j MARK --set-mark 101
iptables -t mangle -A POSTROUTING -d 192.168.2.163 -s ! 195.222.0.0/16 -j MARK --set-mark 102
iptables -t mangle -A POSTROUTING -d 192.168.7.10 -s ! 195.222.0.0/16 -j MARK --set-mark 103
iptables -t mangle -A PREROUTING  -s 192.168.2.162 -d ! 195.222.0.0/16 -j MARK --set-mark 201
iptables -t mangle -A PREROUTING  -s 192.168.2.163 -d ! 195.222.0.0/16 -j MARK --set-mark 202
iptables -t mangle -A PREROUTING  -s 192.168.7.10 -d ! 195.222.0.0/16 -j MARK --set-mark 203

проблема решается, но тогда замедляются пакеты из локальной сети до машины с Debian(при загруженном интернет-соединении тормоза чувствуются уже при работе по ssh).
При попытке сделать следующее

Код: Выделить всё

iptables -t mangle -A POSTROUTING -d 192.168.0.0/21 -s 195.222.0.0/16 -j MARK --set-mark 105
iptables -t mangle -A POSTROUTING -d 192.168.2.162 -s ! 192.168.0.0/21 -j MARK --set-mark 101
iptables -t mangle -A POSTROUTING -d 192.168.2.163 -s ! 192.168.0.0/21 -j MARK --set-mark 102
iptables -t mangle -A POSTROUTING -d 192.168.7.10 -s ! 192.168.0.0/21 -j MARK --set-mark 103
iptables -t mangle -A PREROUTING -s 192.168.0.0/21 -d 195.222.0.0/16 -j MARK --set-mark 205
iptables -t mangle -A PREROUTING -s 192.168.2.162 -d ! 192.168.0.0/21 -j MARK --set-mark 201
iptables -t mangle -A PREROUTING -s 192.168.2.163 -d ! 192.168.0.0/21 -j MARK --set-mark 202
iptables -t mangle -A PREROUTING -s 192.168.7.10 -d ! 192.168.0.0/21 -j MARK --set-mark 203

Пакеты маркируются, но проблема не решается. Может кто подскажет, как применяются правила для пакетов в цепочке(до первого совпадения с правилом, или пробегая всю цепочку), или укажет на мои ошибки.
P.S. Я, конечно, понимаю, что можно на клиентах в локальной сети вручную прописать маршруты в подсеть 195.222.0.0, но зачем, если есть маршрутизатор? К тому же, в локальной сети скоро появятся еще маршрутизаторы в другие подсети, так что на машине с Debian появятся еще маршруты.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:
Аватара пользователя
danger08
Сообщения: 715
ОС: Linux (CentOS, Ubuntu)

Re: Решено: iproute2

Сообщение danger08 »

Venegance писал(а):
03.10.2009 14:44
Может кто подскажет, как применяются правила для пакетов в цепочке(до первого совпадения с правилом, или пробегая всю цепочку)

Пробегая всю цепочку (действие MARK устанавливает метку на пакет, но не прерывает дальнейшее прохождение по цепочке).
Т.е., по ходу дела возможна перемаркировка маркированных ранее пакетов, даже в пределах одной цепочки.

Насчет маркировки трафика на eth0: попробуйте маркировать входящий трафик как обычно (ограничивая водящий интернет-трафик), и после него добавить правило, маркирующее пакеты от сетей, трафик которых не ограничен. Таким образом, сначала будет маркироваться весь входящий интернет-трафик, а потом далее по цепочке, пакеты "внутреннего трафика" будут выделены отдельной меткой.
Блогосайт - http://www.fateyev.com
Спасибо сказали:
Venegance
Сообщения: 119
ОС: Debian

Re: Решено: iproute2

Сообщение Venegance »

Весьма странно....Пытался сам до этого применить данное решение,
Насчет маркировки трафика на eth0: попробуйте маркировать входящий трафик как обычно (ограничивая водящий интернет-трафик), и после него добавить правило, маркирующее пакеты от сетей, трафик которых не ограничен. Таким образом, сначала будет маркироваться весь входящий интернет-трафик, а потом далее по цепочке, пакеты "внутреннего трафика" будут выделены отдельной меткой.

но оно проблему не решило, сейчас попробовал по новой

Код: Выделить всё

iptables -t mangle -A POSTROUTING -d 192.168.2.162 -s ! 192.168.0.0/21 -j MARK --set-mark 101
iptables -t mangle -A POSTROUTING -d 192.168.2.163 -s ! 192.168.0.0/21 -j MARK --set-mark 102
iptables -t mangle -A POSTROUTING -d 192.168.7.10 -s ! 192.168.0.0/21 -j MARK --set-mark 103
iptables -t mangle -A POSTROUTING -d 192.168.0.0/21 -s 195.222.0.0/16 -j MARK --set-mark 105
iptables -t mangle -A PREROUTING -s 192.168.2.162 -d ! 192.168.0.0/21 -j MARK --set-mark 201
iptables -t mangle -A PREROUTING -s 192.168.2.163 -d ! 192.168.0.0/21 -j MARK --set-mark 202
iptables -t mangle -A PREROUTING -s 192.168.7.10 -d ! 192.168.0.0/21 -j MARK --set-mark 203
iptables -t mangle -A PREROUTING -s 192.168.0.0/21 -d 195.222.0.0/16 -j MARK --set-mark 205

проблема решилась.
Спасибо, закрывайте тему.
Спасибо сказали: