Mikrotik DUAL WAN Load Balancing using PCC method
mikrotik dual wan

Mikrotik DUAL WAN Load Balancing using PCC method

Mikrotik Dual Wan

Following is a complete script for Mikrotik to combine/load balance two DSL lines. In this example, I used MikrotikT RB750 5 ports router.

2 ports were connected with two different DSL Routers,
and 3rd port was connected with User LAN.
Both DSLs are of the same speed, i.e 10Mb each.


Also, don’t forget to rename the interface names accordingly.

In my personnel experience, If user’s requests are directly hitting Mikrotik configured with PCC, then you will get good load balancing. Use src-address as a 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 an effective and balanced approach when more and more connections (from clients) that occurred. I also recommend using the SQUID proxy server along with Mikrotik, either parallel or in front or backend, for better response time and it will also increase a good browsing experience for users.

If somehow you are not satisfied with the src-address approach, play with the PCC-Classifier, then Try both addresses and ports as the classifier. While this will randomize things the most and in theory give you the fairest allocation of bandwidth, BUT there is also a good chance that it will break certain things like banking websites and some forums. This is because oftentimes 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 websites. For that reason, I usually stick with src-address for PCC load balancing.

See Also How To Setup VLAN Trunk Using Bridge on Mikrotik Router


/ip address

add address= network= broadcast= interface=Local

add address= network= broadcast= interface=WAN1

add address= network= broadcast= interface=WAN2


/ip dns set allow-remote-requests=yes cache-max-ttl=1w cache-size=5000KiB max-udp-packet-size=512 servers=


/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=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=prerouting dst-address= action=accept in-interface=Local

add chain=prerouting dst-address= action=accept in-interface=Local


add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:2/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:2/1 action=mark-connection new-connection-mark=WAN2_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


/ip route

add dst-address= gateway= routing-mark=to_WAN1 check-gateway=ping

add dst-address= gateway= routing-mark=to_WAN2 check-gateway=ping


add dst-address= gateway= distance=1 check-gateway=ping

add dst-address= gateway= distance=2 check-gateway=ping


/ip firewall nat

add chain=srcnat out-interface=WAN1 action=masquerade

add chain=srcnat out-interface=WAN2 action=masquerade


follow on facebook
follow on linkedin
follow on Reddit

Leave a Reply