LINUX.ORG.RU
ФорумAdmin

Балансировка 4х pppoe подключений.


0

2

Добрый день. Есть 1 сервер с Debian, к которому подключены 4 канала от провайдера и 1 из локалки. Провайдер раздает нет через pppoe. Нужно сбалансировать эти 4 подключения и раздавать инет определенным юзерам. Сначала я смотрел в сторону bounding, но понял, что с ppp он не работает.Скажите хотя бы ключевые слова, куда копать, а то я что-то совсем потерялся. Точнее меня интересует, как сделать нат из локалки на все 4 канала сразу же.

Ответ на: комментарий от uspen

Спасибо, читаю, понимаю. И еще вопрос. Раздавть я получается буду через нат, а как выбрать тех, кому именно раздаю и ограничить их по скорости? В сети статические адреса.

NetIvanov
() автор топика
Ответ на: комментарий от NetIvanov

по второй ссылке можешь метить пакеты по src ip, а не все подряд. по скорости гугли lartc или как по-быстрому htb.init

uspen ★★★★★
()
Ответ на: комментарий от NetIvanov

В общем я курил статьи, и из этого http://lartc.org/howto/lartc.rpdb.multiple-links.html и этого http://unixforum.org/index.php?showtopic=117996

Я попытался переделать скрипт,

#!/bin/sh
exit
echo ""
echo "= BEGIN ROUTING =============================================="

#определяем переменные
IF0="eth0"               #локальная сеть
IF1="ppp0"              #провайдер 1
IF2="ppp1"              #провайдер 2
IF3="ppp2"              #провайдер 3
IF4="ppp3"              #провайдер 4

IP0=`ip ro s | grep -e "$IF0 *proto" | awk '{print $9}' | head -1`                  #ip адрес eth0
IF0_NET=`echo $IP0 | awk 'BEGIN{FS="."}{print $1"."$2"."$3".0"}'`               #локальная сеть

#проверка присутствия таблиц T1 и T2 в /etc/iproute2/rt_tables
if [ -z "`cat /etc/iproute2/rt_tables | grep T1`" ]; then
    echo "100   T1" >> /etc/iproute2/rt_tables  # создаем T1
fi
if [ -z "`cat /etc/iproute2/rt_tables | grep T2`" ]; then
    echo "101   T2" >> /etc/iproute2/rt_tables  # создаем T2
fi
if [ -z "`cat /etc/iproute2/rt_tables | grep T3`" ]; then
    echo "102   T3" >> /etc/iproute2/rt_tables  # создаем T3
fi
if [ -z "`cat /etc/iproute2/rt_tables | grep T4`" ]; then
    echo "103   T4" >> /etc/iproute2/rt_tables  # создаем T4
fi

ip route add 127.0.0.0/8 dev lo table T1
ip route add 127.0.0.0/8 dev lo table T2
ip route add 127.0.0.0/8 dev lo table T3
ip route add 127.0.0.0/8 dev lo table T4

Del_default_route(){
    while [ -n "`ip route list | grep default`" ]; do
        ip route del default
    done
}

Del_tables(){
    while [ -n "`ip rule ls | grep T1`" ]; do
        ip rule del table T1
    done
    while [ -n "`ip rule ls | grep T2`" ]; do
        ip rule del table T2
    done
    while [ -n "`ip rule ls | grep T3`" ]; do
        ip rule del table T3
    done
    while [ -n "`ip rule ls | grep T4`" ]; do
        ip rule del table T4
    done
}


init_iface1(){
    IP1=`ip ro s | grep -e "$IF1 *proto" | awk '{print $9}' | head -1`     #ip адрес ppp0
    IP_P1=`ip ro s | grep -e "$IF1 *proto" | awk '{print $1}' | head -1`   #шлюз ppp0
    P1_NET=`echo $IP_P1 | awk 'BEGIN{FS="."}{print $1"."$2"."$3".0"}'` #сеть шлюза ppp0
    ip route add $P1_NET dev $IF1 src $IP1 table T1
    ip route add default via $IP_P1 table T1
    ip route add $P1_NET dev $IF1 src $IP1
    ip rule add from $IP1 table T1
    ip route add $P0_NET dev $IF0 table T1
    ip route add $P1_NET dev $IF1 table T2
}

init_iface2(){
    IP2=`ip ro s | grep -e "$IF2 *proto" | awk '{print $9}' | head -1`      #ip адрес ppp1
    IP_P2=`ip ro s | grep -e "$IF2 *proto" | awk '{print $1}' | head -1`      #шлюз ppp1
    P2_NET=`echo $IP_P2 | awk 'BEGIN{FS="."}{print $1"."$2"."$3".0"}'` #сеть шлюза ppp1
    ip route add $P2_NET dev $IF2 src $IP2 table T2
    ip route add default via $IP_P2 table T2
    ip route add $P2_NET dev $IF2 src $IP2
    ip rule add from $IP2 table T2
    ip route add $P0_NET dev $IF0 table T2
    ip route add $P2_NET dev $IF2 table T1
}
init_iface3(){
    IP3=`ip ro s | grep -e "$IF3 *proto" | awk '{print $9}' | head -1`      #ip адрес ppp2
    IP_P3=`ip ro s | grep -e "$IF3 *proto" | awk '{print $1}' | head -1`      #шлюз ppp2
    P3_NET=`echo $IP_P3 | awk 'BEGIN{FS="."}{print $1"."$2"."$3".0"}'` #сеть шлюза ppp1
    ip route add $P3_NET dev $IF3 src $IP3 table T3
    ip route add default via $IP_P3 table T3
    ip route add $P3_NET dev $IF3 src $IP3
    ip rule add from $IP3 table T3
    ip route add $P0_NET dev $IF0 table T3
    ip route add $P3_NET dev $IF3 table T1
}

init_iface2(){
    IP4=`ip ro s | grep -e "$IF4 *proto" | awk '{print $9}' | head -1`      #ip адрес ppp3
    IP_P4=`ip ro s | grep -e "$IF4 *proto" | awk '{print $1}' | head -1`      #шлюз ppp3
    P4_NET=`echo $IP_P4 | awk 'BEGIN{FS="."}{print $1"."$2"."$3".0"}'` #сеть шлюза ppp3
    ip route add $P4_NET dev $IF4 src $IP4 table T4
    ip route add default via $IP_P4 table T4
    ip route add $P4_NET dev $IF4 src $IP4
    ip rule add from $IP4 table T4
    ip route add $P4_NET dev $IF0 table T4
    ip route add $P4_NET dev $IF4 table T1
}


  
			# Удалить старые таблицы
       			Del_tables

        		Инициализируем таблицы
        		init_iface1
        		init_iface2
			init_iface3
			init_iface4
        		# Удаляем старый маршрут
        		Del_default_route

        		# Балансировка
        		#ip route add default scope global nexthop via $IP_P1 dev $IF1 weight 1 \
        		# nexthop via $IP_P2 dev $IF2 weight 1
        		ip route add default via $IP_P4
        		ip rule add fwmark 100 table T1         #все пакеты, которые имеют метку 10 маршрутизировать по таблице T1
        		ip rule add fwmark 101 table T2         #все пакеты, которые имеют метку 10 маршрутизировать по таблице T1
        		ip rule add fwmark 102 table T3         #все пакеты, которые имеют метку 10 маршрутизировать по таблице T1
        		ip rule add fwmark 103 table T4         #все пакеты, которые имеют метку 10 маршрутизировать по таблице T1

    		
# Сбросим кэш маршрутизации
ip route flush cache


echo "= END ROUTING =============================================="
echo ""

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

exit 0

вот только в самой балансировке у меня затык, она разве будет работать так, как надо на 4х подключениях? Заранее спасибо.

NetIvanov
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.