LINUX.ORG.RU
ФорумAdmin

tc требуется помощь


0

0

просьба помочь конкретным правилом - не могу сообразить как сделать в такой ситуации:
есть север на котором работает и vpn (pptp), и squid. на сервере две сетевые: eth1 - рельный IP (интернет x.x.x.x), eth0 (192.168.1.0) - локальная сеть.
VPN (10.0.1.0) проброшен с помощью nat в инет. Канал не широкий - 256 Kbps. нужно выделить для VPN скорость не выше 64 Kbps.
Не могу понять как такое сделать ибо интерфейсы ppp* для одного и того же пользователя могут быть разными.
Поскажите, пожалуйста, как такое сделать, кучу доки перечитал на opennet никак не дойдет. Единственное, что приходит в голову - метить пакеты в iptables, а потом на интерфейсе eth1 обрабатывать, я прав или ошибаюсь?
Возможно кто-то уже делал и может помочь советом и примером, буду очень признателен (извините опыта мало).

anonymous

> просьба помочь конкретным правилом - не могу сообразить как сделать в такой ситуации: VPN (10.0.1.0) проброшен с помощью nat в инет. Канал не широкий - 256 Kbps. нужно выделить для VPN скорость не выше 64 Kbps. Не могу понять как такое сделать ибо интерфейсы ppp* для одного и того же пользователя могут быть разными. Поскажите, пожалуйста, как такое сделать, кучу доки перечитал на opennet никак не дойдет. Единственное, что приходит в голову - метить пакеты в iptables, а потом на интерфейсе eth1 обрабатывать, я прав или ошибаюсь?

Что-то не понял - надо ограничить скорость входящего (с точки зрения eth1) или исходящего (опять точки зрения eth1)?

Если первое то использовать imq или ifb (что имхо более более правильно).

В случае imq: ip link set imq0 up iptables -t mangle -A POSTROUTING -o ppp+ -j IMQ --todev 0 tc qdisc add dev imq0 handle 1:0 root htb r2q 1 default 1 tc class add dev imq0 parent 1:0 classid 1:1 htb rate 64kbit И можно ещё добавить какой-нибудь qdisc - [pb]fifo или sfq/esfq - в зависомости от конктретной ситуации: tc qdisc add dev imq0 parent 1:1 handle 2:0 pfifo limit 10

В случае ifb вместо iptables для каждого ppp интерфейса сделать: tc filter add dev ppp0 root pref 1 protocol ip u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0

Если же делать второе (ограничить исходящую с точки зрения eth1), то мне кажется лучше маркировать пакеты через iptables: iptables -t mangle -A PREROUTING -i ppp+ -j MARK --set-mark 0x1 И загонять в htb через фильтр на eth1. Хотя так же можно вместо реального использовать ifb или imq - в случае ifb: tc qdisc add dev ppp0 ingress tc filter add dev ppp0 parent ffff: pref 1 protocol ip u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0

anonymous
()

> просьба помочь конкретным правилом - не могу сообразить как сделать в такой ситуации: 
VPN (10.0.1.0) проброшен с помощью nat в инет. Канал не широкий - 256 Kbps. нужно выделить для VPN скорость не выше 64 Kbps. 
Не могу понять как такое сделать ибо интерфейсы ppp* для одного и того же пользователя могут быть разными. 
Поскажите, пожалуйста, как такое сделать, кучу доки перечитал на opennet никак не дойдет. Единственное, что приходит в голову - метить пакеты в iptables, а потом на интерфейсе eth1 обрабатывать, я прав или ошибаюсь? 

Что-то не понял  - надо ограничить скорость входящего (с точки зрения eth1) или исходящего (опять точки зрения eth1)?

Если первое то использовать imq или ifb (что имхо более более правильно).

В случае imq:
ip link set imq0 up
iptables -t mangle -A POSTROUTING -o ppp+ -j IMQ --todev 0
tc qdisc add dev imq0 handle 1:0 root htb r2q 1 default 1
tc class add dev imq0 parent 1:0 classid 1:1 htb rate 64kbit
И можно ещё добавить какой-нибудь qdisc  - [pb]fifo или sfq/esfq - в зависомости от конктретной ситуации:
tc qdisc add dev imq0 parent 1:1 handle 2:0 pfifo limit 10

В случае ifb вместо iptables для каждого ppp интерфейса сделать:
tc filter add dev ppp0 root pref 1 protocol ip u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0

Если же делать второе (ограничить исходящую с точки зрения eth1), то мне кажется лучше маркировать пакеты через iptables:
iptables -t mangle -A PREROUTING -i ppp+ -j MARK --set-mark 0x1
И загонять в htb через фильтр на eth1.
Хотя так же можно вместо реального использовать ifb или imq - в случае ifb:
tc qdisc add dev ppp0 ingress
tc filter add dev ppp0 parent ffff: pref 1 protocol ip u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0





anonymous
()
Ответ на: комментарий от anonymous

> Что-то не понял - надо ограничить скорость входящего (с точки зрения eth1) или исходящего (опять точки зрения eth1)?
Нужно, чтобы пользователи vpn не занимали весь канал, а сидели в всоем ограниченном пространстве. Т.е. получали из инета чо-либо со скоростью не более 64 Kbps. Относительно eth1 это, я так понимаю, будет исходящий трафик (eth1 --> ppp*).

anonymous
()
Ответ на: комментарий от anonymous

Чтобы все (а не каждый) пользователи VPN _получали_ из Интернета трафик не более, чем на скорости 64к надо

1. направить их трафик на IMQ-устройство (iptables -A POSTROUTING -t mangle -o ppp+ -j IMQ --to-dev 0)

2. Повесить на imq0 TBF-шейпер (читать на lartc.org, там одно простое правило)

fagot ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.