Here is the mikrotik script if anyone has one or wants to go down that path. I wont be able to troubleshoot issues here, the script is provided as is.
#!/bin/bash
UPSTREAM_BITS_PER_SECOND=1000000
DOWNSTREAM_BITS_PER_SECOND=4000000
UPSTREAM_PORT=ether1-gateway
LAN_PORT=ether2-master-local
cat <<END
# CLEAR OLD RULES
/ip firewall mangle remove [/ip firewall mangle find]
/ip firewall layer7-protocol remove [/ip firewall layer7-protocol find]
/queue tree remove [/queue tree find]
# INCOMING PACKETS
/ip firewall mangle
add action=mark-packet chain=prerouting in-interface=$UPSTREAM_PORT passthrough=no protocol=icmp new-packet-mark=d1_icmp
add action=mark-packet chain=prerouting in-interface=$UPSTREAM_PORT passthrough=no protocol=udp src-port=53 new-packet-mark=d2_dns
add action=mark-packet chain=prerouting in-interface=$UPSTREAM_PORT passthrough=no protocol=tcp connection-state=new new-packet-mark=d3_syn_ack
add action=mark-packet chain=prerouting in-interface=$UPSTREAM_PORT passthrough=no protocol=tcp tcp-flags=syn new-packet-mark=d3_syn_ack
add action=mark-packet chain=prerouting in-interface=$UPSTREAM_PORT passthrough=no protocol=tcp packet-size=0-80 new-packet-mark=d3_syn_ack
add action=mark-packet chain=prerouting in-interface=$UPSTREAM_PORT connection-bytes=512k-0 src-port=80,443 passthrough=no new-packet-mark=d7_lowhttp protocol=tcp
add action=mark-packet chain=prerouting in-interface=$UPSTREAM_PORT passthrough=no protocol=tcp src-port=80,443 new-packet-mark=d5_http
# OUTGOING PACKETS
# ICMP & DNS
/ip firewall mangle
add action=mark-packet chain=postrouting out-interface=$UPSTREAM_PORT protocol=icmp passthrough=no new-packet-mark=u1_icmp
add action=mark-packet chain=postrouting out-interface=$UPSTREAM_PORT protocol=udp dst-port=53 passthrough=no new-packet-mark=u2_dns
add action=mark-packet chain=postrouting out-interface=$UPSTREAM_PORT protocol=tcp connection-state=new new-packet-mark=u3_syn_ack passthrough=no
# mark games
/ip firewall mangle
add action=mark-packet chain=postrouting out-interface=$UPSTREAM_PORT new-packet-mark=u4_game passthrough=no protocol=tcp dst-port=5340-5352,6000-6152,10001-10011,14009-14030,18901-18909
add action=mark-packet chain=postrouting out-interface=$UPSTREAM_PORT new-packet-mark=u4_game passthrough=no protocol=tcp dst-port=39190,27780,29000,22100,10009,4300,15001,15002,7341,7451
add action=mark-packet chain=postrouting out-interface=$UPSTREAM_PORT new-packet-mark=u4_game passthrough=no protocol=tcp dst-port=40000,9300,9400,9700,7342,8005-8010,37466,36567,8822
add action=mark-packet chain=postrouting out-interface=$UPSTREAM_PORT new-packet-mark=u4_game passthrough=no protocol=tcp dst-port=47611,16666,20000,5105,29000,18901-18909,9015
add action=mark-packet chain=postrouting out-interface=$UPSTREAM_PORT new-packet-mark=u4_game passthrough=no protocol=udp dst-port=27005,27015
add action=mark-packet chain=postrouting out-interface=$UPSTREAM_PORT new-packet-mark=u4_game passthrough=no protocol=udp dst-port=27005-27020,13055,7800-7900,12060-12070
add action=mark-packet chain=postrouting out-interface=$UPSTREAM_PORT new-packet-mark=u4_game passthrough=no protocol=udp dst-port=8005-8010,9068,1293,1479,9401,9600,30000
add action=mark-packet chain=postrouting out-interface=$UPSTREAM_PORT new-packet-mark=u4_game passthrough=no protocol=udp dst-port=14009-14030,42051-42052,40000-40050,13000-13080
# long-running connections eg https upload
/ip firewall mangle
add action=mark-packet chain=postrouting out-interface=$UPSTREAM_PORT connection-bytes=512k-0 dst-port=80,443 passthrough=no new-packet-mark=u7_lowhttp protocol=tcp
# detect videos
/ip firewall layer7-protocol
add comment="upload" name=upload regexp="^.*get.+\\\\.(exe|rar|iso|zip|7zip|0[0-9][1-9]|flv|mkv|avi|mp4|3gp|rmvb|mp3|img |dat|mov).*\\$"
add comment="upload" name=document regexp="^.*get.+\\\\.(pdf|doc|docx|xlsx|xls|rtf|ppt|ppt).*\\$"
add comment="video" name=youtube regexp="^.*get.+\\\\.(youtube.com|cdn.dailymotion.com|metacafe.com|mccont.com|vimeo.com ).*\\$"
add comment="video" name=streaming regexp="videoplayback|video"
# mark videos
/ip firewall mangle
add action=mark-packet chain=postrouting out-interface=$UPSTREAM_PORT layer7-protocol=upload protocol=tcp new-packet-mark=u7_lowhttp passthrough=no
add action=mark-packet chain=postrouting out-interface=$UPSTREAM_PORT layer7-protocol=document protocol=tcp new-packet-mark=u7_lowhttp passthrough=no
add action=mark-packet chain=postrouting out-interface=$UPSTREAM_PORT layer7-protocol=youtube protocol=tcp new-packet-mark=u7_lowhttp passthrough=no
add action=mark-packet chain=postrouting out-interface=$UPSTREAM_PORT layer7-protocol=streaming protocol=tcp new-packet-mark=u7_lowhttp passthrough=no
# http/https
/ip firewall mangle
add action=mark-packet chain=postrouting out-interface=$UPSTREAM_PORT new-packet-mark=u5_http protocol=tcp dst-port=80,443 passthrough=no
# mark p2p
/ip firewall mangle
add action=mark-packet chain=postrouting out-interface=$UPSTREAM_PORT p2p=all-p2p new-packet-mark=u8_p2p packet-mark=all-outpkt passthrough=no
# QUEUE TYPES
/queue type
add name=pcq_downstream kind=pcq pcq-rate=$(($DOWNSTREAM_BITS_PER_SECOND * 90 / 100)) pcq-burst-rate=$DOWNSTREAM_BITS_PER_SECOND pcq-classifier=src-address,src-port pcq-total-limit=256
/queue type
add name=pcq_upstream kind=pcq pcq-rate=$(($UPSTREAM_BITS_PER_SECOND * 90 / 100)) pcq-classifier=dst-address,dst-port pcq-total-limit=2048
add name=pcq_upchoke kind=red
# QUEUES
/queue tree
add name=downstream_all parent=$LAN_PORT queue=pcq_downstream packet-mark=all-inpkt priority=8 max-limit=$(($DOWNSTREAM_BITS_PER_SECOND * 90 / 100))
add name=downstream_1 parent=downstream_all queue=pcq_downstream packet-mark=d1_icmp priority=1 limit-at=$(($DOWNSTREAM_BITS_PER_SECOND * 10 / 100)) max-limit=$(($DOWNSTREAM_BITS_PER_SECOND * 80 / 100))
add name=downstream_2 parent=downstream_all queue=pcq_downstream packet-mark=d2_dns priority=2 limit-at=$(($DOWNSTREAM_BITS_PER_SECOND * 10 / 100)) max-limit=$(($DOWNSTREAM_BITS_PER_SECOND * 80 / 100))
add name=downstream_3 parent=downstream_all queue=pcq_downstream packet-mark=d3_ack_new priority=3 limit-at=$(($DOWNSTREAM_BITS_PER_SECOND * 10 / 100)) max-limit=$(($DOWNSTREAM_BITS_PER_SECOND * 80 / 100))
add name=downstream_4 parent=downstream_all queue=pcq_downstream packet-mark=d4_game priority=4 limit-at=$(($DOWNSTREAM_BITS_PER_SECOND * 10 / 100)) max-limit=$(($DOWNSTREAM_BITS_PER_SECOND * 80 / 100))
add name=downstream_5 parent=downstream_all queue=pcq_downstream packet-mark=d5_http priority=5 limit-at=$(($DOWNSTREAM_BITS_PER_SECOND * 10 / 100)) max-limit=$(($DOWNSTREAM_BITS_PER_SECOND * 80 / 100))
add name=downstream_6 parent=downstream_all queue=pcq_downstream packet-mark=no-mark priority=6 limit-at=$(($DOWNSTREAM_BITS_PER_SECOND * 10 / 100)) max-limit=$(($DOWNSTREAM_BITS_PER_SECOND * 80 / 100))
add name=downstream_7 parent=downstream_all queue=pcq_downstream packet-mark=d7_lowhttp priority=7 limit-at=$(($DOWNSTREAM_BITS_PER_SECOND * 10 / 100)) max-limit=$(($DOWNSTREAM_BITS_PER_SECOND * 80 / 100))
add name=downstream_8 parent=downstream_all queue=pcq_downstream packet-mark=d8_p2p priority=8 limit-at=$(($DOWNSTREAM_BITS_PER_SECOND * 10 / 100)) max-limit=$(($DOWNSTREAM_BITS_PER_SECOND * 80 / 100))
/queue tree
add name=upstream_all parent=$UPSTREAM_PORT queue=pcq_upstream packet-mark=all-outpkt priority=8 max-limit=$(($UPSTREAM_BITS_PER_SECOND * 90 / 100))
add name=upstream_1 parent=upstream_all queue=pcq_upstream packet-mark=u1_icmp priority=1 limit-at=$(($UPSTREAM_BITS_PER_SECOND * 10 / 100)) max-limit=$(($UPSTREAM_BITS_PER_SECOND * 80 / 100))
add name=upstream_2 parent=upstream_all queue=pcq_upstream packet-mark=u2_dns priority=2 limit-at=$(($UPSTREAM_BITS_PER_SECOND * 10 / 100)) max-limit=$(($UPSTREAM_BITS_PER_SECOND * 80 / 100))
add name=upstream_3 parent=upstream_all queue=pcq_upstream packet-mark=u3_syn_ack priority=3 limit-at=$(($UPSTREAM_BITS_PER_SECOND * 10 / 100)) max-limit=$(($UPSTREAM_BITS_PER_SECOND * 80 / 100))
add name=upstream_4 parent=upstream_all queue=pcq_upstream packet-mark=u4_game priority=4 limit-at=$(($UPSTREAM_BITS_PER_SECOND * 10 / 100)) max-limit=$(($UPSTREAM_BITS_PER_SECOND * 80 / 100))
add name=upstream_5 parent=upstream_all queue=pcq_upstream packet-mark=u5_http priority=5 limit-at=$(($UPSTREAM_BITS_PER_SECOND * 10 / 100)) max-limit=$(($UPSTREAM_BITS_PER_SECOND * 80 / 100))
add name=upstream_6 parent=upstream_all queue=pcq_upstream packet-mark=no-mark priority=6 limit-at=$(($UPSTREAM_BITS_PER_SECOND * 10 / 100)) max-limit=$(($UPSTREAM_BITS_PER_SECOND * 80 / 100))
add name=upstream_7 parent=upstream_all queue=pcq_upchoke packet-mark=u7_lowhttp priority=7 limit-at=$(($UPSTREAM_BITS_PER_SECOND * 10 / 100)) max-limit=$(($UPSTREAM_BITS_PER_SECOND * 80 / 100))
add name=upstream_8 parent=upstream_all queue=pcq_upchoke packet-mark=u8_p2p priority=8 limit-at=$(($UPSTREAM_BITS_PER_SECOND * 10 / 100)) max-limit=$(($UPSTREAM_BITS_PER_SECOND * 80 / 100))
END
#if false
#then
# PER-IP traffic accounting
echo "/ip firewall filter"
for I in {2..254}
do
echo "add chain=forward action=accept src-address=192.168.88.$I out-interface=$UPSTREAM_PORT log=no"
echo "add chain=forward action=accept dst-address=192.168.88.$I in-interface=$UPSTREAM_PORT log=no"
done
#fi