Wednesday, April 30, 2008

Load Balancing Router With Ubuntu Server

Dengan semakin kompleks-nya jaringan, terkadang kita memiliki beberapa sambungan ke Internet sekaligus. Saya sendiri di rumah memiliki dua (2) sambungan ke Internet sekaligus, yaitu, ADSL Speedy dan RT/RW-net. Agar kedua sambungan ke Internet tersebut dapat dimanfaatkan secara maksimal, kita perlu melakukan load balancing dengan 2 sambungan tersebut agar secara paralel akses Internet dapat dilakukan.

Spesifikasi / topologi jaringan yang saya gunakan di rumah adalah sebagai berikut

Sambungan ADSL melalui eth2 IP address 192.168.1.222 dengan gateway router ADSL pada IP 192.168.1.1.

Sambungan RT/RW-net melalui eth0 IP address 10.0.148.48 melalui WiFi / Wireless dengan gateway 10.0.148.254.




Sambungan LAN melalui eth1 IP address 192.168.0.222.

Langkah instalasi router adalah sebagai berikut.

Masukan CD / DVD Ubuntu installer, pilih “install a command line system”

Set password root supaya kita dapat menjalankan perintah “su” melalui perintah

$ sudo passwd root

Pindah mode menjadi Super User

# su -

Edit informasi interface pada file /etc/network/interfaces, dapat dilakukan menggunakan vi

# vi /etc/network/interfaces

Informasi penting yang perlu di-edit pada file interfaces adalah

auto eth0
iface eth0 inet static
address 10.0.148.48
netmask 255.255.255.0

auto eth1
iface eth1 inet static
address 192.168.0.222
netmask 255.255.255.0

auto eth2
iface eth2 inet static
address 192.168.1.222
netmask 255.255.255.0

Install beberapa aplikasi pendukung agar memudahkan hidup anda seperti

# apt-get install openssh-server
# /etc/init.d/ssh restart

Selanjutnya kita perlu menset routing dan load balancing yang secara sederhana adalah sebagai berikut

/sbin/ip link set lo up
/sbin/ip link set eth0 up
/sbin/ip link set eth1 up
/sbin/ip link set eth2 up

/sbin/ip route flush table adsl
/sbin/ip route flush table rtrwnet
/sbin/ip route flush table internet

/sbin/ip addr add 127.0.0.1/8 brd 127.0.0.255 dev lo

/sbin/ip addr add 192.168.1.222/24 brd 192.168.1.255 dev eth2
# /sbin/ip addr add 10.0.148.48/24 brd 10.0.148.255 dev eth0
/sbin/ip addr add 192.168.0.222/24 brd 192.168.0.255 dev eth1

/sbin/ip rule add prio 10 table main
/sbin/ip rule add prio 20 table adsl
/sbin/ip rule add prio 30 table rtrwnet
/sbin/ip rule add prio 40 table internet

/sbin/ip route del default table main
/sbin/ip route del default table adsl
/sbin/ip route del default table rtrwnet
/sbin/ip route del default table internet

/sbin/ip rule add prio 20 from 192.168.1.0/24 table adsl
/sbin/ip route add default via 192.168.1.1 dev eth2 src 192.168.1.222 proto static table adsl
/sbin/ip route append prohibit default table adsl metric 1 proto static

/sbin/ip rule add prio 30 from 10.0.148.0/24 table rtrwnet
/sbin/ip route add default via 10.0.148.254 dev eth0 src 10.0.148.48 proto static table rtrwnet
/sbin/ip route append prohibit default table rtrwnet metric 5 proto static

# Set up load balancing gateways
/sbin/ip rule add prio 40 table internet
/sbin/ip route add default proto static table internet \
nexthop via 192.168.1.1 dev eth2 weight 1 \
nexthop via 10.0.148.254 dev eth0 weight 1

Konfigurasi di atas membutuhkan tiga (3) tabel routing tambahan, yaitu, adsl, rtrwnet dan internet yang kita masukan dalam file /etc/iproute2/rt_tables, isinya kira-kira sbb,

120 adsl
121 rtrwnet
123 internet

Selanjutnya kita perlu menset NAT / proxy agar dapat sekaligus melakukan NAT ke dua (2) interface yang berbeda, yaitu, 192.168.1.222 dan 10.0.148.48. Adapun perintahnya adalah sebagai berikut,

/bin/echo 1 > /proc/sys/net/ipv4/ip_forward

/sbin/iptables -F
/sbin/iptables -P INPUT DROP
/
/sbin/iptables -A INPUT -i eth1 -j ACCEPT
/sbin/iptables -A INPUT -i eth0 -p tcp -s 0/0 –dport 25 -j ACCEPT
/sbin/iptables -A INPUT -i eth2 -p tcp -s 0/0 –dport 25 -j ACCEPT
/sbin/iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -p tcp -i eth0 -j REJECT –reject-with tcp-reset
/sbin/iptables -A INPUT -p tcp -i eth2 -j REJECT –reject-with tcp-reset
/sbin/iptables -A INPUT -p udp -i eth0 -j REJECT –reject-with icmp-port-unreachable
/sbin/iptables -A INPUT -p udp -i eth2 -j REJECT –reject-with icmp-port-unreachable

/sbin/iptables -t nat -A POSTROUTING -o eth2 -j SNAT –to 192.168.1.222
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j SNAT –to 10.0.148.48

moga bermanfaat :)

Saturday, April 26, 2008

IPtables Startup Pada Ubuntu Linux

Alhamdulillah, dapet juga pemecahan masalah buat iptables startup di ubuntu. mulanya kirain aku pikir sama kayak bapak nya "Debian" yang cuman simpen script di if-up.d aja :) ini adalah script nya
yang sebenernya script ini diadopsi dari iptables script nya gentoo.


#!/bin/sh
#
#This is a ubuntu adapted iptables script from gentoo
#(http://www.gentoo.org) which was originally distributed
# under the terms of the GNU General Public License v2
#and was Copyrighted 1999-2004 by the Gentoo Foundation
#
#This adapted version was intended for and ad-hoc personal
#situation and as such no warranty is provided.

IPTABLES_SAVE=”/etc/default/iptables-rules”
SAVE_RESTORE_OPTIONS=”-c”
SAVE_ON_STOP=”yes”

checkrules() {
if [ ! -f ${IPTABLES_SAVE} ]
then
echo “Not starting iptables. First create some rules then run”
echo “\”/etc/init.d/iptables save\”"
return 1
fi
}

save() {
echo “Saving iptables state”
/sbin/iptables-save ${SAVE_RESTORE_OPTIONS} > ${IPTABLES_SAVE}
}

start(){
checkrules || return 1
echo “Loading iptables state and starting firewall”
echo -n “Restoring iptables ruleset”
start-stop-daemon –start –quiet –exec /sbin/iptables-restore — ${SAVE_RESTORE_OPTIONS} < ${IPTABLES_SAVE}
}

case “$1″ in
save)
save
echo “.”
;;

start)
start
echo “.”
;;
stop)
if [ “${SAVE_ON_STOP}” = “yes” ]; then
save || exit 1
fi
echo -n “Stopping firewall”
for a in `cat /proc/net/ip_tables_names`; do
/sbin/iptables -F -t $a
/sbin/iptables -X -t $a

if [ $a == nat ]; then
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t nat -P OUTPUT ACCEPT
elif [ $a == mangle ]; then
/sbin/iptables -t mangle -P PREROUTING ACCEPT
/sbin/iptables -t mangle -P INPUT ACCEPT
/sbin/iptables -t mangle -P FORWARD ACCEPT
/sbin/iptables -t mangle -P OUTPUT ACCEPT
/sbin/iptables -t mangle -P POSTROUTING ACCEPT
elif [ $a == filter ]; then
/sbin/iptables -t filter -P INPUT ACCEPT
/sbin/iptables -t filter -P FORWARD ACCEPT
/sbin/iptables -t filter -P OUTPUT ACCEPT
fi
done
start-stop-daemon –stop –quiet –pidfile /var/run/iptables.pid –exec /sbin/iptables
echo “.”
;;

restart)
echo -n “Flushing firewall”
for a in `cat /proc/net/ip_tables_names`; do
/sbin/iptables -F -t $a
/sbin/iptables -X -t $a
done;
start
echo “.”
;;
*)
echo “Usage: /etc/init.d/iptables {start|stop|restart|save}” >&2
exit 1
;;
esac

exit 0

Moga Bermanfaat :)