Данная статья не является инструкцией, в ней приведен пример решения задачи поставленной перед мной. Поставленная задача, заменить сервер (HP Proliant ML110) на базе Linux Fedora 14, на микротик 951Ui-2HnD который был в наличии. При этом сервер выполнял роли: firewall, shaper, vpn, dhcp, dns, apache, mysql. Службы mysql, apache, dns на другой сервер, а вот firewall, shaper, vpn оставить за микротиком.
Задача показалась по началу тривиальной, но в последствии превратилась в решение проблемы. Что произошло. На микротике пришлось написать 90 правил файрвола, 90 правил шейпера, которые выглядели примерно вот так:
chain=forward action=accept src-address=192.168.1.101 dst-address=0.0.0.0/0 src-mac-address=00:00:1C:D8:23:D4 log=no log-prefix=""
name="192.168.10.45" target=192.168.1.101/32 parent=none packet-marks="" priority=8/8 queue=default-small/default-small limit-at=0/0 max-limit=10M/10M burst-limit=0/0 burst-threshold=0/0
Все бы хорошо, если бы правил было бы не много. При таком кол-ве правил, микротик чувствовал себя крайне плохо. Загрузка ЦПУ 100% постоянно, а это губительно.
Поиск решения, навел на мысль:
- Создаем
bridge
, в него входят локальные интерфейсы. В настройках bridge ставимapr-readonly
. - В arp записях создаем статические записи ip + mac.
- В настройках dhcp сервера создаем статических клиентов, и добавляем в
address_list=allowed
- В правилах файрвола делаем одно правило в цепочке forward на вход, и одно на выпуск в котором указываем
src-address-list=allowed
- В правилах шейпера simple queue, меняем на queue tree. (об этом отдельно).
Теперь по пунктам:
/interface bridge add name=Local arp=reply-only comment="For all local ports"
/ip arp add address=192.168.1.1 mac-address=00:0A:CF:20:19:67 interface=Local published=no comment=Client01
/ip dhcp-server lease add address=192.168.1.1 mac-address=00:0A:CF:20:19:67 address-lists=allowed server=Local comment=Client01
/ip firewall filter add chain=forward src-address-list=allowed dst-address=0.0.0.0/0 in-interface=Local out-interface=ether1 action=accept comment="Allow forward from LocalNetwork"
/ip firewall filter add chain=forward dst-address=0.0.0.0/0 src-address-list=allowed in-interface=ether1 out-interface=Local action=accept "Allow forward from Internet" connection-state=established,related
/ip firewall mangle chain=postrouting action=mark-connection new-connection-mark=10m passthrough=yes dst-address-list=allowed log=no log-prefix="
/ip firewall mangle chain=postrouting action=mark-packet new-packet-mark=10m passthrough=yes dst-address-list=allowed connection-mark=10m log=no log-prefix=""
/queue type add name="10M" kind=pcq pcq-rate=10M pcq-limit=50 pcq-classifier=src-address,dst-address pcq-total-limit=64k pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-src-address-mask=32 pcq-dst-address-mask=32 pcq-src-address6-mask=64 pcq-dst-address6-mask=64
/queue tree add name="10M" parent=global packet-mark=10m limit-at=0 queue=10m priority=1 max-limit=0 burst-limit=0 burst-threshold=0 burst-time=0s