Performance natd di freebsd
Sewaktu saya mensetting natd dengan ipfw/divert di FreeBSD, pada saat traffik padat dan jumlah pc LAN semakin besar kerja Processor juga menjadi semakin berat. menhakibatkan performance router jadi turun juga.
solusi yang bisa di pakai adalah dengan menggunakan ipnat. Perbedaan antara natd dengan ipnat adalah :
- Natd adalah userland process, sehingga akan banyak memakai resources system sewaktu harus komunikasi dengan kernel
- sedangkan ipnat di load di kernel, dan berjalan lebih cepat. [man inat]
Konfigurasi IPNAT
Pertama kita perlu setting mesin Freebsd agar menjalankan ipnat dan berfungsi sebagai gateway.
Tambahkan baris berikut di file /etc/rc.conf :
gateway_enable="YES" ipfilter_enable="YES" ipnat_enable="YES" ipnat_rules="/etc/ipnat.rules"
Kemudian kita perlu membuat file ipnat.rules . di bawah saya sertakan contohnya:
### --------------------------------------------------------------------- # Sample /etc/ipnat.rules by tunggul # Jul 24 19:10:12 PST 2008 # # Load this like: # ipnat -C -f /etc/ipnat.conf # /etc/rc.d/ipnat start (will delete active sessions...) # ### --------------------------------------------------------------------- ### --------------------------------------------------------------------- ### Contoh untuk meredirect port webserver ### Ubah 'fxp0' sesuai dengan ethernet anda. ### --------------------------------------------------------------------- rdr fxp0 69.22.154.11/32 port 80 -> 10.1.1.2 port 80 tcp rdr fxp0 69.22.154.12/32 port 80 -> 10.1.1.3 port 80 tcp rdr fxp0 69.22.154.13/32 port 80 -> 10.1.1.5 port 80 tcp rdr fxp0 69.22.154.11/32 port 443 -> 10.1.1.2 port 443 tcp rdr fxp0 69.22.154.12/32 port 443 -> 10.1.1.3 port 443 tcp rdr fxp0 69.22.154.13/32 port 443 -> 10.1.1.5 port 443 tcp rdr fxp0 69.22.154.11/32 port 22 -> 10.1.1.2 port 22 tcp ### --------------------------------------------------------------------- ### Example Outgoing Mapping ### All out going requests from the internal 10.1.1.0/24 network ### will appear to be coming from 69.22.154.14 ### --------------------------------------------------------------------- map fxp0 10.1.1.0/24 -> 69.22.154.14/32 ### --------------------------------------------------------------------- ### Example Round Robin load balancer ### --------------------------------------------------------------------- # www.monkeybrains.net 69.22.154.65 rdr fxp0 69.22.154.65/32 port 80 -> 10.1.101.65 port 80 tcp round-robin rdr fxp0 69.22.154.65/32 port 80 -> 10.1.102.65 port 80 tcp round-robin rdr fxp0 69.22.154.65/32 port 80 -> 10.1.103.65 port 80 tcp round-robin
Konigurasi jumlah Maksimal Active Sessions
Sewaktu pertama kali setting ipnat, router jadi tidak bisa respon karena maksimal koneksi untuk client cuman 30.000 mappings. Untuk melihat jumlah mapping saat ini dengan perintah : ipnat -s .
# ipnat -s mapped in 105990558 out 100799549 added 13276971 expired 0 no memory 0 bad nat 731 inuse 24837 rules 34 wilds 0
Pertanyaan selanjutnya berapa kita harus setting koneksi untuk ipnat ? untuk mengecek gunakan perintah berikut :
# ipf -T list | grep nattable ipf_nattable_sz min 0x1 max 0x7fffffff current 2047 ipf_nattable_max min 0x1 max 0x7fffffff current 30000
Untuk mensetting bisa dilakaukan dengan dua cara :
- Cara yang susah dengan recompile ipfilter:
/usr/src/sys/modules/ipfilter && make clean
make -DLARGE_NAT depend && make -DLARGE_NAT && make install - Cara yang mudah dengan menambah variabel di ipfilter.
Set /etc/rc.conf:ipfilter_enable="YES" ipfilter_rules="/etc/ipf.rules" ipfilter_flags="-D -T ipf_nattable_sz=10009,ipf_nattable_max=300000 -E" ipnat_enable="YES" ipnat_rules="/etc/ipnat.rules"
Setelah mengubah file /etc/rc.conf, restart ipfilter
Sekarang anda bisa menghandle sampai 300,000 NAT Mappings. gunakan ipnat -l untuk melihat session yang aktif.
Setting agar waktu Timeouts kecil
Setting ini berfungsi memperkecil TCP session timeout untuk NAT sessions. Sehingga bisa meningkatkan jumlah Maximum Active Sessions yang bisa di handle per time. Ubah setting ipfilter_flags di file /etc/rc.conf:
ipfilter_flags=”-D -T ipf_nattable_sz=10009,ipf_nattable_max=300000,\ fr_tcptimeout=180,fr_tcpclosewait=60,fr_tcphalfclosed=7200,fr_tcpidletimeout=172800 -E”