Kamis, 15 Januari 2009

Load Balance 2 Speedy dengan OpenBSD

Bagaimana menggabungkan 2 line speedy dalam 1 LAN? Udah disiapin 1 komputer buat router dengan spek P4 dual core, ram 512Mb (sebenernya masih kurang untuk proxy server), HD 80G Sata, Lan Card 2 + 1 Onboard.
Nah tadinya rencananya sih mau pake mikrotik, eh malah dikasih HD SATA. Secara mikrotik 2.9.27 kan belum bisa pake SATA. Berbekal dari artikel itu akhirnya aku gunakan OpenBSD.
1. Install OpenBSD
Partisi HD 80G
5G /
1G swap
40G /cache #untuk cache squid proxy
10G /usr
10G /var
5G /tmp
sisa /home

Set instalasi
[X] bsd
[X] bsd.rd
[X] bsd.mp
[X] base41.tgz
[X] etc41.tgz
[X] misc41.tgz
[X] comp41.tgz
[X] man41.tgz
Disini aku menyertakan set bsd.mp karena menggunakan multi processor (p4 dual core).

selesai, reboot. kemudian mount cd openBSD untuk mengcopy source dan paket yang akan digunakan untuk mengcompile kernel kelak.
#mount /dev/cd0a /mnt
#tar -zxvf /mnt/packages/src.tar.gz -C /usr/src
#tar -zxvf /mnt/packages/sys.tar.gz -C /usr/src
#pkg_add -v /mnt/packages/dmassage-0.6.tgz #untuk menyesuaikan kernel dengan dmesg saat compile.
#pkg_add -v /mnt/packages/nano-2.0.3.tgz #text editor
#pkg_add -v /mnt/packages/ifstat-1.1p0.tgz
#pkg_add -v /mnt/packages/nmap-4.11p1.tgz
#pkg_add -v /mnt/packages/oidentd-2.0.7p1.tgz
#pkg_add -v /mnt/packages/pfstat-2.2p0.tgz
#pkg_add -v /mnt/packages/pftop-0.5.tgz

Catatan: Paket-paket yang diinstal sesuaikan dengan kebutuhan. Juga dapat diinstal melalui Port.

2. Compile Kernel
#cd /usr/src/sys/arch/i386/conf
#dmassage -s GENERIC >SKYNET
#nano -w SKYNET
tinggal sesuaikan sesuai hardware kita
tambahkan option berikut untuk optimasi squid diskd
option BUFCACHEPERCENT=15
option MSGMNB=16384
option MSGMNI=60
option MSGSEG=4096
option MSGSSZ=64
option MSGTQL=1024

kemudian keluar dan save.
#config SKYNET
#cd ../compile/SKYNET
#make clean && make depend && make
#rm -rf /usr/obj/*
#cd /usr/src
#make obj
#cd /usr/src/etc && env DESTDIR=/ make distrib-dirs
#cd /usr/src
#make build
tinggal tidur dulu, biasanya memakan waktu 3 jam.
setelah selesai kita ganti kernel kita
#cp /bsd /bsd.bak
#cp /usr/src/sys/arch/i386/compile/SKYNET/bsd /bsd
#reboot
untuk mengecek gunakan
#uname -a
harusnya kernel GENERIC sudah berubah menjadi SKYNET

3. Konfigurasi
Saya menggunakan konfigurasi sesuai artikelnya mas Yulian. Tinggal disesuaikan interface dan IP addressnya.
a. Aktifkan forwarding di /etc/sysctl.conf

net.inet.ip.forwarding=1
atau dengan
sysctl -w net.inet.ip.forwarding=1

b. Pastikan konfigurasi interface dan default routing kosong, hanya filename saja
Disini saya menggunakan card dari realtek
# /etc/hosts.rl0
# /etc/hosts.rl1
# /etc/hostname.rl0
# /etc/hostname.rl1
# /etc/mygate

Konfigurasi ethernet local /rl2
#touch /etc/hostname.rl2
#nano -w /etc/hostname.rl2
inet 192.168.1.100 255.255.255.0 NONE
media 100baseTX mediaopt full-duplex
description “ke LAN dan Gateway client”

Script koneksi DSL Speedy, pppoe0 untuk koneksi pertama dan pppoe1 untuk koneksi kedua. Sesuaikan interface, username dan passwordnya. Jangan lupa, gunakan indent tab.

# mv /etc/ppp/ppp.conf /etc/ppp/ppp.conf.bak
#touch /etc/ppp/ppp.conf
#nano -w /etc/ppp/ppp.conf
isi dengan=
default:
set log Phase Chat LCP IPCP CCP tun command
set redial 15 0
set reconnect 15 10000
pppoe0:
set device “!/usr/sbin/pppoe -i rl0″
disable acfcomp protocomp
deny acfcomp
set mtu max 1492
set mru max 1492
set crtscts off
set speed sync
enable lqr
set lqrperiod 5
set cd 5
set dial
set login
set timeout 0
set authname blahblahblah@telkom.net #nama
set authkey asaljangandejek #password
add! default HISADDR
enable dns
enable mssfixup
pppoe1:
set device “!/usr/sbin/pppoe -i rl1″
disable acfcomp protocomp
deny acfcomp
set mtu max 1492
set mru max 1492
set crtscts off
set speed sync
enable lqr
set lqrperiod 5
set cd 5
set dial
set login
set timeout 0
set authname blahblahblah2@telkom.net
set authkey vikingboneksamasaja
add! default HISADDR
enable dns
enable mssfixup

c. Aktifkan interface rl0 dan rl1

# ifconfig rl0 up
# ifconfig rl1 up

d. Jalankan PPPoE, Point to Point Protocol over Ethernet.

# ppp -ddial pppoe0
# ppp -ddial pppoe1

e. Jika koneksi Speedy berhasil, IP address dari Speedy akan di-binding di interface tunneling tun0 dan tun1
Disini saya tidak memasukkan hasil ifconfig saya, tapi ini cuma sebagai perbandingan aja. Sebagai catatan diperlukan waktu untuk dial ke speedy jadi ifconfig seperti ini tidak langsung keluar.
# ifconfig
tun0: flags=8051 mtu 1492
groups: tun egress
inet 125.xxx.xxx.113 –> 125.163.72.1 netmask 0xffffffff
tun1: flags=8051 mtu 1492
groups: tun
inet 125.xxx.xxx.114 –> 125.163.72.1 netmask 0xffffffff

f. Dan default gateway akan aktif

# netstat -nr |more
uttuk melihat list routing

g. Serta konfigurasi resolver DNS pun akan terisi secara otomatis

# cat /etc/resolv.conf
lookup file bind
nameserver 202.134.2.5
nameserver 203.130.196.5

h. Aktifkan Packet Firewall pf

# /etc/rc.conf
pf=”YES”

i. Script Packet Firewall NAT dan balancing dengan round-robin
#nano -w /etc/pf.conf
lan_net = “10.0.0.0/8″ #IP client
int_if = “rl2″ #interface LAN
ext_if1 = “tun0″
ext_if2 = “tun1″
ext_gw1 = “125.163.72.1″
ext_gw2 = “125.163.72.1″
# scrub all
scrub in all
# nat outgoing connections on each internet interface
nat on $ext_if1 from $lan_net to any -> ($ext_if1)
nat on $ext_if2 from $lan_net to any -> ($ext_if2)
# pass all outgoing packets on internal interface
pass out on $int_if from any to $lan_net
# pass in quick any packets destined for the gateway itself
pass in quick on $int_if from $lan_net to $int_if
# load balance outgoing tcp traffic from internal network.
pass in on $int_if route-to \
{ ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin \
proto tcp from $lan_net to any flags S/SA modulate state
# load balance outgoing udp and icmp traffic from internal network
pass in on $int_if route-to \
{ ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin \
proto { udp, icmp } from $lan_net to any keep state
# general “pass out” rules for external interfaces
pass out on $ext_if1 proto tcp from any to any flags S/SA modulate state
pass out on $ext_if1 proto { udp, icmp } from any to any keep state
pass out on $ext_if2 proto tcp from any to any flags S/SA modulate state
pass out on $ext_if2 proto { udp, icmp } from any to any keep state

j. Aktifkan script yang diperlukan di /etc/rc.local agar setiap reboot langsung bekerja.

ifconfig rl0 up
ifconfig rl1 up
# aktifkan speedy
ppp -ddial pppoe0
ppp -ddial pppoe1

PF akan langsung bekerja membaca /etc/pf.conf.
Jika harus me-restart koneksi DSL Speedy, pastikan pppoe dimatikan dulu

# pkill ppp

Jika tidak, maka ppp akan membuat tunneling baru menjadi tun2, tun3 dan seterusnya.

4. DHCP Server
Karena ga mau repot setting client aku juga disuruh pake DHCP untuk koneksi dari client.
Aktifkan service DHCP
#nano -w /etc/rc.local
ubah dhcpd_flags=NO menjadi dhcpd_flags=”"

Menentukan interface yang akan digunakan
#nano -w /etc/dhcpd.interfaces
rl2 #interface LAN

Konfigurasi DHCP
rubah sesuai dengan keperluan
#nano -w /etc/dhcpd.conf
option domain-name “gw.sky.net”
option domain-name-servers 203.xxx.xxx.xxx, 203.xxx.xxx.xxx; #diisi dengan DNS
subnet 192.168.1.0 netmask 255.255.255.0
{
option routers 192.168.1.100; # gateway komputer client
range 192.168.1.1 192.168.1.64; #range ip yang digunakan client
}

keluar, save, reboot…………

Untuk setting load balance dan DHCP selesai. Untuk proxy sesuaikan dengan kebutuhan. Tinggal tambahkan redirector pada pf.conf ke port dan ip squid (tentunya jika kita menggunakan squid proxy, kalo tidak ga perlu).
Tambahkan rule berikut pada pf.conf , letakkan setelah rule nat.

rdr on $int_if proto tcp from any to any port 80 -> 192.168.1.100 port 3128

untuk mengecek pf gunakan command
pfctl -f /etc/pfctl #merestart
pfctl -sq #mengecek
pfctl -vvsq #monitoring
pfctl -sn #cek rule

1 komentar:

Unknown mengatakan...

Mas gimana kalo pake ipfw untuk load balance nya ?
udah ngoprek kemana mana, blom ada jawaban dari si mesin...
mohon pencerahan