Hello Mailpluser...

pengin iseng2 ah... ;)


Banyak pertanyaan dari teman-teman, terutama para operator warnet, admin 
jaringan sekolah/kampus dan korporasi tentang load balancing dua atau lebih 
koneksi internet. Cara praktikal sebenarnya banyak dijumpai jika kita cari di 
internet, namun banyak yang merasa kesulitan pada saat diintegrasikan. Penyebab 
utamanya adalah karena kurang mengerti konsep jaringan, baik di layer 2 atau di 
layer 3 protokol TCP/IP. Dan umumnya dual koneksi, atau multihome lebih banyak 
diimplementasikan dalam protokol BGP. Protokol routing kelas ISP ke atas, bukan 
protokol yang dioprek-oprek di warnet atau jaringan kecil.

Berikut beberapa konsep dasar yang sering memusingkan:

1. Unicast
Protokol dalam trafik internet yang terbanyak adalah TCP, sebuah komunikasi 
antar host di internet (praktiknya adalah client-server, misal browser anda 
adalah client maka google adalah server). Trafik ini bersifat dua arah, client 
melakukan inisiasi koneksi dan server akan membalas inisiasi koneksi tersebut, 
dan terjadilah TCP session (SYN dan ACK).

2. Destination-address
Dalam jaringan IP kita mengenal router, sebuah persimpangan antara network 
address dengan network address yang lainnya. Makin menjauh dari pengguna 
persimpangan itu sangat banyak, router-lah yang mengatur semua trafik tersebut. 
Jika dianalogikan dengan persimpangan di jalan, maka rambu penunjuk jalan 
adalah routing table. Penunjuk jalan atau routing table mengabaikan “anda 
datang dari mana”, cukup dengan “anda mau ke mana” dan anda akan diarahkan ke 
jalan tepat. Karena konsep inilah saat kita memasang table routing cukup dengan 
dua parameter, yaitu network address dan gateway saja.

3. Source-address
Source-address adalah alamat IP kita saat melakukan koneksi, saat paket menuju 
ke internet paket akan melewati router-router ISP, upstream provider, backbone 
internet dst hingga sampai ke tujuan (SYN). Selanjutnya server akan membalas 
koneksi (ACK) sebaliknya hingga kembali ke komputer kita. Saat server membalas 
koneksi namun ada gangguan saat menuju network kita (atau ISPnya) maka komputer 
kita sama sekali tidak akan mendeteksi adanya koneksi. Seolah-olah putus total, 
walaupun kemungkinan besar putusnya koneksi hanya satu arah.

4. Default gateway
Saat sebuah router mempunyai beberapa interface (seperti persimpangan, ada 
simpang tiga, simpang empat dan simpang lima) maka tabel routing otomatis akan 
bertambah, namun default router atau default gateway hanya bisa satu. Fungsinya 
adalah mengarahkan paket ke network address yang tidak ada dalam tabel routing 
(network address 0.0.0.0/0).

5. Dua koneksi
Permasalahan umumnya muncul di sini, saat sebuah router mempunyai dua koneksi 
ke internet (sama atau berbeda ISP-nya). Default gateway di router tetap hanya 
bisa satu, ditambah pun yang bekerja tetap hanya satu. Jadi misal router NAT 
anda terhubung ke ISP A melalui interface A dan gateway A dan ke ISP B melalui 
interface B dan gateway B, dan default gateway ke ISP A, maka trafik downlink 
hanya akan datang dari ISP A saja. Begitu juga sebaliknya jika dipasang default 
gateway ke ISP B.

Bagaimana menyelesaikan permasalahan tersebut?
Konsep utamanya adalah source-address routing. Source-address routing ibaratnya 
anda dicegat di persimpangan oleh polisi dan polisi menanyakan “anda dari 
mana?” dan anda akan ditunjukkan ke jalur yang tepat.

Pada router NAT (atau router pada umumnya), source-address secara default tidak 
dibaca, tidak dipertimbangkan. Jadi pada kasus di atas karena default gateway 
ke ISP A maka NAT akan meneruskan paket sebagai paket yang pergi dari IP 
address interface A (yang otomatis akan mendapat downlink dari ISP A ke 
interface A dan diteruskan ke jaringan dalam).

Dalam jaringan yang lebih besar (bukan NAT), source-address yang melewati 
network lain disebut sebagai transit (di-handle dengan protokol BGP oleh ISP). 
Contoh praktis misalnya anda membeli bandwidth yang turun dari satelit melalui 
DVB, namun koneksi uplink menggunakan jalur terestrial (dial-up, leased-line 
atau fixed-wireless). Dalam kasus ini paket inisiasi koneksi harus menjadi 
source-address network downlink DVB, agar bandwidth downlink dari internet 
mengarah DVB receiver, bukan ke jalur terestrial.

Di lingkungan Linux, pengaturan source-address bisa dilakukan oleh iproute2. 
Iproute2 akan bekerja sebelum diteruskan ke table routing. Misal kita mengatur 
dua segmen LAN internal agar satu segmen menjadi source-address A dan satu 
segmen lainnya menjadi source-address B, agar kedua koneksi ke ISP terutilisasi 
bersamaan.

Penerapan utilisasi dua koneksi tersebut bisa mengambil tiga konsep, yaitu 
round-robin, loadbalance atau failover.

6. Round-robin
Misalkan anda mempunyai tiga koneksi internet di satu router NAT, koneksi 
pertama di sebut Batman, koneksi kedua disebut Baskin dan koneksi ketiga 
disebut Williams, maka konsep round-robin adalah sang Robin akan selalu 
berpindah-pindah secara berurutan mengambil source-address (bukan random). 
Misal ada satu TCP session dari komputer di jaringan internal, maka koneksi TCP 
tersebut tetap di source-address pertama hingga sesi TCP selesai (menjadi 
Batman & Robin). Saat TCP session Batman & Robin tersebut belum selesai, ada 
ada request koneksi baru dari jaringan, maka sang Robin akan mengambil 
source-address koneksi berikutnya, menjadi Baskin & Robin. Dan seterusnya sang 
Robin akan me-round-round setiap koneksi tanpa memperhatikan penuh atau 
tidaknya salah satu koneksi.

Pasti anda sedang pusing membaca kalimat di atas, atau sedang tertawa 
terbahak-bahak.

7. Loadbalance
Konsep loadbalance mirip dengan konsep round-robin di atas, hanya saja sang 
Robin dipaksa melihat utilisasi ketiga koneksi tersebut di atas. Misalkan 
koneksi Batman & Robin serta Baskin & Robin sudah penuh, maka koneksi yang 
dipilih yang lebih kosong, dan koneksi yang diambil menjadi Robin Williams. 
Request koneksi berikutnya kembali sang Robin harus melihat dulu utilisasi 
koneksi yang ada, apakah ia harus menjadi Batman & Robin, Baskin & Robin atau 
Robin Williams, agar semua utilisasi koneksi seimbang, balance.

8. Failover
Konsep fail-over bisa disebut sebagai backup otomatis. Misalkan kapasitas link 
terbesar adalah link Batman, dan link Baskin lebih kecil. Kedua koneksi 
tersebut terpasang online, namun koneksi tetap di satu link Batman & Robin, 
sehingga pada saat link Batman jatuh koneksi akan berpindah otomatis ke link 
Baskin, menjadi Baskin & Robin hingga link Batman up kembali.

=========================================================================

Tools NAT yang mempunyai ketiga fitur di atas adalah Packet Firewall (PF) di 
lingkungan BSD, disebut dengan nat pool. Saya belum menemukan implementasi yang 
bagus (dan cukup mudah) di Linux dengan iproute2.

=========================================================================

Berikut contoh implementasi load balance dua koneksi sesuai judul di atas. 
Dijalankan di mesin OpenBSD sebagai NAT router dengan dua koneksi DSL Telkom, 
interface ethernet sk0 dan sk1.

1. Aktifkan forwarding di /etc/sysctl.conf

net.inet.ip.forwarding=1

2. Pastikan konfigurasi interface dan default routing kosong, hanya filename 
saja

# /etc/hosts.sk0
# /etc/hosts.sk1
# /etc/hostname.sk0
# /etc/hostname.sk1
# /etc/mygate

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

# /etc/ppp/ppp.conf
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 sk0"
        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 [EMAIL PROTECTED]
        set authkey asaljangandejek
        add! default HISADDR
        enable dns
        enable mssfixup
pppoe1:
        set device "!/usr/sbin/pppoe -i sk1"
        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 [EMAIL PROTECTED]
        set authkey vikingboneksamasaja
        add! default HISADDR
        enable dns
        enable mssfixup

3. Aktifkan interface sk0 dan sk1

# ifconfig sk0 up
# ifconfig sk1 up

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

# ppp -ddial pppoe0
# ppp -ddial pppoe1

5. Jika koneksi Speedy berhasil, IP address dari Speedy akan di-binding di 
interface tunneling tun0 dan tun1

# 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

6. Dan default gateway akan aktif

# netstat -nr |more
Routing tables
Internet:
Destination        Gateway            Flags    Refs      Use    Mtu  Interface
default            125.163.72.1       UGS         7    17529      -   tun0

7. Serta konfigurasi resolver DNS pun akan terisi

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

8. Aktifkan Packet Firewall pf

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

9. Script Packet Firewall NAT dan balancing dengan round-robin (ganti 
round-robin dengan loadbalance jika lebih sesuai dengan kebutuhan anda). Baris 
yang di-indent masih termasuk baris di atasnya. Entah kenapa tag <pre> malah 
menghilangkan karakter backslash (\).

# /etc/pf.conf
lan_net = "10.0.0.0/8"
int_if  = "vr0"
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

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

ifconfig sk0 up
ifconfig sk1 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.

11. Untuk memantau fungsi nat pool round-robin di atas bekerja atau tidak, bisa 
menggunakan tools pftop yang bisa diambil di 
http://www.eee.metu.edu.tr/~canacar/pftop/

Jika anda mengoptimasikan koneksi jaringan juga dengan menggunakan proxy, 
misalnya Squid, maka proxy Squid jangan dipasang juga di mesin router NAT 
tersebut, sebab saat Squid mengakses halaman web ke internet; oleh PF dianggap 
bukan sebagai koneksi NAT, jadi tidak akan di-balance, dan akan stay mengambil 
interface utama dan default gateway pertama. Simpanlah mesin proxy/squid di 
belakang router NAT, agar koneksi proxy ke internet menjadi trafik NAT yang 
akan di-balance oleh script PF di atas.

–


*thx to hardani* ;)

===============================  
www.oprekpc.com/forum/
www.warungplus.com
www.driverlib.com
www.oprekblog.com

                 


------------------------------------

Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/mailplus/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/mailplus/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:[EMAIL PROTECTED] 
    mailto:[EMAIL PROTECTED]

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/

Kirim email ke