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.
*Uraian panjang di atas hanyalah kata sambutan sodara-sodara…*
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
| net.inet.ip.forwarding=1 |
1
2
3
4
5
| # /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.
01
02
03
04
05
06
07
08
09
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
| # /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 blahblahblah@telkom.net 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 blahblahblah2@telkom.net set authkey vikingboneksamasaja add! default HISADDR enable dns enable mssfixup |
1
2
| # ifconfig sk0 up # ifconfig sk1 up |
1
2
| # ppp -ddial pppoe0 # ppp -ddial pppoe1 |
1
2
3
4
5
6
7
| # 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 |
1
2
3
4
5
| # netstat -nr |more Routing tables Internet: Destination Gateway Flags Refs Use Mtu Interface default 125.163.72.1 UGS 7 17529 - tun0 |
1
2
3
4
| # cat /etc/resolv.conf lookup file bind nameserver 202.134.2.5 nameserver 203.130.196.5 |
1
2
| # /etc/rc.conf pf=”YES” |
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| # /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 |
1
2
| ifconfig sk0 up ifconfig sk1 up |
1
2
| 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
Jika harus me-restart koneksi DSL Speedy, pastikan pppoe dimatikan dulu
1
| # pkill ppp |
Jika tidak, maka ppp akan membuat tunneling baru menjadi tun2, tun3 dan seterusnya.
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.
0 comments:
Post a Comment