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”