Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Балансировка каналов на основе src  (Прочитано 1273 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн fet4

  • Автор темы
  • Любитель
  • *
  • Сообщений: 75
    • Просмотр профиля
Балансировка каналов на основе src
« : 22 Сентября 2015, 13:02:07 »
Привет всем!
Долго искал решение балансировки каналов на основе src и вот наконец-то получилось самому сделать. В моем случае это балансировка исходящих соединений на 7 каналов, количество можно сделать любое. Дает относительно-равномерное распределение клиентов по каналам с привязкой src к каналу что очень важно для корректной маршрутизации.
Проверялось на iptables 1.4.21, ipset 6.23

# Создаем сеты
ipset create isp1 hash:ip timeout 120
ipset create isp2 hash:ip timeout 120
ipset create isp3 hash:ip timeout 120
ipset create isp4 hash:ip timeout 120
ipset create isp5 hash:ip timeout 120
ipset create isp6 hash:ip timeout 120
ipset create isp7 hash:ip timeout 120

# Создаем цепочку для распределения src по сетам
iptables -w -t mangle -N balancing
# Создаем цепочки для добавления в нужный сет
iptables -w -t mangle -N add_set_isp1
iptables -w -t mangle -N add_set_isp2
iptables -w -t mangle -N add_set_isp3
iptables -w -t mangle -N add_set_isp4
iptables -w -t mangle -N add_set_isp5
iptables -w -t mangle -N add_set_isp6
iptables -w -t mangle -N add_set_isp7
# Создаем цепочки для маркировки сетов
iptables -w -t mangle -N ipt_isp1
iptables -w -t mangle -N ipt_isp2
iptables -w -t mangle -N ipt_isp3
iptables -w -t mangle -N ipt_isp4
iptables -w -t mangle -N ipt_isp5
iptables -w -t mangle -N ipt_isp6
iptables -w -t mangle -N ipt_isp7

# Запускаем в цепочку балансировки тех кого нужно
iptables -w -t mangle -A PREROUTING -j balancing
# После балансировки запускаем на маркировку
iptables -w -t mangle -A PREROUTING -m set --match-set isp1 src -j ipt_isp1
iptables -w -t mangle -A PREROUTING -m set --match-set isp2 src -j ipt_isp2
iptables -w -t mangle -A PREROUTING -m set --match-set isp3 src -j ipt_isp3
iptables -w -t mangle -A PREROUTING -m set --match-set isp4 src -j ipt_isp4
iptables -w -t mangle -A PREROUTING -m set --match-set isp5 src -j ipt_isp5
iptables -w -t mangle -A PREROUTING -m set --match-set isp6 src -j ipt_isp6
iptables -w -t mangle -A PREROUTING -m set --match-set isp7 src -j ipt_isp7
# Копируем маркировку соединений в маркировку пакетов
iptables -w -t mangle -A PREROUTING -j CONNMARK --restore-mark

# Выгоняем тех кто уже в сетах
iptables -w -t mangle -A balancing -m set --match-set isp1 src -j RETURN
iptables -w -t mangle -A balancing -m set --match-set isp2 src -j RETURN
iptables -w -t mangle -A balancing -m set --match-set isp3 src -j RETURN
iptables -w -t mangle -A balancing -m set --match-set isp4 src -j RETURN
iptables -w -t mangle -A balancing -m set --match-set isp5 src -j RETURN
iptables -w -t mangle -A balancing -m set --match-set isp6 src -j RETURN
iptables -w -t mangle -A balancing -m set --match-set isp7 src -j RETURN
# Примерно равными частями пускаем пакеты по цепочкам добавления src в сеты
iptables -w -t mangle -A balancing -m statistic --mode random --probability 0.143 -j add_set_isp1
iptables -w -t mangle -A balancing -m statistic --mode random --probability 0.167 -j add_set_isp2
iptables -w -t mangle -A balancing -m statistic --mode random --probability 0.2 -j add_set_isp3
iptables -w -t mangle -A balancing -m statistic --mode random --probability 0.25 -j add_set_isp4
iptables -w -t mangle -A balancing -m statistic --mode random --probability 0.333 -j add_set_isp5
iptables -w -t mangle -A balancing -m statistic --mode random --probability 0.5 -j add_set_isp6
iptables -w -t mangle -A balancing -j add_set_isp7

#Добавляем в первый сет
iptables -w -t mangle -A add_set_isp1 -j SET --add-set isp1 src

#Выгоняем из цепочки если уже добавили в первый сет
iptables -w -t mangle -A add_set_isp2 -m set --match-set isp1 src -j RETURN
#Добавляем во второй сет
iptables -w -t mangle -A add_set_isp2 -j SET --add-set isp2 src

#Выгоняем из цепочки если уже добавили в первый и второй сет
iptables -w -t mangle -A add_set_isp3 -m set --match-set isp1 src -j RETURN
iptables -w -t mangle -A add_set_isp3 -m set --match-set isp2 src -j RETURN
#Добавляем в третий сет
iptables -w -t mangle -A add_set_isp3 -j SET --add-set isp3 src

И т.к. далее по аналогии
iptables -w -t mangle -A add_set_isp4 -m set --match-set isp1 src -j RETURN
iptables -w -t mangle -A add_set_isp4 -m set --match-set isp2 src -j RETURN
iptables -w -t mangle -A add_set_isp4 -m set --match-set isp3 src -j RETURN
iptables -w -t mangle -A add_set_isp4 -j SET --add-set isp4 src

iptables -w -t mangle -A add_set_isp5 -m set --match-set isp1 src -j RETURN
iptables -w -t mangle -A add_set_isp5 -m set --match-set isp2 src -j RETURN
iptables -w -t mangle -A add_set_isp5 -m set --match-set isp3 src -j RETURN
iptables -w -t mangle -A add_set_isp5 -m set --match-set isp4 src -j RETURN
iptables -w -t mangle -A add_set_isp5 -j SET --add-set isp5 src

iptables -w -t mangle -A add_set_isp6 -m set --match-set isp1 src -j RETURN
iptables -w -t mangle -A add_set_isp6 -m set --match-set isp2 src -j RETURN
iptables -w -t mangle -A add_set_isp6 -m set --match-set isp3 src -j RETURN
iptables -w -t mangle -A add_set_isp6 -m set --match-set isp4 src -j RETURN
iptables -w -t mangle -A add_set_isp6 -m set --match-set isp5 src -j RETURN
iptables -w -t mangle -A add_set_isp6 -j SET --add-set isp6 src

iptables -w -t mangle -A add_set_isp7 -m set --match-set isp1 src -j RETURN
iptables -w -t mangle -A add_set_isp7 -m set --match-set isp2 src -j RETURN
iptables -w -t mangle -A add_set_isp7 -m set --match-set isp3 src -j RETURN
iptables -w -t mangle -A add_set_isp7 -m set --match-set isp4 src -j RETURN
iptables -w -t mangle -A add_set_isp7 -m set --match-set isp5 src -j RETURN
iptables -w -t mangle -A add_set_isp7 -m set --match-set isp6 src -j RETURN
iptables -w -t mangle -A add_set_isp7 -j SET --add-set isp7 src

# Проставляем маркировку сетам
iptables -w -t mangle -A ipt_isp1 -j CONNMARK --set-mark 1
# Обновляем время таймаута src, если оно закончиться запись удаляется.
iptables -w -t mangle -A ipt_isp1 -j SET --add-set isp1 src --exist

iptables -w -t mangle -A ipt_isp2 -j CONNMARK --set-mark 2
iptables -w -t mangle -A ipt_isp2 -j SET --add-set isp2 src --exist

iptables -w -t mangle -A ipt_isp3 -j CONNMARK --set-mark 3
iptables -w -t mangle -A ipt_isp3 -j SET --add-set isp3 src --exist

iptables -w -t mangle -A ipt_isp4 -j CONNMARK --set-mark 4
iptables -w -t mangle -A ipt_isp4 -j SET --add-set isp4 src --exist

iptables -w -t mangle -A ipt_isp5 -j CONNMARK --set-mark 5
iptables -w -t mangle -A ipt_isp5 -j SET --add-set isp5 src --exist

iptables -w -t mangle -A ipt_isp6 -j CONNMARK --set-mark 6
iptables -w -t mangle -A ipt_isp6 -j SET --add-set isp6 src --exist

iptables -w -t mangle -A ipt_isp7 -j CONNMARK --set-mark 7
iptables -w -t mangle -A ipt_isp7 -j SET --add-set isp7 src --exist

# Маршрутизируем на основе меток
ip rule add fwmark 1 table isp1
ip rule add fwmark 2 table isp2
ip rule add fwmark 3 table isp3
ip rule add fwmark 4 table isp4
ip rule add fwmark 5 table isp5
ip rule add fwmark 6 table isp6
ip rule add fwmark 7 table isp7

Итого имеем:
root@srv-bill:~# ipset list isp1 | wc -l
103
root@srv-bill:~# ipset list isp2 | wc -l
118
root@srv-bill:~# ipset list isp3 | wc -l
91
root@srv-bill:~# ipset list isp4 | wc -l
101
root@srv-bill:~# ipset list isp5 | wc -l
110
root@srv-bill:~# ipset list isp6 | wc -l
107
root@srv-bill:~# ipset list isp7 | wc -l
100
« Последнее редактирование: 22 Сентября 2015, 13:09:11 от fet4 »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28469
    • Просмотр профиля
Re: Балансировка каналов на основе src
« Ответ #1 : 22 Сентября 2015, 20:45:29 »
Любопытно. И практически неисчерпаемо с точки зрения улучшения алгоритма распределения :D

Можно iptables-save (сразу после старта) под спойлер?
Для референса, так сказать.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн fet4

  • Автор темы
  • Любитель
  • *
  • Сообщений: 75
    • Просмотр профиля
Re: Балансировка каналов на основе src
« Ответ #2 : 22 Сентября 2015, 22:28:39 »
Пожалуйста.
root@srv-bill:~# iptables-save
# Generated by iptables-save v1.4.21 on Tue Sep 22 22:30:16 2015
*mangle
:PREROUTING ACCEPT [133:72314]
:INPUT ACCEPT [17:1652]
:FORWARD ACCEPT [116:70662]
:OUTPUT ACCEPT [15:2325]
:POSTROUTING ACCEPT [131:72987]
:add_set_isp1 - [0:0]
:add_set_isp2 - [0:0]
:add_set_isp3 - [0:0]
:add_set_isp4 - [0:0]
:add_set_isp5 - [0:0]
:add_set_isp6 - [0:0]
:add_set_isp7 - [0:0]
:balancing - [0:0]
:ipt_isp1 - [0:0]
:ipt_isp2 - [0:0]
:ipt_isp3 - [0:0]
:ipt_isp4 - [0:0]
:ipt_isp5 - [0:0]
:ipt_isp6 - [0:0]
:ipt_isp7 - [0:0]
-A PREROUTING -s 10.193.0.0/16 -i ppp+ -j NETFLOW
-A PREROUTING -s 10.193.0.0/16 -i ppp+ -j balancing
-A PREROUTING -m set --match-set isp1 src -j ipt_isp1
-A PREROUTING -m set --match-set isp2 src -j ipt_isp2
-A PREROUTING -m set --match-set isp3 src -j ipt_isp3
-A PREROUTING -m set --match-set isp4 src -j ipt_isp4
-A PREROUTING -m set --match-set isp5 src -j ipt_isp5
-A PREROUTING -m set --match-set isp6 src -j ipt_isp6
-A PREROUTING -m set --match-set isp7 src -j ipt_isp7
-A PREROUTING -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A POSTROUTING -d 10.193.0.0/16 -o ppp+ -j NETFLOW
-A add_set_isp1 -j SET --add-set isp1 src
-A add_set_isp2 -m set --match-set isp1 src -j RETURN
-A add_set_isp2 -j SET --add-set isp2 src
-A add_set_isp3 -m set --match-set isp1 src -j RETURN
-A add_set_isp3 -m set --match-set isp2 src -j RETURN
-A add_set_isp3 -j SET --add-set isp3 src
-A add_set_isp4 -m set --match-set isp1 src -j RETURN
-A add_set_isp4 -m set --match-set isp2 src -j RETURN
-A add_set_isp4 -m set --match-set isp3 src -j RETURN
-A add_set_isp4 -j SET --add-set isp4 src
-A add_set_isp5 -m set --match-set isp1 src -j RETURN
-A add_set_isp5 -m set --match-set isp2 src -j RETURN
-A add_set_isp5 -m set --match-set isp3 src -j RETURN
-A add_set_isp5 -m set --match-set isp4 src -j RETURN
-A add_set_isp5 -j SET --add-set isp5 src
-A add_set_isp6 -m set --match-set isp1 src -j RETURN
-A add_set_isp6 -m set --match-set isp2 src -j RETURN
-A add_set_isp6 -m set --match-set isp3 src -j RETURN
-A add_set_isp6 -m set --match-set isp4 src -j RETURN
-A add_set_isp6 -m set --match-set isp5 src -j RETURN
-A add_set_isp6 -j SET --add-set isp6 src
-A add_set_isp7 -m set --match-set isp1 src -j RETURN
-A add_set_isp7 -m set --match-set isp2 src -j RETURN
-A add_set_isp7 -m set --match-set isp3 src -j RETURN
-A add_set_isp7 -m set --match-set isp4 src -j RETURN
-A add_set_isp7 -m set --match-set isp5 src -j RETURN
-A add_set_isp7 -m set --match-set isp6 src -j RETURN
-A add_set_isp7 -j SET --add-set isp7 src
-A balancing -m set --match-set isp1 src -j RETURN
-A balancing -m set --match-set isp2 src -j RETURN
-A balancing -m set --match-set isp3 src -j RETURN
-A balancing -m set --match-set isp4 src -j RETURN
-A balancing -m set --match-set isp5 src -j RETURN
-A balancing -m set --match-set isp6 src -j RETURN
-A balancing -m set --match-set isp7 src -j RETURN
-A balancing -m statistic --mode random --probability 0.14300000016 -j add_set_isp1
-A balancing -m statistic --mode random --probability 0.16699999990 -j add_set_isp2
-A balancing -m statistic --mode random --probability 0.20000000019 -j add_set_isp3
-A balancing -m statistic --mode random --probability 0.25000000000 -j add_set_isp4
-A balancing -m statistic --mode random --probability 0.33300000010 -j add_set_isp5
-A balancing -m statistic --mode random --probability 0.50000000000 -j add_set_isp6
-A balancing -j add_set_isp7
-A ipt_isp1 -j CONNMARK --set-xmark 0x1/0xffffffff
-A ipt_isp1 -j SET --add-set isp1 src --exist
-A ipt_isp2 -j CONNMARK --set-xmark 0x2/0xffffffff
-A ipt_isp2 -j SET --add-set isp2 src --exist
-A ipt_isp3 -j CONNMARK --set-xmark 0x3/0xffffffff
-A ipt_isp3 -j SET --add-set isp3 src --exist
-A ipt_isp4 -j CONNMARK --set-xmark 0x4/0xffffffff
-A ipt_isp4 -j SET --add-set isp4 src --exist
-A ipt_isp5 -j CONNMARK --set-xmark 0x5/0xffffffff
-A ipt_isp5 -j SET --add-set isp5 src --exist
-A ipt_isp6 -j CONNMARK --set-xmark 0x6/0xffffffff
-A ipt_isp6 -j SET --add-set isp6 src --exist
-A ipt_isp7 -j CONNMARK --set-xmark 0x7/0xffffffff
-A ipt_isp7 -j SET --add-set isp7 src --exist
COMMIT
# Completed on Tue Sep 22 22:30:16 2015
# Generated by iptables-save v1.4.21 on Tue Sep 22 22:30:16 2015
*nat
:PREROUTING ACCEPT [6:589]
:INPUT ACCEPT [3:189]
:OUTPUT ACCEPT [3:210]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o ppp10001 -j MASQUERADE
-A POSTROUTING -o ppp10002 -j MASQUERADE
-A POSTROUTING -o vlan10 -j MASQUERADE
COMMIT
# Completed on Tue Sep 22 22:30:16 2015
# Generated by iptables-save v1.4.21 on Tue Sep 22 22:30:16 2015
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [49:12773]
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i vlan10 -j ACCEPT
-A INPUT -s 10.193.0.0/16 -i ppp+ -j ACCEPT
-A FORWARD -m set --match-set ALLOWED src -j ACCEPT
-A FORWARD -m set --match-set ALLOWED dst -j ACCEPT
COMMIT
# Completed on Tue Sep 22 22:30:16 2015

+

Небольшой скриптик если один из каналов упал. Его идея такова - пингуем через каждый канал, если потери, удаляем правило маршрутизации по метки канала и шлюз по-умолчанию в таблице дефолт. Трафик с меткой нерабочего канала пойдет по дефолту. Если пинг есть производим обратное действие.
#!/bin/bash

. /usr/net-conf/vars

for i in 1 2 3 4 5 6 7; do
  curtable=isp$i
  curint1=${curtable}_if
  curint2=${!curint1}
  curfwmark1=${curtable}_fwmark
  curfwmark2=${!curfwmark1}
  currule=$(ip rule | awk '/fwmark '$curfwmark2'/{print $7}')
  curip=$(ip a l $curint2 | grep "  inet " | head -n 1 | cut -d " " -f 6 | cut -d / -f 1)
  curdef=$(ip route | awk '/default/ && /'$curint2'/{print $5}')
  curgw=$(ip route show table $curtable | awk '/default/ && /'$curint2'/{print $3}')

  if ping -c4 -I $curip $pinghost; then
#     echo work
#     echo $curfwmark2
#     echo $currule
#     echo $curdef
#     echo $curgw

    if [ "$curtable" = "$currule" ]; then
        echo "ip rule yes"
     else
#        echo "add ip rule"
        ip rule add fwmark $curfwmark2 table $curtable prio $prio_mark
        ip route flush cache
     fi

     if [ "$curint2" = "$curdef" ]; then
        echo "default route yes"
     else
#        echo "add default route"
        ip route add default via $curgw dev $curint2 metric $i
        ip route flush cache
     fi

  else
#     echo not work
     if [ "$curtable" = "$currule" ]; then
#        echo "ip rule yes"
        ip rule del fwmark $curfwmark2
        ip route flush cache
     else
        echo "no ip rule"
     fi

     if [ "$curint2" = "$curdef" ]; then
#        echo "default route yes"
        ip route del default via $curgw dev $curint2
        ip route flush cache
     else
        echo "no default route"
     fi

  fi

done

exit 0


root@srv-bill:~# ip ru
0:      from all lookup local
1:      from all lookup static
10:     from **.**.0.254 lookup mngmt
10:     from **.**.69.67 lookup isp2
10:     from **.**.45.164 lookup isp1
20:     from all fwmark 0x2 lookup isp2
20:     from all fwmark 0x1 lookup isp1
32766:  from all lookup main
32767:  from all lookup default

root@srv-bill:~# ip r
default via **.**.**.12 dev ppp10001  metric 1
default via **.**.**.65 dev ppp10002  metric 2
10.193.0.1 dev ppp0  proto kernel  scope link  src 172.31.1.254
10.193.0.6 dev ppp1  proto kernel  scope link  src 172.31.1.254
172.19.0.0/24 dev vlan10  proto kernel  scope link  src 172.19.0.254
172.30.0.0/24 dev eth0  proto kernel  scope link  src 172.30.0.1
172.30.1.0/24 dev eth0  proto kernel  scope link  src 172.30.1.1
**.**.**.12 dev ppp10002  proto kernel  scope link  src **.**.69.67
**.**.**.65 dev ppp10001  proto kernel  scope link  src **.**.45.164
« Последнее редактирование: 22 Сентября 2015, 22:44:16 от fet4 »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28469
    • Просмотр профиля
Re: Балансировка каналов на основе src
« Ответ #3 : 23 Сентября 2015, 14:06:24 »
Я бы не удалял ничего, а вставлял правило, возвращающее немедленно из цепочки назначения упавшего канала.
Нет новых соединений, маркированных упавшим каналом - нет проблем.
Вот этот блок:
-A balancing -m statistic --mode random --probability 0.14300000016 -j add_set_isp1
-A balancing -m statistic --mode random --probability 0.16699999990 -j add_set_isp2
-A balancing -m statistic --mode random --probability 0.20000000019 -j add_set_isp3
-A balancing -m statistic --mode random --probability 0.25000000000 -j add_set_isp4
-A balancing -m statistic --mode random --probability 0.33300000010 -j add_set_isp5
-A balancing -m statistic --mode random --probability 0.50000000000 -j add_set_isp6
запихать по отдельным таблицам и делать
iptables -t mangle -I <chain> -j RETURN
при падении и при восстановлении
iptables -t mangle -D <chain> -j RETURN

Ну или ещё проще, если коэффициенты сохранены и грузятся из конфига,
iptables -t mangle -F <chain>
iptables -t mangle -A  <chain> <rule>

В этом случае и править коэффициенты при перебалансировке каналов проще, опять же - тупо -F <chain>/-A <chain> <rule>.

Да, и вот это
-A add_set_isp7 -m set --match-set isp1 src -j RETURN
-A add_set_isp7 -m set --match-set isp2 src -j RETURN
-A add_set_isp7 -m set --match-set isp3 src -j RETURN
-A add_set_isp7 -m set --match-set isp4 src -j RETURN
-A add_set_isp7 -m set --match-set isp5 src -j RETURN
-A add_set_isp7 -m set --match-set isp6 src -j RETURN
заменяется одним правилом - просто добавляй адрес не только в один конкретный сет, но и в аггрегированный сет для всех вообще, и проверяй, если оно там есть, -j RETURN.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн fet4

  • Автор темы
  • Любитель
  • *
  • Сообщений: 75
    • Просмотр профиля
Re: Балансировка каналов на основе src
« Ответ #4 : 23 Сентября 2015, 19:12:51 »
Спасибо за советы. Есть что оптимизировать.
Натолкните, не могу понять как быть с пересчетом коэффициентов. Сейчас правила грузятся с баш скрипта сразу с коэффицинтами. Было бы кошерно 8) временно перераспределить трафик нерабочих каналов на рабочие, а потом вернуть назад.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28469
    • Просмотр профиля
Re: Балансировка каналов на основе src
« Ответ #5 : 23 Сентября 2015, 20:06:50 »
Считаете общую загрузку.
Считаете дисперсию по активным каналам.
Перемножаете текущие веса на дисперсию. Получаете новые веса.
Загоняете новые веса в таблицы.

Вообще, я бы сделал такой финт ушами…
1. Написал скелет правил в формате iptables-save/-restore.
2. Написал скрипты для настройки скелета.
3. Написал скрипты для перебалансировки нагрузки.
Плюсы очевидны.
В iptables-save видно всё сразу, понятно, где накосячил и как вообще всё работает.
Настройка отдельно от скелета - в любой момент можно поправить без риска угробить вообще всё.
Ну а перебалансировка - та же перенастройка.

P.S.
Можно ещё постоянно ставить канал "по умолчанию" наименее загруженный. Как альтернативу перебалансировке.
« Последнее редактирование: 23 Сентября 2015, 20:08:43 от AnrDaemon »
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн fet4

  • Автор темы
  • Любитель
  • *
  • Сообщений: 75
    • Просмотр профиля
Re: Балансировка каналов на основе src
« Ответ #6 : 23 Сентября 2015, 20:44:58 »
Хорошая идея надо будет попробовать помудрить с весами)
Как-то пробовал iptables-save/-restore огорчила его невозможность работы с переменными. Поэтому использую их только для проверки как все загрузилось, а гружу со скриптов, удобно.

Цитировать
P.S.
Можно ещё постоянно ставить канал "по умолчанию" наименее загруженный. Как альтернативу перебалансировке.
Так сейчас и работает, тоже не плохо, так сказать авариечка.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28469
    • Просмотр профиля
Re: Балансировка каналов на основе src
« Ответ #7 : 23 Сентября 2015, 20:47:41 »
А там не нужны переменные. Переменные нужны в stage2 - настройка.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн fet4

  • Автор темы
  • Любитель
  • *
  • Сообщений: 75
    • Просмотр профиля
Re: Балансировка каналов на основе src
« Ответ #8 : 23 Сентября 2015, 20:51:12 »
Потом просто вставлять в скелет с помощью awk/sed ?

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28469
    • Просмотр профиля
Re: Балансировка каналов на основе src
« Ответ #9 : 24 Сентября 2015, 10:10:48 »
С помощью iptables…
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн fet4

  • Автор темы
  • Любитель
  • *
  • Сообщений: 75
    • Просмотр профиля
Re: Балансировка каналов на основе src
« Ответ #10 : 21 Октября 2015, 21:24:58 »
В продолжении темы хотел бы спросить. Реально ли настроить балансировку трафика в канале между пользователями данного канала, чтобы один не занимал всю полосу например торрентом. Что посоветуете в данном случаи? какая методика?

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28469
    • Просмотр профиля
Re: Балансировка каналов на основе src
« Ответ #11 : 21 Октября 2015, 21:50:10 »
При чём тут балансировка?…
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн fet4

  • Автор темы
  • Любитель
  • *
  • Сообщений: 75
    • Просмотр профиля
Re: Балансировка каналов на основе src
« Ответ #12 : 22 Октября 2015, 20:20:24 »
Отдельную тему для этого создать?

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28469
    • Просмотр профиля
Re: Балансировка каналов на основе src
« Ответ #13 : 22 Октября 2015, 21:20:02 »
То, что вам нужно, называется "шейпинг" и тем по нему слегка до[много].
Например, прилепленная: https://forum.ubuntu.ru/index.php?topic=33853.0
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн fet4

  • Автор темы
  • Любитель
  • *
  • Сообщений: 75
    • Просмотр профиля
Re: Балансировка каналов на основе src
« Ответ #14 : 20 Ноября 2015, 14:56:33 »
Подскажите пожалуйста, наконец запустил в продакшн данную схему.
Люди жалуются на дисконекты в играх, скайпе. Подозреваю где-то трафик уходит через другой линк. Как проверить?
Что я упустил или в чем может быть проблема?
Дополнительно маркируются еще входящие соединения со стороны провайдера для корректной обработки
iptables -w -t mangle -A PREROUTING -i $isp1 -m conntrack --ctstate NEW -j CONNMARK --set-mark 1
iptables -w -t mangle -A PREROUTING -i $isp2 -m conntrack --ctstate NEW -j CONNMARK --set-mark 2
iptables -w -t mangle -A PREROUTING -i $isp3 -m conntrack --ctstate NEW -j CONNMARK --set-mark 3
iptables -w -t mangle -A PREROUTING -i $isp4 -m conntrack --ctstate NEW -j CONNMARK --set-mark 4
iptables -w -t mangle -A PREROUTING -i $isp5 -m conntrack --ctstate NEW -j CONNMARK --set-mark 5
iptables -w -t mangle -A PREROUTING -i $isp6 -m conntrack --ctstate NEW -j CONNMARK --set-mark 6
iptables -w -t mangle -A PREROUTING -i $isp7 -m conntrack --ctstate NEW -j CONNMARK --set-mark 7

Использовать restore-mark в конце списка PREROuTING можно ? Или нужно копировать маркировку в конце каждой под цепочке обработки?
« Последнее редактирование: 20 Ноября 2015, 15:03:40 от fet4 »

 

Страница сгенерирована за 0.104 секунд. Запросов: 25.