Friday, October 25, 2013

How to Installing and Configure Unbound on Ubuntu Server 12.04

Unbound is a validating, recursive, and caching DNS resolver. created with C programming and Developed by NLnetlabs . Unbound’s design is a set of modular components which incorporate features including enhanced security (DNSSEC) validation, Internet Protocol Version 6 (IPv6), and a client resolver library API as an integral part of the architecture. Originally written for Posix-compatible Unix-like operating system, Unbound currently runs on FreeBSD, OpenBSD, NetBSD, and Linux.
Unbound now available in new version 1.4.18, it was released on August 2 2012. On ubuntu server, unbound packge is available in official ubuntu repository but still in version 1.4.16. The install and configuration of Unbound on Ubuntu Server 12.04 is incredibly easy. Follow the guide How to Installing and Configure Unbound on Ubuntu Server 12.04
Installing Unbound
Login to your ubuntu server using ssh. before installing unbound, make sure your package repositories and installed programs are up to date.
sudo apt-get update
install unbound:
sudo apt-get install unbound
Configure Unbound
Unbound configuration file will be located at /etc/unbound/unbound.conf.
Login as root, Enter to directory /etc/unbound
sudo -i
cd /etc/unbound
Download the latest root DNS hints file from 
wget ftp://ftp.internic.net/domain/named.cache
Run unbound-control-setup to generate the necessary TLS key files
unbound-control-setup
Change owner all file unbound_* in the directory /etc/unbound to (unbound:root = user unbound : group root)
chown unbound:root unbound_*
Change permissions all file unbound_* to 440
chown unbound:root unbound_*
Backup old unbound configuration with following command
mv /etc/unbound/unbound.conf /etc/unbound/unbound.conf.default
Create new file unbound configuration, just copy and paste these config in to terminal:
cat > /etc/unbound/unbound.conf <<-EOF
server:
access-control: 127.0.0.0/8 allow
access-control: 192.168.42.0/24 allow
auto-trust-anchor-file: "/var/lib/unbound/root.key"
verbosity: 1
statistics-interval: 120
num-threads: 1
interface: 0.0.0.0
outgoing-range: 512
num-queries-per-thread: 1024
msg-cache-size: 16m
rrset-cache-size: 32m
msg-cache-slabs: 4
rrset-cache-slabs: 4
cache-max-ttl: 86400
infra-host-ttl: 60
infra-lame-ttl: 120
infra-cache-numhosts: 10000
infra-cache-lame-size: 10k
do-ip4: yes
do-ip6: no
do-udp: yes
do-tcp: yes
do-daemonize: yes
logfile: ""
use-syslog: no
identity: "DNS"
version: "1.4"
hide-identity: yes
hide-version: yes
harden-glue: yes
do-not-query-address: 127.0.0.1/8
do-not-query-localhost: yes
module-config: "iterator"
local-zone: "localhost." static
local-data: "localhost. 10800 IN NS localhost."
local-data: "localhost. 10800 IN SOA localhost. nobody.invalid. 1 3600 1200 604800 10800"
local-data: "localhost. 10800 IN A 127.0.0.1"
local-zone: "127.in-addr.arpa." static
local-data: "127.in-addr.arpa. 10800 IN NS localhost."
local-data: "127.in-addr.arpa. 10800 IN SOA localhost. nobody.invalid. 2 3600 1200 604800 10800"
local-data: "1.0.0.127.in-addr.arpa. 10800 IN PTR localhost."
local-zone: "ubuntuprecise.net." static
local-data: "ubuntuprecise.net. 86400 IN NS ns1.ubuntuprecise.net."
local-data: "ubuntuprecise.net. 86400 IN SOA ubuntuprecise.net. proxy.ubuntuprecise.net. 3 3600 1200 604800 86400"
local-data: "ubuntuprecise.net. 86400 IN A 192.168.34.4"
local-data: "www.ubuntuprecise.net. 86400 IN A 192.168.34.4"
local-data: "ns1.ubuntuprecise.net. 86400 IN A 192.168.34.4"
local-data: "mail.ubuntuprecise.net. 86400 IN A 192.168.34.4"
local-data: "ubuntuprecise.net. 86400 IN MX 10 mail.ubuntuprecise.net."
local-data: "ubuntuprecise.net. 86400 IN TXT v=spf1 a mx ~all"
local-zone: "42.168.192.in-addr.arpa." static
local-data: "42.168.192.in-addr.arpa. 10800 IN NS ubuntuprecise.net."
local-data: "42.168.192.in-addr.arpa. 10800 IN SOA ubuntuprecise.net. proxy.ubuntuprecise.net. 4 3600 1200 604800 864000"
local-data: "1.42.168.192.in-addr.arpa. 10800 IN PTR ubuntuprecise.net."
forward-zone:
name: "."
forward-addr: 8.8.8.8
forward-addr: 8.8.4.4
forward-addr: 208.67.222.222
forward-addr: 208.67.220.220
remote-control:
control-enable: yes
control-interface: 127.0.0.1
control-interface: 192.168.42.1
control-port: 953
server-key-file: "/etc/unbound/unbound_server.key"
server-cert-file: "/etc/unbound/unbound_server.pem"
control-key-file: "/etc/unbound/unbound_control.key"
control-cert-file: "/etc/unbound/unbound_control.pem"
EOF
Check unbound configuration with following command:
unbound-checkconf /etc/unbound/unbound.conf
Restart unbound service
service unbound restart
When you restart unbound and get an error messege like this:
* Restarting recursive DNS server unbound
[1351477671] unbound[20492:0] error: bind: address already in use
[1351477671] unbound[20492:0] fatal error: could not open ports
You need stop dnsmasq service.

service dnsmasq stop
If you have installed squid proxy server on your machine, add this option on squid file configuration. then restart squid server.
dns_nameservers 127.0.0.1 192.168.42.1
service squid3 restart
use this command to check unbound performance:
unbound-control stats

Ubuntu Linux and Cisco switch link aggregation (load balancing, bonding)

Link aggregation between Cisco 3750 switch and Ubintu 9.10
Ubuntu configuration:
Install ifenslave — Attach and detach slave network devices to a bonding device.

apt-get install  ifenslave
Edit or create file /etc/modprobe.d/aliases.conf
alias bond0 bonding
options bonding mode=4 miimon=100
where mode 4 – IEEE 802.3ad Dynamic link aggregation. Creates aggregation groups that share the same speed and
duplex settings. Utilizes all slaves in the active aggregator according to the 802.3ad specification.
Edit /etc/network/interfaces.
auto bond0
iface bond0 inet static
        address 172.20.10.10
        netmask 255.255.255.0
        network 172.20.10.0
        broadcast 172.20.10.255
        post-up ifenslave bond0 eth0 eth1
        gateway 172.20.10.254
        dns-nameservers 172.20.10.254
        dns-search axarva.co.id

UPDATE (02.01.2012): Ubuntu 11.10 (oneiric).
1.  Edit or create file /etc/modprobe.d/aliases.conf
alias netdev-bond0 bonding
options bonding mode=4 miimon=100
or
2. To run bonding first put module “bonding” in “/etc/modules” :
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
loop
lp
rtc
bonding
In “/etc/network/interfaces”
auto bond0
iface bond0 inet static
        slaves eth0 eth1
        bond_mode 4
        bond_miimon 100
        address 172.20.10.10
        netmask 255.255.255.0
        network 172.20.10.0
        broadcast 172.20.10.255
        post-up ifenslave bond0 eth0 eth1

Cisco configuration ( Gi1/0/1 and Gi1/0/2 will be aggregated ):
cisco-3750(config)#interface range GigabitEthernet 1/0/1, GigabitEthernet 1/0/2
cisco-3750(config-if-range)#switchport trunk encapsulation dot1q
cisco-3750(config-if-range)#switchport trunk allowed vlan 10,20
cisco-3750(config-if-range)#switchport mode trunk
cisco-3750(config-if-range)#channel-group 1 mode active
Creating a port-channel interface Port-channel 1
cisco-3750(config-if-range)#end
cisco-3750#
Configuration of interface Port-Channel 1 must be exactly the same as Gi1/0/1 and Gi1/0/2.
cisco-3750#sh ru int Po1
Building configuration...
Current configuration : 159 bytes
!
interface Port-channel1
 switchport trunk encapsulation dot1q
 switchport trunk allowed vlan 10,20
end
If you want to modify configuration of aggregated interfaces, modify only configuration of Port-Channel interface.
And the last step is to set load-balance algorithm:
cisco-3750(config)#port-channel load-balance src-dst-ip
cisco-3750#sh etherchannel load-balance
EtherChannel Load-Balancing Operational State (src-dst-ip):
Non-IP: Source XOR Destination MAC address
  IPv4: Source XOR Destination IP address
  IPv6: Source XOR Destination IP address

cisco-3750#show etherchannel summary
Flags:  D - down        P - in port-channel
        I - stand-alone s - suspended
        H - Hot-standby (LACP only)
        R - Layer3      S - Layer2
        U - in use      f - failed to allocate aggregator
        u - unsuitable for bundling
        w - waiting to be aggregated
        d - default port

Number of channel-groups in use: 1
Number of aggregators:           1

Group  Port-channel  Protocol    Ports
------+-------------+-----------+-----------------------------------------------
1      Po1(SU)         LACP      Gi1/0/1(P)  Gi1/0/2(P)

cisco-3750#
cisco-3750#show etherchannel protocol
                Channel-group listing:
                ----------------------
Group: 1
----------
Protocol:  LACP

May be useful for a network of friends, survivors try.








Thursday, September 5, 2013

IPTABLES

Setelah sekian lama tidak tidak bekerja dengan system operasi ini, karena sudah dimanjakan dengan ada Cisco, Junos, Vyatta, Mikrotik, maupun dengan dengan OS yang sekarang sudah banyak dipergunakan oleh temen-temen yang bekerja di networking baik di skala besar maupun kecil.

Karena sudah tidak ada kegiatan yang apapun, akhirnya buka-buka kamus lama mengenai IPTABLES kembali.

A. IPTABLES

Iptables adalah suatu tools dalam sistem operasi linux yang berfungsi sebagai alat untuk melakukan filter (penyaringan) terhadap trafic/lalu lintas data. Secara sederhana digambarkan sebagai pengatur traffic. Dengan iptables inilah kita akan mengatur semua traffic ke dalam network kita, baik yang masuk ke router, keluar dari komputer, ataupun traffic yang sekedar melewati komputer kita.

Membahas prinsip dasar firewall iptables, mengelola akses internet berdasarkan IP Address, port aplikasi dan MAC address. Firewall IPTables packet filtering memiliki tiga aturan (policy), yaitu:

- INPUT
Mengatur paket data yang memasuki firewall dari intranet maupun internet, kita bisa mengelola komputer mana saja yang bisa
mengakses firewall. Misal: Hanya komputer IP 192.168.1.100 yang bisa SSH ke firewall dan yang lain tidak boleh.

- OUTPUT
Mengatur paket data yang keluar dari firewall ke arah intranet maupun internet. Biasanya output tidak diset, karena bisa
membatasi kemampuan firewall itu sendiri.

- FORWARD
Mengatur paket data yang melintasi firewall dari internet ke intranet maupun sebaliknya. Policy forward paling banyak dipakai
saat ini untuk mengatur koneksi internet berdasarkan port, mac address dan alamat IP Selain aturan (policy) firewall iptables
juga mempunyai parameter yang disebut dengan TARGET, yaitu status yang menentukkan koneksi di iptables diizinkan lewat atau
tidak. TARGET ada tiga macam yaitu:

a. ACCEPT
Akses diterima dan diizinkan melewati firewall

b. REJECT
Akses ditolak, koneksi dari komputer klien yang melewati firewall langsung terputus, biasanya terdapat pesan “Connection
Refused”. Target Reject tidak menghabiskan bandwidth internet karena akses langsung ditolak, hal ini berbeda dengan DROP.

c.DROP
Akses diterima tetapi paket data langsung dibuang oleh kernel, sehingga pengguna tidak mengetahui kalau koneksinya dibatasi
oleh firewall, pengguna melihat seakan–akan server yang dihubungi mengalami permasalahan teknis. Pada koneksi internet yang
sibuk dengan trafik tinggi Target Drop sebaiknya jangan digunakan.

Berikut ini contoh penggunaan firewall iptables untuk mengelolak akses internet;

Policy INPUT

IP Firewall = 192.168.1.1
IP Administrator = 192.168.1.10
IP Umum = 192.168.1.20-254

Membatasi port number
iptables -A INPUT -i eth1 -s 192.168.1.200 -d 192.168.1.1 -p tcp -dport 22-j REJECT

Contoh di atas melarang komputer klien dengan IP 192.168.1.200 mengakses port 22 (ssh) firewall yang memiliki IP 192.168.1.1

Policy FORWARD
1. Membatasi orang mengakses port aplikasi P2P (Limewire, GnuTella & Bearshare)

iptables -A FORWARD -p tcp -dport 6340:6350 -j REJECT
iptables -A FORWARD -p -dport 6340:6350 -j REJECT1
-p tcp (koneksi menggunakan protokol TCP)
-p udp (koneksi menggunakan protokol UDP)
-dport 6340:6350 (melarang akses port 6340 sampai dengan 6350)


2. Membatasi koneksi satu alamat IP

iptables -A FORWARD -s 192.168.1.99 -d 0/0 -j REJECT

-d 0/0 berarti ke semua tujuan

3. Membatasi koneksi berdasarkan range IP

iptables -A FORWARD -m iprange -src-range 192.168.1.100-192.168.1.150 -d 0/0 -j REJECT

4. Membatasi koneksi internet berdasarkan MAC Address

iptables -A FORWARD -m mac -mac-source 00:30:18:AC:14:41 -d 0/0 -j REJECT


B. NAT (Network Address Translation)
Pada bagian ini kita membahas mengenai Network Address Translation, biasa disebut dengan NAT. Fungsi utama dari NAT adalah untuk melakukan translasi alamat dari satu alamat ke alamat IP yang lain, biasanya dipakai pada internet gateway. Selain melakukan translasi alamat IP, iptables juga bisa melakukan NAT alamat Port aplikasi, bisa disebut juga dengan Port Address Translation (PAT). PAT digunakan untuk membangun beberapa server seperti mail, web, database maupun datacenter yang diakses melalui internet hanya dengan satu alamat IP publik.

Tabel NAT
Selain sebagai IP Filtering / Firewall, iptables juga bisa difungsikan untuk translasi alamat, ditandai dengan opsi -t nat pada perintah iptables.

iptables -t nat ..

prinsip dasar NAT di bagi menjadi dua bagian, yang pertama adalah POSTROUTING, yaitu melakukan NAT paket data yang keluar dari firewall, kebanyakan postrouting dipakai untuk translasi alamat IP.

Yang kedua adalah PREROUTING, untuk melakukan NAT paket data yang memasuki firewall, kebanyakan digunakan untuk transparency proxy server dan membangun beberapa server dengan satu IP publik.

1. POSTROUTING
Translasi alamat yang keluar dari firewall, berarti kita melihat paket data yang keluar dari kartu LAN.

iptables -t NAT -A POSTROUTING -o eth0 -s 192.168.1.0/24 -d 0/0 -j SNAT -to 202.154.6.55
iptables -t NAT -A POSTROUTING -o eth0 -s 192.168.1.0/24 -d 0/0 -j MASQUERADE


contoh diatas berarti jaringan subnet 192.168.1.0/24 jika menghubungi web server yang berada di internet dikenali dari IP 202.154.6.55. Target MASQUERADE berarti IP NAT disesuaikan dengan alamat IP kartu LAN eth0, jika IP eth0 dirubah kita tidak perlu merubah settingan iptables.

2. PREROUTING
Translasi alamat yang memasuki kartu jaringan, kita juga bisa membelokkan paket data ke port tertentu untuk membangun server internet hanya dengan satu IP publik.

iptables -t nat -A PREROUTING – eth0 -p tcp -dport 25 -j DNAT -to 192.168.1.20:25
iptables -t nat -A PREROUTING – eth0 -p tcp -dport 110 -j DNAT -to 192.168.1.20:110
iptables -t nat -A PREROUTING – eth0 -p tcp -dport 80 -j DNAT -to 192.168.1.30:80


Pada contoh diatas kita mempunyai 2 server, 192.168.1.20 (mail server) dan 192.168.1.30 (web server). Koneksi dari internet ke port 25 dan 110 secara otomatis diarahkan ke alamat IP 192.168.1.20 (IP Lokal / LAN). Akses port 80 (web server) diarahkan ke IP lokal 192.168.1.30

List NAT
Untuk melihat NAT yang baru saja kita setting menggunakan perintah:

iptables -t nat -L -v
root@kolaMcc $ iptables -t nat -L -v
Chain PREROUTING (policy ACCEPT 1833K packets, 141M bytes)
pkts bytes target prot opt in out source destination
199K 9636K REDIRECT tcp – eth2 any anywhere anywhere tcp dpt:http redir ports 3128
0 0 REDIRECT tcp-eth1 any anywhere anywhere tcp dpt:36 redir ports 10000
0 0 REDIRECT tcp-eth1 any anywhere anywhere tcp dpt:time redir ports 20000
0 0 DNAT tcp-eth1 any anywhere anywhere tcp dpt:33 to:192.168.1.100:22


Menghapus NAT

root@kolaMcc $ iptables -t nat -L -viptables -t nat -F
root@kolaMcc $ iptables -t nat -L -viptables -t nat -Z

Wednesday, August 28, 2013

Setting Ro. Jakarta
[elang@Pus1nk-JKT] > /interface set ether1 name=ether1<->WAN
[elang@Pus1nk-JKT] > /interface set ether2 name=ether2<->LAN
[elang@Pus1nk-JKT] > /ip address add address=10.10.10.6/30 interface=ether1<->WAN
[elang@Pus1nk-JKT] > /ip address add address=172.21.0.1/22 interface=ether2<->LAN
[elang@Pus1nk-JKT] > /ip route add gateway=10.10.10.5
[elang@Pus1nk-JKT] > /ip dns set primary-dns=10.10.10.254 secondary-dns=10.10.10.252
[elang@Pus1nk-JKT] > /ip dns set allow-remote-requests=yes
(tunnel JKT<->BDG)
[elang@Pus1nk-JKT] > /interface ipip enable JKT<->BDG
[elang@Pus1nk-JKT] > /ip address add address=10.20.30.1/30 interface=JKT<->BDG
[elang@Pus1nk-JKT] > /ip route add dst-address=172.21.0.0/22 gateway=10.20.30.2

Setting Ro. Bandung
[elang@Pus1nk-BDG] > /interface set ether1 name=ether1<->WAN
[elang@Pus1nk-BDG] > /interface set ether2 name=ether2<->LAN
[elang@Pus1nk-BDG] > /ip address add address=20.20.20.2/30 interface=ether1<->WAN
[elang@Pus1nk-BDG] > /ip address add address=172.22.0.1/23 interface=ether2<->LAN
[elang@Pus1nk-BDG] > /ip route add gateway=20.20.20.1
[elang@Pus1nk-BDG] > /ip dns set primary-dns=20.20.20.250 secondary-dns=20.20.20.252
[elang@Pus1nk-BDG] > /ip dns set allow-remote-requests=yes
(tunnel JKT<->BDG)
[elang@Pus1nk-BDG] > /interface ipip enable JKT<->BDG
[elang@Pus1nk-BDG] > /ip address add address=10.20.30.2/30 interface=JKT<->BDG
[elang@Pus1nk-BDG] > /ip route add dst-address=172.22.0.0/23 gateway=10.20.30.1

Setting Ro. Surabaya
[elang@Pus1nk-BDG] > /interface set ether1 name=ether1<->WAN
[elang@Pus1nk-BDG] > /interface set ether2 name=ether2<->LAN
[elang@Pus1nk-BDG] > /ip address add address=30.30.30.2/30 interface=ether1<->WAN
[elang@Pus1nk-BDG] > /ip address add address=172.31.0.1/23 interface=ether2<->LAN
[elang@Pus1nk-BDG] > /ip route add gateway=30.30.30.1
[elang@Pus1nk-BDG] > /ip dns set primary-dns=30.30.30.250 secondary-dns=30.30.30.252
[elang@Pus1nk-BDG] > /ip dns set allow-remote-requests=yes
(tunnel-JKT)
[elang@Pus1nk-BDG] > /interface ipip enable JKT<->SBY
[elang@Pus1nk-BDG] > /ip address add address=10.20.30.6/30 interface=JKT<->SBY
[elang@Pus1nk-BDG] > /ip route add dst-address=172.31.0.0/23 gateway=10.20.30.5

Tunnel Menggunakan EoIP

Setelah melihat teman kebingungan untuk melakukan Tunnel dengan menggunakan EoIP, jadinya saya berkeingian untuk membuat corat-coretan sedikit.

Dengan asumsi kita mempunyai router induk di jakarta dan beberapa kantor cabang di beberapa daerah;

Setting Ro. Jakarta
[elang@Pus1nk-JKT] > /interface set ether1 name=ether1<->WAN
[elang@Pus1nk-JKT] > /interface set ether2 name=ether2<->LAN
[elang@Pus1nk-JKT] > /ip address add address=10.10.10.6/30 interface=ether1<->WAN
[elang@Pus1nk-JKT] > /ip address add address=172.21.0.1/22 interface=ether2<->LAN
[elang@Pus1nk-JKT] > /ip route add gateway=10.10.10.5
[elang@Pus1nk-JKT] > /ip dns set primary-dns=10.10.10.254 secondary-dns=10.10.10.252
[elang@Pus1nk-JKT] > /ip dns set allow-remote-requests=yes

(tunnel-BDG)
[elang@Pus1nk-JKT] > /interface eoip add name=EoIP-JKT<->BDG remote-address=20.20.20.2 tunnel-id=22
[elang@Pus1nk-JKT] > /ip address add address=10.20.30.1/30 interface=EoIP-JKT<->BDG
[elang@Pus1nk-JKT] > /ip route add dst-address=172.21.0.0/22 gateway=10.20.30.2

(tunnel-SBY)
[elang@Pus1nk-JKT] > /interface eoip add name=EoIP-JKT<->SBY remote-address=10.10.10.11 tunnel-id=31
[elang@Pus1nk-JKT] > /ip address add address=10.20.30.5/30 interface=EoIP-JKT<->SBY
[elang@Pus1nk-JKT] > /ip route add dst-address=172.21.0.0/22 gateway=10.20.30.6


Setting Ro. Bandung
[elang@Pus1nk-BDG] > /interface set ether1 name=ether1<->WAN
[elang@Pus1nk-BDG] > /interface set ether2 name=ether2<->LAN
[elang@Pus1nk-BDG] > /ip address add address=20.20.20.2/30 interface=ether1<->WAN
[elang@Pus1nk-BDG] > /ip address add address=172.22.0.1/23 interface=ether2<->LAN
[elang@Pus1nk-BDG] > /ip route add gateway=20.20.20.1
[elang@Pus1nk-BDG] > /ip dns set primary-dns=20.20.20.250 secondary-dns=20.20.20.252
[elang@Pus1nk-BDG] > /ip dns set allow-remote-requests=yes

(tunnel-JKT)
[elang@Pus1nk-BDG] > /interface eoip add name=EoIP-JKT<->BDG remote-address=10.10.10.6 tunnel-id=22
[elang@Pus1nk-BDG] > /ip address add address=10.20.30.2/30 interface=EoIP-JKT<->BDG
[elang@Pus1nk-BDG] > /ip route add dst-address=172.22.0.0/23 gateway=10.20.30.1


Setting Ro. Surabaya
[elang@Pus1nk-BDG] > /interface set ether1 name=ether1<->WAN
[elang@Pus1nk-BDG] > /interface set ether2 name=ether2<->LAN
[elang@Pus1nk-BDG] > /ip address add address=30.30.30.2/30 interface=ether1<->WAN
[elang@Pus1nk-BDG] > /ip address add address=172.31.0.1/23 interface=ether2<->LAN
[elang@Pus1nk-BDG] > /ip route add gateway=30.30.30.1
[elang@Pus1nk-BDG] > /ip dns set primary-dns=30.30.30.250 secondary-dns=30.30.30.252
[elang@Pus1nk-BDG] > /ip dns set allow-remote-requests=yes

(tunnel-JKT)
[elang@Pus1nk-BDG] > /interface eoip add name=EoIP-JKT<->SBY remote-address=10.10.10.11 tunnel-id=22
[elang@Pus1nk-BDG] > /ip address add address=10.20.30.6/30 interface=EoIP-JKT<->SBY
[elang@Pus1nk-BDG] > /ip route add dst-address=172.31.0.0/23 gateway=10.20.30.5


Silahkan mencoba sendiri . . . .

Sunday, April 21, 2013

Load Balancing dan Fail Over


Sudah cukup banyak load balancing dan fail over di bahas di FMI (Forum Mikrotik Indonesia) seperti pada beberapa tautan yang saya simpan di bawah ini:
Koneksi ke internet yang digunakan adalah 1 link dedicated ke cbn via fiber optic atau FO dan 2 link ke speedy via modem adsl. Pemodelan koneksi adalah sbb:
  • Koneksi ke cbn dianggap stabil.
  • Koneksi ke cbn hanya digunakan oleh server mail saja.
  • Koneksi ke cbn adalah default gateway mikrotik.
  • Koneksi ke internet seperti browsing dll dilewatkan ke speedy.
  • Koneksi ke speedy dianggap tidak stabil dan perlu dibuat fail over sehingga jika salah satu speedy putus maka koneksi akan melalui 1 speedy.
  • Koneksi internet user ke tcp port 80 (browsing) akan dilewatkan server proxy. Koneksi dari proxy keluar akan melalui load balancing nth.
  • Koneksi internet user selain browsing di atas akan melalui load balancing pcc.
  • Mikrotik bisa diakses dari luar baik melalui link CBN maupun speedy.

Network Topologi
Network Topologi

/interface ethernet
set 0 arp=enabled auto-negotiation=yes bandwidth=unlimited/unlimited comment="" \
    disabled=no full-duplex=yes l2mtu=1598 mac-address=\
    XX:XX:XX:XX:XX:B0 master-port=none mtu=1500 name=CBN speed=100Mbps
set 1 arp=enabled auto-negotiation=yes bandwidth=unlimited/unlimited comment="" \
    disabled=no full-duplex=yes l2mtu=1598 mac-address=\
    XX:XX:XX:XX:XX:AF master-port=none mtu=1500 name=LAN speed=100Mbps
set 2 arp=enabled auto-negotiation=yes bandwidth=unlimited/unlimited comment="" \
    disabled=no full-duplex=yes l2mtu=1598 mac-address=\
    XX:XX:XX:XX:XX:B1 master-port=none mtu=1500 name=ETH-SPEEDY1 speed=100Mbps
set 3 arp=enabled auto-negotiation=yes bandwidth=unlimited/unlimited comment="" \
    disabled=no full-duplex=yes l2mtu=1598 mac-address=\
    XX:XX:XX:XX:XX:B2 master-port=none mtu=1500 name=ETH-SPEEDY2 speed=100Mbps
set 4 arp=enabled auto-negotiation=yes bandwidth=unlimited/unlimited comment="" \
    disabled=no full-duplex=yes l2mtu=1598 mac-address=\
    XX:XX:XX:XX:XX:B5 master-port=none mtu=1500 name=SERVER speed=100Mbps

/interface pppoe-client
add ac-name="" add-default-route=no allow=pap,chap,mschap1,mschap2 comment="" \
    dial-on-demand=no disabled=no interface=SPEEDY1 max-mru=1480 \
    max-mtu=1480 mrru=disabled name=SPEEDY1 password=xxxxxx profile=\
    default service-name="" use-peer-dns=no user=12260420xxxx@telkom.net
add ac-name="" add-default-route=no allow=pap,chap,mschap1,mschap2 comment="" \
    dial-on-demand=no disabled=no interface=SPEEDY2 max-mru=1480 \
    max-mtu=1480 mrru=disabled name=SPEEDY2 password=xxxxxx profile=\
    default service-name="" use-peer-dns=no user=12260420xxxx@telkom.net
Perhatikan bahwa default route tidak diset di kedua koneksi speedy.

/ip address
add address=202.158.1.2/30 broadcast=202.158.1.3 comment="" disabled=no \
    interface=CBN network=202.158.1.0
add address=192.168.0.254/24 broadcast=192.168.0.255 comment="" disabled=\
    no interface=LAN network=192.168.0.0
add address=192.168.1.253/24 broadcast=192.168.1.255 comment="" disabled=no \
    interface=ETH-SPEEDY1 network=192.168.1.0
add address=192.168.2.253/24 broadcast=192.168.2.255 comment="" disabled=no \
    interface=ETH-SPEEDY2 network=192.168.2.0
add address=192.168.100.254/24 broadcast=192.168.100.255 comment="" disabled=no \
    interface=SERVER network=192.168.100.0

/ip route
add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=\
    202.158.1.1 routing-mark=CBN scope=30 target-scope=10
add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=SPEEDY1 \
    routing-mark=speedy1 scope=30 target-scope=10
add comment="" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=SPEEDY2 \
    routing-mark=speedy2 scope=30 target-scope=10
add comment="CBN as default gateway" disabled=no distance=1 \
    dst-address=0.0.0.0/0 gateway=202.158.1.1 scope=30 target-scope=10
add comment="network speedy" disabled=no distance=1 dst-address=202.134.0.0/16 gateway=\
    SPEEDY1,SPEEDY2 scope=30 target-scope=10

/ip firewall address-list
#
# Local network
#
add address=192.168.1.0/24 comment=speedy1 disabled=no list=local
add address=192.168.2.0/24 comment=speedy2 disabled=no list=local
add address=192.168.100.0/24 comment=server disabled=no list=local
add address=192.168.0.0/24 comment=lan disabled=no list=local
#
# Users (Clients)
#
add address=192.168.0.0/24 comment="" disabled=no list=lan
#
# Server
#
add address=192.168.100.0/24 comment="" disabled=no list=server
add address=192.168.100.200 comment="" disabled=no list=server-mail
add address=192.168.100.201 comment="" disabled=no list=server-proxy

/ip firewall nat
#
# DNS TRANSPARENT
#
add action=dst-nat chain=dstnat comment="DNS transparent" disabled=no \
    dst-port=53 protocol=tcp src-address-list=lan to-addresses=\
    192.168.100.200 to-ports=53
add action=dst-nat chain=dstnat comment="" disabled=no dst-port=53 protocol=\
    udp src-address-list=lan to-addresses=192.168.100.200 to-ports=53
#
# DSTNAT to Server Mail
#
add action=dst-nat chain=dstnat comment="SMTP" disabled=no \
    dst-address=202.158.1.2 dst-port=25 protocol=tcp to-addresses=\
    192.168.100.200 to-ports=25
add action=dst-nat chain=dstnat comment=WEB disabled=no dst-address=\
    202.158.1.2 dst-port=80 protocol=tcp to-addresses=192.168.100.200 \
    to-ports=808
add action=dst-nat chain=dstnat comment=POP3 disabled=no dst-address=\
    202.158.1.2 dst-port=110 protocol=tcp to-addresses=192.168.100.200 \
    to-ports=110
add action=dst-nat chain=dstnat comment=IMAP disabled=no dst-address=\
    202.158.1.2 dst-port=143 protocol=tcp to-addresses=192.168.100.200 \
    to-ports=143
add action=dst-nat chain=dstnat comment=HTTPS disabled=no dst-address=\
    202.158.1.2 dst-port=443 protocol=tcp to-addresses=192.168.100.200 \
    to-ports=443
#
# PROXY TRANSPARENT
#
add action=dst-nat chain=dstnat comment="PROXY TRANSPARENT for clients" \
    disabled=no dst-address-list=!local dst-port=80 in-interface=LAN \
    protocol=tcp src-address-list=lan to-addresses=192.168.100.201 \
    to-ports=8080
#
# MASQUERADE To Internet
#
add action=masquerade chain=srcnat comment="" disabled=no out-interface=CBN
add action=masquerade chain=srcnat comment="" disabled=no out-interface=SPEEDY1
add action=masquerade chain=srcnat comment="" disabled=no out-interface=SPEEDY2
#
# MASQUERADE To Modem ADSL
#
add action=masquerade chain=srcnat comment="" disabled=no out-interface=ETH-SPEEDY1
add action=masquerade chain=srcnat comment="" disabled=no out-interface=ETH-SPEEDY2

/ip firewall mangle
#
# MARK PACKET DOWN Proxy Cache Hits Mark
#
add action=mark-packet chain=forward comment="Proxy Cache Hits Mark" \
    disabled=no dscp=12 new-packet-mark=proxy-hit passthrough=no protocol=tcp \
    src-port=8080
#
# MARK PACKET DOWN from server proxy as internet connection
#
add action=mark-packet chain=forward comment=\
    "MARK PACKET clients-down from proxy" disabled=no dst-address-list=\
    lan new-packet-mark=clients-down passthrough=no protocol=tcp \
    src-address-list=server-proxy src-port=8080
#
# MARK PACKET UP local connection
#
add action=mark-packet chain=prerouting comment=\
    "MARK PACKETS server to local as server-up" disabled=no \
    dst-address-list=local new-packet-mark=server-up passthrough=no \
    src-address-list=server
#
# MARK ROUTING cbn from server mail
#
add action=mark-routing chain=prerouting comment=\
    "MARK routing for server mail via cbn" disabled=no \
    new-routing-mark=CBN passthrough=no src-address-list=server-mail
#
# MARK PACKET UP DIRECT to server proxy as internet connection
#
add action=mark-packet chain=prerouting comment=\
    "MARK PACKET DIRECT to proxy clients-up" disabled=no dst-address-list=\
    server-proxy dst-port=8080 new-packet-mark=clients-up passthrough=no \
    protocol=tcp src-address-list=lan
#
# MARK PACKET UP local connection
#
add action=mark-packet chain=prerouting comment="MARK PACKET LOCAL local-up" \
    disabled=no dst-address-list=local in-interface=LAN new-packet-mark=clients-local-up \
    passthrough=no src-address-list=lan
#
# MARK PACKET UP REDIRECT to server proxy as internet connection
#
add action=mark-packet chain=prerouting comment=\
    "MARK PACKET tcp port 80 REDIRECT to proxy clients-up" disabled=no \
    dst-address-list=!local dst-port=80 new-packet-mark=clients-up \
    passthrough=no protocol=tcp src-address-list=lan
#
# MARK CONNECTION from internet via cbn/speedy to mikrotik
#
add action=mark-connection chain=input comment=\
    "ACCEPT connection from cbn" connection-state=new disabled=no \
    in-interface=CBN new-connection-mark=cbn_rt_con passthrough=yes
add action=mark-routing chain=output comment="" connection-mark=cbn_rt_con \
    disabled=no new-routing-mark=CBN passthrough=no
add action=mark-connection chain=input comment=\
    "ACCEPT connection from speedy1" connection-state=new disabled=\
    no in-interface=SPEEDY1 new-connection-mark=speedy1_rt_con passthrough=\
    yes
add action=mark-routing chain=output comment="" connection-mark=\
    speedy1_rt_con disabled=no new-routing-mark=speedy1 passthrough=no
add action=mark-connection chain=input comment=\
    "ACCEPT connection from speedy2" connection-state=new disabled=\
    no in-interface=SPEEDY2 new-connection-mark=speedy2_rt_con passthrough=\
    yes
add action=mark-routing chain=output comment="" connection-mark=\
    speedy2_rt_con disabled=no new-routing-mark=speedy2 passthrough=no
#
# MARK PACKET DOWN local connection
#
add action=mark-packet chain=forward comment=\
    "MARK PACKET LOCAL clients-local-down" disabled=no dst-address-list=\
    lan new-packet-mark=clients-local-down passthrough=no \
    src-address-list=local
#
# MARK PACKET DOWN internet connection
#
add action=mark-packet chain=forward comment=\
    "MARK PACKET clients-down" disabled=no dst-address-list=\
    lan new-packet-mark=clients-down passthrough=no
#
# MARK PACKET UP internet connection (classified by connection marking)
#
add action=mark-packet chain=forward comment="MARK PACKET clients-up" \
    connection-mark=speedy1_con disabled=no new-packet-mark=clients-up \
    passthrough=no src-address-list=lan
add action=mark-packet chain=forward comment="MARK PACKET clients-up" \
    connection-mark=speedy2_con disabled=no new-packet-mark=clients-up \
    passthrough=no src-address-list=lan
#
# LOAD BALANCING NTH server proxy
#
add action=mark-connection chain=prerouting comment=LB_PCC_NTH_Proxy \
    connection-state=new disabled=no dst-address-list=!local \
    new-connection-mark=speedy1_pr_con nth=2,1 passthrough=yes \
    src-address-list=server-proxy
add action=mark-routing chain=prerouting comment=LB_PCC_NTH_Proxy \
    connection-mark=speedy1_pr_con disabled=no dst-address-list=!local \
    new-routing-mark=speedy1 passthrough=no src-address-list=server-proxy
add action=mark-connection chain=prerouting comment=LB_PCC_NTH_Proxy \
    connection-state=new disabled=no dst-address-list=!local \
    new-connection-mark=speedy2_pr_con nth=1,1 passthrough=yes \
    src-address-list=server-proxy
add action=mark-routing chain=prerouting comment=LB_PCC_NTH_Proxy \
    connection-mark=speedy2_pr_con disabled=no dst-address-list=!local \
    new-routing-mark=speedy2 passthrough=no src-address-list=server-proxy
#
# LOAD BALANCING PCC clients
#
add action=mark-connection chain=prerouting comment=LB_PCC_NTH_Clients \
    connection-state=new disabled=no dst-address-list=!local \
    dst-address-type=!local new-connection-mark=speedy1_con passthrough=yes \
    per-connection-classifier=both-addresses:2/0 src-address-list=lan
add action=mark-routing chain=prerouting comment=LB_PCC_NTH_Clients \
    connection-mark=speedy1_con disabled=no dst-address-list=!local \
    new-routing-mark=speedy1 passthrough=no src-address-list=lan
add action=mark-connection chain=prerouting comment=LB_PCC_NTH_Clients \
    connection-state=new disabled=no dst-address-list=!local \
    dst-address-type=!local new-connection-mark=speedy2_con passthrough=yes \
    per-connection-classifier=both-addresses:1/0 src-address-list=lan
add action=mark-routing chain=prerouting comment=LB_PCC_NTH_Clients \
    connection-mark=speedy2_con disabled=no dst-address-list=!local \
    new-routing-mark=speedy2 passthrough=no src-address-list=lan

/queue type
set default kind=pfifo name=default pfifo-limit=50
set ethernet-default kind=pfifo name=ethernet-default pfifo-limit=50
set wireless-default kind=sfq name=wireless-default sfq-allot=1514 \
    sfq-perturb=5
set synchronous-default kind=red name=synchronous-default red-avg-packet=1000 \
    red-burst=20 red-limit=60 red-max-threshold=50 red-min-threshold=10
set hotspot-default kind=sfq name=hotspot-default sfq-allot=1514 sfq-perturb=5
add kind=pcq name=pcq-download pcq-classifier=dst-address pcq-limit=20 \
    pcq-rate=0 pcq-total-limit=1000
add kind=pcq name=pcq-upload pcq-classifier=src-address pcq-limit=20 \
    pcq-rate=0 pcq-total-limit=1000
set default-small kind=pfifo name=default-small pfifo-limit=10

Untuk bandwidth management hanya trafik upstream dan downstream dari dan ke internet melalui koneksi dua speedy yang diatur. Nama packetnya adalah clients-up untuk trafik upstream dan clients-down untuk downstream. Ada pun pengaturan bandwidthnya sbb:

Bandwidth Downstream
Root
  - Ceiling  : 3500kbps
  - Rate     :     0kbps
Client
  - Ceiling  : 3500kbps
  - Rate     :      0kbps

Bandwidth Upstream
Root
  - Ceiling  : 512kbps
  - Rate     :    0kbps
Client
  - Ceiling  : 512kbps
  - Rate     :    0kbps

/queue tree
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
    max-limit=512k name=UPSTREAM parent=global-out priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
    max-limit=512k name=clients-up packet-mark=clients-up parent=\
    UPSTREAM priority=1 queue=pcq-upload
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
    max-limit=3500k name=DOWNSTREAM parent=global-out priority=8
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 \
    max-limit=3500k name=clients-down packet-mark=clients-down parent=\
    DOWNSTREAM priority=1 queue=pcq-download

/system clock
set time-zone-name=Asia/Jakarta

/system clock manual
set dst-delta=+00:00 dst-end="jan/01/1970 00:00:00" dst-start=\
    "jan/01/1970 00:00:00" time-zone=+00:00

/tool graphing interface
add allow-address=0.0.0.0/0 disabled=no interface=CBN store-on-disk=yes
add allow-address=0.0.0.0/0 disabled=no interface=SPEEDY1 store-on-disk=yes
add allow-address=0.0.0.0/0 disabled=no interface=SPEEDY2 store-on-disk=yes
add allow-address=0.0.0.0/0 disabled=no interface=LAN store-on-disk=yes
add allow-address=0.0.0.0/0 disabled=no interface=SERVER store-on-disk=yes

/tool graphing resource
add allow-address=0.0.0.0/0 disabled=no store-on-disk=yes

Berikut ini script-script untuk load balancing dan fail over speedy. Penjelasan fungsi-fungsi script ada di bagian bawah:

1. param
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#
# param
#
#
# Jumlah wan
#
:global wans 2;
#
# Interface speedy
#   1. SPEEDY1
#   2. SPEEDY2
#
:global iface "ETH-SPEEDY1, ETH-SPEEDY2";
#
# Nama koneksi
#
:global wan "SPEEDY1, SPEEDY2";
#
# Scoring
#
# No  speedy1  speedy2
# 0   off      off
# 2   on       off
# 4   off      on
# 6   on       on
:global scrs "2,4";
:global SCORE 0;

Penjelasan:
  1. Variable global iface untuk menyimpan nama interface ethernet mikrotik yang terhubung ke modem ADSL speedy.
  2. Variable global wan untuk menyimpan nama interface pppoe client (mikrotik) ke koneksi internet speedy.
  3. Variable SCORE untuk menyimpan status koneksi yang berlangsung.
    • SCORE 0 berarti semua speedy tidak online.
    • SCORE 2 berarti hanya speedy1 yang online.
    • SCORE 4 berarti hanya speedy2 yang online.
    • SCORE 6 berarti hanya kedua speedy online bersamaan.
2. lb-detection
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#
# lb-detection
#
:global SCORE;
:global wans;
:global scrs;
:global iface;
:global wan;
:local scrArr [:toarray $scrs];
:local ifaceArr [:toarray $iface];
:local wanArr [:toarray $wan];
:local score 0;
:local nth 0;
:local ifaceStatus "";
:local wanStatus "";
:for x from=1 to="$wans" \
do={ :local wanIface [:pick $ifaceArr ($x-1)];
     :local wanName [:pick $wanArr ($x-1)];
     /interface ethernet monitor "$wanIface" once do={ :set ifaceStatus $status };
     :if ( $ifaceStatus="link-ok" ) \
     do { /interface pppoe-client monitor "$wanName" once do={:set wanStatus $status };
          :if ( $wanStatus="connected" ) \
          do { :set score ($score+[:pick $scrArr ($x-1)]); :set nth ($nth+1);
             } else { :log warning "$wanName is disconnected"; }
        } else { :log warning "$wanIface is down"; }
   };
#:put $score;
#
:if ($SCORE!=$score) \
do { :local ptr [ /system logging find topics="info"];
   /system logging disable $ptr;
   :if ($score=6) do { /system script run LB_SPEEDY; }
   :if ($score=4) do { /system script run SPEEDY2; }
   :if ($score=2) do { /system script run SPEEDY1; }
   /system logging enable $ptr;
};
#
:set SCORE $score;
:put $SCORE;

Penjelasan:
  1. Baris 4-8 membaca variable global yang telah dideklarasikan sewaktu booting dan melalui eksekusi script seperti variable SCORE.
  2. Baris 9-15 mendeklarasikan variable local.
  3. Baris 17-27 adalah inti dari load balancing detection.
    • Pertama mikrotik mendeteksi apakah link ke interface modem adsl (ETH-SPEEDY1 atau ETH-SPEEDY2) menunjukkan link-ok atau tidak. Jika tidak maka koneksi melalui modem ADSL tersebut dianggap putus seraya menampilkan pesan log interface_name is down dan tidak perlu cek koneksi internet speedy . Jika link ok maka lanjut ke langkah di bawah ini.
    • Selanjutnya mikrotik melihat status koneksi internet speedy jika menunjukkan connected maka nilai score bertambah 1. Jika statusnya disconnected mikrotik akan menampilkan isi log “PPPoE_Client_Name is disconnected”.
  4. Baris 30-37, mikrotik akan menjalankan salah satu script ini, LB_SPEEDY, SPEEDY1 atau SPEEDY2, hanya jika nilai score baru berbeda dengan nilai SCORE lama.
  5. Baris 39-40 nilai score baru disimpan ke variable global SCORE.

3. LB_SPEEDY
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#
# LB_SPEEDY
#
# Hapus rule-rule mangle lama berdasarkan isi comment
/ip firewall mangle remove [ find comment="LB_PCC_NTH_Proxy"];
/ip firewall mangle remove [ find comment="LB_PCC_NTH_Clients"];
#
# Tambahkan rule-rule mangle baru
/ip firewall mangle
#
# LB_PCC_NTH_Proxy
#
#add action=mark-connection chain=prerouting comment=LB_PCC_NTH_Proxy \
#    connection-state=new disabled=no dst-address-list=!local \
#    dst-address-type=!local new-connection-mark=speedy1_pr_con passthrough=\
#    yes per-connection-classifier=both-addresses:2/0 src-address-list=\
#    server-proxy
add action=mark-connection chain=prerouting comment=LB_PCC_NTH_Proxy \
    connection-state=new disabled=no dst-address-list=!local \
    new-connection-mark=speedy1_pr_con nth=2,1 passthrough=\
    yes src-address-list=server-proxy
add action=mark-routing chain=prerouting comment="LB_PCC_NTH_Proxy" connection-mark=\
    speedy1_pr_con disabled=no dst-address-list=!local new-routing-mark=\
    speedy1 passthrough=no src-address-list=server-proxy
#add action=mark-connection chain=prerouting comment=LB_PCC_NTH_Proxy \
#    connection-state=new disabled=no dst-address-list=!local \
#    dst-address-type=!local new-connection-mark=speedy2_pr_con passthrough=\
#    yes per-connection-classifier=both-addresses:1/0 src-address-list=\
#    server-proxy
add action=mark-connection chain=prerouting comment=LB_PCC_NTH_Proxy \
    connection-state=new disabled=no dst-address-list=!local \
    new-connection-mark=speedy2_pr_con nth=1,1 passthrough=\
    yes src-address-list=server-proxy
add action=mark-routing chain=prerouting comment="LB_PCC_NTH_Proxy" connection-mark=\
    speedy2_pr_con disabled=no dst-address-list=!local new-routing-mark=\
    speedy2 passthrough=no src-address-list=server-proxy
#
# LB_PCC_NTH_Clients
#
add action=mark-connection chain=prerouting comment=LB_PCC_NTH_Clients \
    connection-state=new disabled=no dst-address-list=!local \
    dst-address-type=!local new-connection-mark=speedy1_con passthrough=yes \
    per-connection-classifier=both-addresses:2/0 src-address-list=lan
add action=mark-routing chain=prerouting comment="LB_PCC_NTH_Clients" connection-mark=\
    speedy1_con disabled=no dst-address-list=!local new-routing-mark=speedy1 \
    passthrough=no src-address-list=lan
add action=mark-connection chain=prerouting comment=LB_PCC_NTH_Clients \
    connection-state=new disabled=no dst-address-list=!local \
    dst-address-type=!local new-connection-mark=speedy2_con passthrough=yes \
    per-connection-classifier=both-addresses:1/0 src-address-list=lan
add action=mark-routing chain=prerouting comment="LB_PCC_NTH_Clients" connection-mark=\
    speedy2_con disabled=no dst-address-list=!local new-routing-mark=speedy2 \
    passthrough=no src-address-list=lan
#
/queue tree {
set DOWNSTREAM max-limit=3500k
set UPSTREAM max-limit=512k
}

4. SPEEDY1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#
# SPEEDY1
#
# Hapus rule-rule mangle lama berdasarkan isi comment
/ip firewall mangle remove [ find comment="LB_PCC_NTH_Proxy"];
/ip firewall mangle remove [ find comment="LB_PCC_NTH_Clients"];
#
# Tambahkan rule-rule mangle baru
/ip firewall mangle
#
# LB_PCC_NTH_Proxy
#
add action=mark-connection chain=prerouting comment=LB_PCC_NTH_Proxy \
    connection-state=new disabled=no dst-address-list=!local \
    new-connection-mark=speedy1_pr_con passthrough=\
    yes src-address-list=server-proxy
add action=mark-routing chain=prerouting comment="LB_PCC_NTH_Proxy" connection-mark=\
    speedy1_pr_con disabled=no dst-address-list=!local new-routing-mark=\
    speedy1 passthrough=no src-address-list=server-proxy
#
# LB_PCC_NTH_Clients
#
add action=mark-connection chain=prerouting comment=LB_PCC_NTH_Clients \
    connection-state=new disabled=no dst-address-list=!local \
    new-connection-mark=speedy1_con passthrough=yes \
    src-address-list=lan
add action=mark-routing chain=prerouting comment="LB_PCC_NTH_Clients" connection-mark=\
    speedy1_con disabled=no dst-address-list=!local new-routing-mark=speedy1 \
    passthrough=no src-address-list=
#
/queue tree {
set DOWNSTREAM max-limit=1750k
set UPSTREAM max-limit=256k
}

5. SPEEDY2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#
# SPEEDY2
#
#
/ip firewall mangle remove [ find comment="LB_PCC_NTH_Proxy"];
/ip firewall mangle remove [ find comment="LB_PCC_NTH_Clients"];
/ip firewall mangle
#
# LB_PCC_NTH_Proxy
#
add action=mark-connection chain=prerouting comment=LB_PCC_NTH_Proxy \
    connection-state=new disabled=no dst-address-list=!local \
    new-connection-mark=speedy2_pr_con passthrough=\
    yes src-address-list=server-proxy
add action=mark-routing chain=prerouting comment="LB_PCC_NTH_Proxy" connection-mark=\
    speedy2_pr_con disabled=no dst-address-list=!local new-routing-mark=\
    speedy2 passthrough=no src-address-list=server-proxy
#
# LB_PCC_NTH_Clients
#
add action=mark-connection chain=prerouting comment=LB_PCC_NTH_Clients \
    connection-state=new disabled=no dst-address-list=!local \
    new-connection-mark=speedy2_con passthrough=yes \
    src-address-list=lan
add action=mark-routing chain=prerouting comment="LB_PCC_NTH_Clients" connection-mark=\
    speedy2_con disabled=no dst-address-list=!local new-routing-mark=speedy2 \
    passthrough=no src-address-list=lan
#
/queue tree {
set DOWNSTREAM max-limit=1750k
set UPSTREAM max-limit=256k
}

Penjelasan:
  1. Saat mikrotik booting maka script param akan dieksekusi. Script ini menyimpan beberapa variable global dan penilaian atau scoring jumlah koneksi speedy yang online (tersambung ke internet). Nilai atau score 0 berarti semua speedy tidak online, 2 berarti speedy1 yang online, 4 hanya speedy2 yang online dan 6 jika semua speedy online. Mengapa perlu scoring? Tujuannya adalah agar seusai script lb-detection dijalankan setiap 30 detik maka hanya jika ada perubahan koneksi, salah satu dari script di bawah ini yang akan dijalankan:
    • LB_SPEEDY jika 2 speedy online bersamaan.
    • SPEEDY1 jika hanya speedy1 yang online.
    • SPEEDY2 jika hanya speedy2 yang online.
    Misal pertama kali semua speedy online, 30 detik kemudian script lb-detection dieksekusi, mikrotik melihat bahwa tidak ada perubahan koneksi alias SCORE baru tidak berbeda dengan SCORE lama, scriptLB_SPEEDY tidak akan dijalankan. Sekian menit atau jam kemudian salah satu koneksi speedy ada yang putus maka mikrotik akan meng-eksekusi salah satu script, SPEEDY1 atau SPEEDY2, karena melihat SCORE baru berbeda dengan SCORE lama.
  2. Script LB_SPEEDY akan menjalankan load balancing nth dan pcc dengan dua koneksi speedy.
  3. Script SPEEDY1 akan menjalankan koneksi ke internet dengan jalur speedy1.
  4. Script SPEEDY2 akan menjalankan koneksi ke internet dengan jalur speedy2.
Dan ini schedule untuk menjalankan script di atas:
/system scheduler
#
# Script param akan dijalankan setiap mikrotik reboot
#
add comment="" disabled=no interval=0s name=startup-param on-event=param \
    policy=reboot,write,test start-time=startup
#
# Script lb-detectio (load balancing detection) dijalankan setiap 30 detik
#
add comment="" disabled=no interval=30s name=speedy-detection on-event=\
    lb-detection policy=reboot,read,write,test start-date=jan/01/1970 \
    start-time=00:00:10

Tool netwatch untuk monitoring koneksi dari mikrotik ke interface speedy:

/tool netwatch
add comment="interface speedy2" disabled=no down-script="" host=\
    192.168.2.254 interval=30s timeout=1s up-script=""
add comment="interface speedy1" disabled=no down-script="" host=\
    192.168.1.254 interval=30s timeout=1s up-script=""