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