Wednesday, February 26, 2014

ADSL bonding with Mikrotik

ADSL bonding with Mikrotik

Here ill show you how to bond 4x ADSL routers through a Mikrotik 750 Routerboard with just a few scripts and configurations

I assume that all my readers know how to setup a basic ADSL router and will only cover the hardware placement and Mikrotik configuration.


Network layout Diagram

A Mikrotik RB750 (MT RB 750) were used in this tut. We use 4 Ports for the 4 ADSL routers to connect to and the 5th port for our LAN .


Mikrotik (MT) Config

We start by giving and IP address to the MT Router ports and renaming the ports that its easier to manage....

/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
 
 

Here we will add the firewall Mangle rules

/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
 

Now add the routes so that the MT router know what its gateways are. 

/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

Next the Firewall Nat Rules

/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
 

Lastly we need to add the DNS server that we can resolve hostnames

/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




Now test the internet from the LAN side . The more load you put on the better the bonding will work. 

Hope that you find this Tutorial help full . Please ask me any question in the comment section :)

 

Best Regards

Ferdi de Beer

Proinfotech

10 comments:

  1. Hi ,

    I have bonded 3x adsl lines and some pages are not opening like autotrader.co.za .

    All the settings are correct to my knowledge but it seems it is struggling to find some sites.

    Please help ?

    pieter.itexpress@gmail.com

    ReplyDelete
  2. Hello There,
    I Have two Permanent ADSL connections and one Backup Connection, I want to use two ADSL connection for Load Balancing / Bonding and if any one of the two fails 3rd WAN should only kick in that time.
    NB:- IF any two connections are down still all the traffic should be automatically re-directed to the one active.

    ReplyDelete
  3. is it bonding or load balancing ?

    ReplyDelete
    Replies
    1. Hello Mathias

      If you use a protocol like p2p where multiple ports are used youl get a bonding effect .if it use a a single port youl only get a balancing effect :)

      Delete
    2. This is PCC Method Load balancing

      Delete
  4. This comment has been removed by a blog administrator.

    ReplyDelete
  5. I want be sure for its working bonding, not load balancing

    ReplyDelete
  6. please can i get a direction on how to do bonding? i have tried several times but the output has always been my problem. please help me out

    ReplyDelete
  7. You have created WANx_Conn twice, once in the input chain and secondly in the prerouting chain?. You should also create an action=accept for each gateway in prerouting chain.

    ReplyDelete