« WebService::TimeLine公開しました | メイン | Tugela Cacheを使ってみる »

LVS/TUN without iptables

IP tunnelingを利用したLVSで、VIPをリアルサーバで処理するために、iptablesを使ってましたが、iptablesのip_conntrack_max(nf_conntrack_max)とかが気になる(気になる程度、限界はわからない)なので、iptablesを使わない方法を調べてみました

iptablesを使ったパターンでは、redirectを使います。
tunl0にethXのIPを割り当てて起動し、VIP宛のパケットを受け取る設定になります

IF0=`/sbin/ifconfig eth0 | grep 'inet addr:' | awk {'print $2'} | head -1 | cut -d ':' -f 2`
/sbin/ifconfig tunl0 $IF1 netmask 255.255.255.255 up
/sbin/iptables -t nat -A PREROUTING -d $VIP -j REDIRECT


iptableを使わない場合、Kernel 2.6.5以降では、arpリクエストへの変更をkernelパラメータのarp_ignoreとarp_annunceで設定できますので、こちらを使います。
この場合、tunl0にはVIPを割り当てます。

VIP=192.168.1.1
/sbin/ifconfig tunl0 $VIP netmask 255.255.255.255 broadcast $VIP up
echo 1 > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/tunl0/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce


arp_ignoreとarp_announceについての解説
http://kb.linuxvirtualserver.org/wiki/Using_arp_announce/arp_ignore_to_disable_ARP

LVS/TUNではなく、DSRの場合は
http://request-timeout.net/%E8%B2%A0%E8%8D%B7%E5%88%86%E6%95%A3/lvs