Updated 16th October, 2014
Following is a complete script for Mikrotik to Load Balance 4 WAN links OR DSL links , the script idea is taken fromhttp://wiki.mikrotik.com/wiki/Manual:PCC#Example
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.
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.
Scrip Start
Step-1/ip addressadd address=192.168.0.1/24 network=192.168.0.0 broadcast=192.168.0.255 interface=Localadd address=192.168.1.2/24 network=192.168.1.0 broadcast=192.168.1.255 interface=WAN1add address=192.168.2.2/24 network=192.168.2.0 broadcast=192.168.2.255 interface=WAN2add address=192.168.3.2/24 network=192.168.3.0 broadcast=192.168.3.255 interface=WAN3add address=192.168.4.2/24 network=192.168.4.0 broadcast=192.168.4.255 interface=WAN4/ip firewall mangleadd chain=input in-interface=WAN1 action=mark-connection new-connection-mark=WAN1_connadd chain=input in-interface=WAN2 action=mark-connection new-connection-mark=WAN2_connadd chain=input in-interface=WAN3 action=mark-connection new-connection-mark=WAN3_connadd chain=input in-interface=WAN4 action=mark-connection new-connection-mark=WAN4_connadd chain=output connection-mark=WAN1_conn action=mark-routing new-routing-mark=to_WAN1add chain=output connection-mark=WAN2_conn action=mark-routing new-routing-mark=to_WAN2add chain=output connection-mark=WAN3_conn action=mark-routing new-routing-mark=to_WAN3add chain=output connection-mark=WAN4_conn action=mark-routing new-routing-mark=to_WAN4add chain=prerouting dst-address=192.168.1.0/24 action=accept in-interface=Localadd chain=prerouting dst-address=192.168.2.0/24 action=accept in-interface=Localadd chain=prerouting dst-address=192.168.3.0/24 action=accept in-interface=Localadd chain=prerouting dst-address=192.168.4.0/24 action=accept in-interface=Localadd
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=yesadd
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=yesadd
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=yesadd
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=yesadd chain=prerouting connection-mark=WAN1_conn in-interface=Local action=mark-routing new-routing-mark=to_WAN1add chain=prerouting connection-mark=WAN2_conn in-interface=Local action=mark-routing new-routing-mark=to_WAN2add chain=prerouting connection-mark=WAN3_conn in-interface=Local action=mark-routing new-routing-mark=to_WAN3add chain=prerouting connection-mark=WAN4_conn in-interface=Local action=mark-routing new-routing-mark=to_WAN4/ip routeadd dst-address=0.0.0.0/0 gateway=192.168.1.1 routing-mark=to_WAN1 check-gateway=pingadd dst-address=0.0.0.0/0 gateway=192.168.2.1 routing-mark=to_WAN2 check-gateway=pingadd dst-address=0.0.0.0/0 gateway=192.168.3.1 routing-mark=to_WAN3 check-gateway=pingadd dst-address=0.0.0.0/0 gateway=192.168.4.1 routing-mark=to_WAN4 check-gateway=pingadd dst-address=0.0.0.0/0 gateway=192.168.1.1 distance=1 check-gateway=pingadd dst-address=0.0.0.0/0 gateway=192.168.2.1 distance=2 check-gateway=pingadd dst-address=0.0.0.0/0 gateway=192.168.3.1 distance=3 check-gateway=pingadd dst-address=0.0.0.0/0 gateway=192.168.4.1 distance=4 check-gateway=ping/ip firewall natadd chain=srcnat out-interface=WAN1 action=masqueradeadd chain=srcnat out-interface=WAN2 action=masqueradeadd chain=srcnat out-interface=WAN3 action=masqueradeadd chain=srcnat out-interface=WAN4 action=masqueradeNow Configure DNS server so users can resolve host names,
Step-2/ip dns set allow-remote-requests=yes cache-max-ttl=1w cache-size=5000KiB max-udp-packet-size=512 servers=221.132.112.8,8.8.8.8
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 likeCode:
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=yesadd
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=yesadd
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=yesadd
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=yesadd
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=yesPCC WITH SAME GATEWAY
Try defining the outbound interface.
For example replace this./ip route add dst-address=0.0.0.0/0 gateway=1.2.3.4 routing-mark=to_wan-ISP1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=1.2.3.4 routing-mark=to_wan-ISP2 check-gateway=pingWith following/ip route add dst-address=0.0.0.0/0 gateway=1.2.3.4%eth1-ISP routing-mark=to_wan-ISP1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=1.2.3.4%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
TIP:
Using modems in BRIDGE mode will probably give you some better performance and control Try it
Thaks for you script and How add SQUID proxy server?
ReplyDelete