Господа ГУРУ, помогите разобраться с такой ситуацией:Есть сервер CentOs 5.5, две сетевые карты: eth0 - локалка; eth1 - Internet.
Требуется: сделать балансировку сессий между двумя провайдерами
Сделал так:
к eth1 привязал ip адрес 1-го провайдера, к eth1:1 ip второго.
Поскаольку в CenOs 5.5 в iptables нет модуля statistic, установил версию 1.4.9.1 из www.netfilter.org как написано в INSTALL, предварительно сделав yum erase iptables:
$ ./configure --prefix=/
$ make
# make install
Далее в /etc/iproute2/rt_tables дописал таблицу: 201 nartel
cat /etc/rc.d/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
t2="nartel"
gw2="192.168.11.29"
gw2="192.168.55.1"
ip1="192.168.11.49"
ip2="192.168.55.50"
net1="192.168.11.0/24"
net2="192.168.55.0/24"
touch /var/lock/subsys/local
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
ip route add $net2 dev eth1 proto kernel scope link src $ip2 table $t2
ip route add $net1 dev eth1 table $t2
ip route add 127.0.0.0/8 dev lo table $t2
ip route add default via $gw2 table $t2
ip rule add prio 51 fwmark 2 table $t2
ip route flush cache
В таком состоянии пакеты ходят и все доступно, но балансировки нет.
Скрипт для балансировки такой:
IPT=/sbin/iptables
IPTS=/sbin/iptables-save
localnet="192.168.7.0/24"
#ip0 - local ip
ip0="192.168.7.100"
#ip1 ip2 - public ip
ip1="192.168.11.49"
ip2="192.168.55.50"
#net_addr
ip1_net="192.168.11.0/24"
ip2_net="192.168.55.0/24"
# На данном этапе разрешено всем все
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t mangle -F
$IPT -t mangle -F NEW_OUT_CONN
$IPT -t mangle -X NEW_OUT_CONN
$IPT -P OUTPUT ACCEPT
$IPT -P INPUT ACCEPT
$IPT -P FORWARD ACCEPT
# STATE RULES
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#Addition balance rules
$IPT -t mangle -N NEW_OUT_CONN
$IPT -t mangle -A NEW_OUT_CONN -m statistic --mode random --probability 0.40 -j RETURN
$IPT -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 2
$IPT -t mangle -A PREROUTING -d $ip1_net -j RETURN
$IPT -t mangle -A PREROUTING -d $ip2_net -j RETURN
$IPT -t mangle -A PREROUTING -s $ip1_net -m state --state new,related -j NEW_OUT_CONN
$IPT -t mangle -A PREROUTING -s $ip1_net -j CONNMARK --restore-mark
$IPT -t mangle -A PREROUTING -s $ip2_net -m state --state new,related -j NEW_OUT_CONN
$IPT -t mangle -A PREROUTING -s $ip2_net -j CONNMARK --restore-mark
$IPT -t mangle -A OUTPUT -d $ip1_net -j RETURN
$IPT -t mangle -A OUTPUT -d $ip2_net -j RETURN
$IPT -t mangle -A OUTPUT -s $ip1_net -m state --state new,related -j NEW_OUT_CONN
$IPT -t mangle -A OUTPUT -s $ip1_net -j CONNMARK --restore-mark
$IPT -t mangle -A OUTPUT -s $ip2_net -m state --state new,related -j NEW_OUT_CONN
$IPT -t mangle -A OUTPUT -s $ip2_net -j CONNMARK --restore-mark
Судя по статьям с open.net такая конфигурация должна работать с двумя сетевыми картами, направленными на провайдеров. У меня не работает если посылать запросы из eth0.
Если дальше указать $IPT -t nat -A POSTROUTING -o eth1 -j MASQUERADE , то все пакеты уходят на eth1 на шлюз по умолчанию.
Господа ГУРУ, подскажите, где я проврался, уже неделю мучаю гугл - не могу найти рабочего решения.