Pull to refresh

Шейпер на Mikrotik

С появлением у меня анлим канала в интернет, появилась проблема разделения этого канала между сервером и другими компьютерами (в моем случае с двумя). Сервер, постоянно качает торренты, которые забивают канал и не дают нормально работать за другими компьютерами. Изначально решение было реализовано средствами шейпера Linux на сервере. Но вскоре я приобрел маршрутизатор RB-750. Он у меня и стал шлюзом, фаерволом и шейпером.


Исходные данные:
— общий канал: 2048/512 Kbps
— 3 вида входящего тафика: «торрент трафик» сервера, «не торрент трафик» сервера и весь трафик первого компьютера, трафик второго компьютера или ноутбука
— максимальная скорость второго компьютера или ноутбука — 512 Kbps
— максимальная скорость «не торрент трафика» — не ограничена
— «торрент трафик» использует канал по остаточному принципу
— IP адреса: сервер — 192.168.2.2, первый компьютер — 192.168.2.5, второй компьютер — 192.168.2.90, ноутбук — 192.168.2.91
— интернет приходит через интерфейс pppoe-ByFly
— входящий порт для торрентов на сервере — 6880

Решение:
Порты, к которым подключены компы и сервер объединены виртуальным свичем, чтобы упростить правила mangle.
Метим пакеты по типам трафика:
[admin@router] > ip firewall mangle export
# nov/17/2010 10:24:34 by RouterOS 4.12
# software id = ****-****
#
/ip firewall mangle
add action=mark-packet chain=forward comment="Down torrent" disabled=no in-interface=pppoe-ByFly new-packet-mark=in-torrent-packet p2p=bit-torrent passthrough=yes
add action=mark-packet chain=forward comment="Down torrent" disabled=no dst-address=192.168.2.2 dst-port=6880 in-interface=pppoe-ByFly new-packet-mark=in-torrent-packet \
passthrough=yes protocol=tcp
add action=mark-packet chain=forward comment="Down torrent" disabled=no dst-address=192.168.2.2 dst-port=6880 in-interface=pppoe-ByFly new-packet-mark=in-torrent-packet \
passthrough=yes protocol=udp
add action=mark-packet chain=forward comment="Down not torrent" disabled=no in-interface=pppoe-ByFly new-packet-mark=in-no_torrent-packet packet-mark=!in-torrent-packet \
passthrough=yes
add action=mark-packet chain=forward comment="Down Chingiz book" disabled=no dst-address=192.168.2.91 in-interface=pppoe-ByFly new-packet-mark="Down chingiz" passthrough=yes
add action=mark-packet chain=forward comment="Down Chingiz comp" disabled=no dst-address=192.168.2.90 in-interface=pppoe-ByFly new-packet-mark="Down chingiz" passthrough=yes
add action=mark-packet chain=forward comment="Up chingiz book" disabled=no new-packet-mark="Up chingiz" out-interface=pppoe-ByFly passthrough=yes src-address=192.168.2.91
add action=mark-packet chain=forward comment="Up chingiz comp" disabled=no new-packet-mark="Up chingiz" out-interface=pppoe-ByFly passthrough=yes src-address=192.168.2.90


Ну и потом создаем правила queue tree:
[admin@router] > queue tree export
# nov/17/2010 10:24:46 by RouterOS 4.12
# software id = ****-****
#
/queue tree
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=2M name=in-wan packet-mark="in-torrent-packet,in-no_torrent-packet,Down chingiz" parent=global-out priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=1388k max-limit=2M name=in-not-torrent packet-mark=in-no_torrent-packet parent=in-wan priority=4 queue=pcq
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=1950k name=in-torrent packet-mark=in-torrent-packet parent=in-wan priority=8 queue=pcq
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=800k name=out-wan packet-mark="Up chingiz" parent=global-out priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=512k max-limit=512k name=in-chingiz packet-mark="Down chingiz" parent=in-wan priority=2 queue=default
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=256k max-limit=256k name=out-chingiz packet-mark="Up chingiz" parent=out-wan priority=8 queue=default
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.