Перейти до

Щейпер и переключние между каналами ...


Рекомендованные сообщения

Есть два канала интернета... нужно настроить онконект так, что бы при тарифе "трафф" инет брался с первого канала , а при " анлим" со второго... и при этом резалась скорость

 

Инет берётся по средствам PPPoE ( первое подключение к каналу с трафиком ppp0 ( 77.77.77.1 ) , второе ppp1 ( 77.77.77.2)) сетевуха которая смотрит в сеть eth0

 

Щас и анлим и траффик берутся с ppp0 , а нужно разграничить.

 

Вот пример скриптов которые сейчас

 

OnConnect

#!/bin/bash

# Login
LOGIN=$1

#user IP
ip=$2

#cash
CASH=$3

#user ID
ID=$4
eth=ppp0
eth_local=eth0
mir=77.77.77.1
tarif=`/etc/stargazer/tarif.php $2`

iptables -t filter -A FORWARD -s $ip -j QUEUE
iptables -t filter -A FORWARD -d $ip -j QUEUE

prioid="${ID}0"

if [ "$tarif" = "traff-64" ]; then
speed=64
elif [ "$tarif" = "traff-128" ]; then
speed=128
elif [ "$tarif" = "anlim-64" ]; then
speed=64
elif [ "$tarif" = "anlim-128" ]; then
speed=128
else
speed=64
fi

if [ $speed != 0 ]; then

  tc class add dev $eth_local parent 1:1 classid 1:${prioid} htb rate $speed'kbit' burst 20k
  tc filter add dev $eth_local parent 1: protocol ip prio ${prioid} u32 match ip dst $ip flowid 1:${prioid}
fi

  iptables -t nat -A POSTROUTING -s $ip -d 0.0.0.0/0  -j MASQUERADE > /dev/null

echo $1 $2 $prioid $speed $tarif >> `date +"%Y/%m/%d-%T"` >> /var/log/stg/connect.log

 

OnDisconnect

	
#!/bin/bash

# Login
LOGIN=$1

#user IP
ip=$2

#cash
CASH=$3

#user ID
ID=$4
eth=ppp0
eth_local=eth0

iptables -t filter -D FORWARD -s $ip -j QUEUE > /dev/null
while [ $? -eq 0 ]
do
  iptables -t filter -D FORWARD -s $ip -j QUEUE > /dev/null
done

iptables -t filter -D FORWARD -d $ip -j QUEUE > /dev/null
while [ $? -eq 0 ]
do
  iptables -t filter -D FORWARD -d $ip -j QUEUE > /dev/null
done


iptables -t nat -D POSTROUTING -s $ip -d 0.0.0.0/0 -j MASQUERADE > /dev/null
while [ $? -eq 0 ]
do
  iptables -t nat -D POSTROUTING -s $ip -d 0.0.0.0/0 -j MASQUERADE > /dev/null
  iptables -t nat -D POSTROUTING -s $ip -o $eth -j SNAT --to-source $mir > /dev/null
done


tc filter del dev $eth_local pref ${prioid}
while [ $? -eq 0 ]
do
tc filter del dev $eth_local pref ${prioid}
done
tc class del dev $eth_local classid 1:${prioid}
while [ $? -eq 0 ]
do
tc class del dev $eth_local classid 1:${prioid}
done
echo $1 `date +"%Y/%m/%d-%T"` >> /var/log/stg/disconnect.log

Ссылка на сообщение
Поделиться на других сайтах

Сделать две таблицы маршрутизации: traff и unlim. В первой прописать маршрут по умолчанию через ppp0, во второй - через ppp1.

В скриптах модифицировать список правил, по которым пакеты попадают в таблицы.

man ip

Пример:

# ip ru a from 10.0.0.2 table traff

# ip ru a from 10.0.0.3 table unlim

# ip r r default via 77.77.77.1 table traff

# ip r r default via 77.77.77.2 table unlim

Ссылка на сообщение
Поделиться на других сайтах

20 баксов отдай авторам или нуждающимся.

 

1. Первоначальная настройка таблиц маршрутизации:

 

#!/bin/bash

P0_NET=192.168.1.0/24
IF0=eth1

IF1=eth1
IP1=192.168.25.1
P1=192.168.25.2
P1_NET=192.168.25.0/24

IF2=eth2
IP2=192.168.3.1
P2=192.168.3.2
P2_NET=192.168.3.0/24

#clear tables&routes

ip route flush table T1
ip route flush table T2

ip rule del from $IP1 table T1
ip rule del from $IP2 table T2

ip route add $P1_NET dev $IF1 src $IP1 table T1
ip route add default via $P1 table T1
ip route add $P2_NET dev $IF2 src $IP2 table T2
ip route add default via $P2 table T2

ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2 

ip rule add from $IP1 table T1
ip rule add from $IP2 table T2

#local routes for other tables
ip route add $P0_NET	 dev $IF0 table T1
ip route add $P1_NET	 dev $IF1 table T2
ip route add $P2_NET	 dev $IF2 table T1

#loopback
ip route add 127.0.0.0/8 dev lo   table T1
ip route add 127.0.0.0/8 dev lo   table T2

#default route
ip route add default via $P1

 

Где:

P0_NET - подсеть, смотрящая на клиентов,

IF0 - интерфейс, смотрящий на клиентов

 

IF1 - фейс, смотрящий на 1 шлюз,

IP1 - айпи фейса IF1,

P1 - адрес шлюза

P1_NET - подсеть шлюза

 

IF2 и прочее - аналогично.

 

У меня номер канала выбирается из юзердата1

Скрипты:

 

в конект строки:

 

tableR=$(grep -i "^Userdata1=" /var/stargazer/users/$LOGIN/conf | cut -f 2 -d"=")
table=$(echo $tableR | grep "^[0-9]*[0-9]$")

if [ -n "$table" ]
then
ip rule add from $IP table T"$table"
fi

if [ "$table" = "2" ]
then
iptables -t nat -A POSTROUTING -s $IP -o eth2 -j SNAT --to-source 192.168.3.1
else
iptables -t nat -A POSTROUTING -s $IP -o $int_iface -j SNAT --to-source 192.168.25.1
fi

 

дисконект:

 

tableR=$(grep -i "^Userdata1=" /var/stargazer/users/$LOGIN/conf | cut -f 2 -d"=")
table=$(echo $tableR | grep "^[0-9]*[0-9]$")

if [ -n "$table" ]
then
ip rule del from $IP table T"$table"
fi

if [ "$table" = "2" ]
then
iptables -t nat -D POSTROUTING -s $IP -o eth2 -j SNAT --to-source 192.168.3.1
else
iptables -t nat -D POSTROUTING -s $IP -o $int_iface -j SNAT --to-source 192.168.25.1
fi

 

Ну и не забыть в /etc/iproute2/rt_tables добавить след. строки:

 

200 T1
201 T2

 

в самый конец файла.

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...