Updated 4th December, 2013
Following is a complete script for Mikrotik to Load Balance 4 WAN links OR DSL links , the script idea is taken from
In this example I have used MikrotikT RB750 5 ports router. 4 ports were connected with Four DSL Routers, and 5th port was connected with User LAN. In this particual screenshots example, all DSL lines have un-equal speed. Also don’t forget to rename the interface names accordingly.
In my personnel experience , If users request are directly hitting Mikrotik configured with PCC , then you will get good load balancing. Use src-address as classifier, this way you will get rid of problems like https/broken link, streaming issues etc. Load balancing using this PCC technique (src-address) will be effective and balanced approach when more and more connections (from clients) that occurred.
I also recommend to use SQUID proxy server along with mikrotik , for better response time and it will also increase good browsing experience to users.
RECOMMENDED If somehow you are not satisfied with the src-address approach,play with the PCC Classifier, Try both addresses and ports as the classifier. While this will randomize things the most and in theory give you the most fair allocation of bandwidth, BUT there is also a good chance that it will break certain things like banking web sites and some forums. This is because often times a HTTP requests will generate several connections, so there is a chance that some requests may go out a different route than the initial one, and that will break secure web sites. For that reason I usually like to go with src-address PCC load balancing approach (but only if users are hitting the pcc box)
Result of this script is as follows on screenshots.
[Thanks to sam @ fastmesh for the screenshots 🙂 ]
/ip address add address=192.168.0.1/24 network=192.168.0.0 broadcast=192.168.0.255 interface=Local add address=192.168.1.2/24 network=192.168.1.0 broadcast=192.168.1.255 interface=WAN1 add address=192.168.2.2/24 network=192.168.2.0 broadcast=192.168.2.255 interface=WAN2 add address=192.168.3.2/24 network=192.168.3.0 broadcast=192.168.3.255 interface=WAN3 add address=192.168.4.2/24 network=192.168.4.0 broadcast=192.168.4.255 interface=WAN4 /ip firewall mangle add chain=input in-interface=WAN1 action=mark-connection new-connection-mark=WAN1_conn add chain=input in-interface=WAN2 action=mark-connection new-connection-mark=WAN2_conn add chain=input in-interface=WAN3 action=mark-connection new-connection-mark=WAN3_conn add chain=input in-interface=WAN4 action=mark-connection new-connection-mark=WAN4_conn add chain=output connection-mark=WAN1_conn action=mark-routing new-routing-mark=to_WAN1 add chain=output connection-mark=WAN2_conn action=mark-routing new-routing-mark=to_WAN2 add chain=output connection-mark=WAN3_conn action=mark-routing new-routing-mark=to_WAN3 add chain=output connection-mark=WAN4_conn action=mark-routing new-routing-mark=to_WAN4 add chain=prerouting dst-address=192.168.1.0/24 action=accept in-interface=Local add chain=prerouting dst-address=192.168.2.0/24 action=accept in-interface=Local add chain=prerouting dst-address=192.168.3.0/24 action=accept in-interface=Local add chain=prerouting dst-address=192.168.4.0/24 action=accept in-interface=Local add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:4/0 action=mark-connection new-connection-mark=WAN1_conn passthrough=yes add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:4/1 action=mark-connection new-connection-mark=WAN2_conn passthrough=yes add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:4/2 action=mark-connection new-connection-mark=WAN3_conn passthrough=yes add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:4/3 action=mark-connection new-connection-mark=WAN4_conn passthrough=yes add chain=prerouting connection-mark=WAN1_conn in-interface=Local action=mark-routing new-routing-mark=to_WAN1 add chain=prerouting connection-mark=WAN2_conn in-interface=Local action=mark-routing new-routing-mark=to_WAN2 add chain=prerouting connection-mark=WAN3_conn in-interface=Local action=mark-routing new-routing-mark=to_WAN3 add chain=prerouting connection-mark=WAN4_conn in-interface=Local action=mark-routing new-routing-mark=to_WAN4 /ip route add dst-address=0.0.0.0/0 gateway=192.168.1.1 routing-mark=to_WAN1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=192.168.2.1 routing-mark=to_WAN2 check-gateway=ping add dst-address=0.0.0.0/0 gateway=192.168.3.1 routing-mark=to_WAN3 check-gateway=ping add dst-address=0.0.0.0/0 gateway=192.168.4.1 routing-mark=to_WAN4 check-gateway=ping add dst-address=0.0.0.0/0 gateway=192.168.1.1 distance=1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=192.168.2.1 distance=2 check-gateway=ping add dst-address=0.0.0.0/0 gateway=192.168.3.1 distance=3 check-gateway=ping add dst-address=0.0.0.0/0 gateway=192.168.4.1 distance=4 check-gateway=ping /ip firewall nat add chain=srcnat out-interface=WAN1 action=masquerade add chain=srcnat out-interface=WAN2 action=masquerade add chain=srcnat out-interface=WAN3 action=masquerade add chain=srcnat out-interface=WAN4 action=masquerade
Now Configure DNS server so users can resolve hostnames,
/ip dns set allow-remote-requests=yes cache-max-ttl=1w cache-size=5000KiB max-udp-packet-size=512 servers=220.127.116.11,18.104.22.168
All Done ! Now Test the link by putting user load, the more multiple users load you put on it, the better Load Balance result you will get 🙂
PCC WITH UN-EQUAL WAN LINKS
If you have Un-Equal WAN Links, for example WAN,1,2,3 are of 4MB and WAN,4 is of 8 Mb, and you want to force MT to use WAN4 link more then other because of its capacity, Then you have to Add more PCC rules assigning the same two marks to a specific link i.e WAN4 , something like
add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:4/0 action=mark-connection new-connection-mark=WAN1_conn passthrough=yes add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:4/1 action=mark-connection new-connection-mark=WAN2_conn passthrough=yes add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:4/2 action=mark-connection new-connection-mark=WAN3_conn passthrough=yes add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:4/3 action=mark-connection new-connection-mark=WAN4_conn passthrough=yes add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:4/4 action=mark-connection new-connection-mark=WAN4_conn passthrough=yes
PCC WITH SAME GATEWAY
Try defining the outbound interface.
For example replace this.
/ip route add dst-address=0.0.0.0/0 gateway=22.214.171.124 routing-mark=to_wan-ISP1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=126.96.36.199 routing-mark=to_wan-ISP2 check-gateway=ping With following /ip route add dst-address=0.0.0.0/0 gateway=188.8.131.52%eth1-ISP routing-mark=to_wan-ISP1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=184.108.40.206%eth2-ISP routing-mark=to_wan-ISP2 check-gateway=ping
Replace the eth1-ISP with your own wan interface name , use the notation % for sure.
If it works , let me know
Using modems in BRIDGE mode will probably give you some better performance and control 🙂 Try it 😉
٩(●̮̮̃•̃)۶ ZaiB ٩(●̮̮̃•̃)۶