объединение 2х каналов

Есть и такой ОС.

Модератор: weec

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
hippieua
проходил мимо
Сообщения: 4
Зарегистрирован: 2009-08-09 0:45:25

объединение 2х каналов

Непрочитанное сообщение hippieua » 2009-08-09 0:50:05

Привет, если может кто подсказать ....
Дано: домашний сервер CentOS 5.3, 2х100мбит канала от разных провайдеров,
Задача: получить результирующий траффик при скачивании инфы торрент сетями 2х100 ну или около того.

Собвственно вот ;) Как и каким способом настроить грамотную балансировку траффика ?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Burner
лейтенант
Сообщения: 693
Зарегистрирован: 2009-06-14 7:02:26

Re: объединение 2х каналов

Непрочитанное сообщение Burner » 2009-08-09 7:05:25

насколько я знаю - в такой постановке никак.

hippieua
проходил мимо
Сообщения: 4
Зарегистрирован: 2009-08-09 0:45:25

Re: объединение 2х каналов

Непрочитанное сообщение hippieua » 2009-08-09 11:23:11

Burner писал(а):насколько я знаю - в такой постановке никак.
ну почему же, ведь при скачке торентов, идет куча отдельных сессий к каждому из пиров, и ничего не мешает пустить половину запросов через одного провайдера а вторую через другого ...

opt1k
лейтенант
Сообщения: 966
Зарегистрирован: 2007-12-05 9:45:18
Откуда: Mytischi

Re: объединение 2х каналов

Непрочитанное сообщение opt1k » 2009-08-09 11:53:13

можно, я знаю лишь в теории, на практике не проверял.
делаете 2 правила nat один на 1ый канал и второй на 2ой.
Потом все пакеты кандидаты пропускаете с 50% вероятностью до второго ната.
Вот пример из гугла:
route add default $ext_gw1
ipfw add allow ip from any to any via $int_if
ipfw add divert natd1 ip from any to $ext_ip1 in
ipfw add divert natd2 ip from any to $ext_ip2 in
ipfw add skipto 8000 ip from $lan to any out
ipfw add allow ip from any to $lan in
ipfw add 8000 prob 0.5 skipto 8500 ip from any to any out ###### это ключевой момент, в манах всё описано
ipfw add 8100 divert natd1 ip from any to any out
ipfw add 8200 allow ip from $ext_ip1 to any out
ipfw add 8500 divert natd2 ip from any to any out
ipfw add 8600 fwd $ext_gw2 ip from $ext_ip2 to any out
ipfw add deny ip from any to any out

hippieua
проходил мимо
Сообщения: 4
Зарегистрирован: 2009-08-09 0:45:25

Re: объединение 2х каналов

Непрочитанное сообщение hippieua » 2009-08-10 1:57:29

opt1k писал(а):можно, я знаю лишь в теории, на практике не проверял.
делаете 2 правила nat один на 1ый канал и второй на 2ой.
Потом все пакеты кандидаты пропускаете с 50% вероятностью до второго ната.
Вот пример из гугла:
route add default $ext_gw1
ipfw add allow ip from any to any via $int_if
ipfw add divert natd1 ip from any to $ext_ip1 in
ipfw add divert natd2 ip from any to $ext_ip2 in
ipfw add skipto 8000 ip from $lan to any out
ipfw add allow ip from any to $lan in
ipfw add 8000 prob 0.5 skipto 8500 ip from any to any out ###### это ключевой момент, в манах всё описано
ipfw add 8100 divert natd1 ip from any to any out
ipfw add 8200 allow ip from $ext_ip1 to any out
ipfw add 8500 divert natd2 ip from any to any out
ipfw add 8600 fwd $ext_gw2 ip from $ext_ip2 to any out
ipfw add deny ip from any to any out
Большое спасибо за идею ) Все бы ничего, только боюсь в линуксе нет ipfw :oops: . Надеюсь все же подобный алгоритм можно как то реализовать с помощью iptables.

opt1k
лейтенант
Сообщения: 966
Зарегистрирован: 2007-12-05 9:45:18
Откуда: Mytischi

Re: объединение 2х каналов

Непрочитанное сообщение opt1k » 2009-08-10 2:54:21

точно :( Тогда уж извини, уважаемый, но с конкретным примером помочь тебе не могу. Скажу лишь то что возможности современных фаерволов почти одинаковы, по той причине, что все модные фишки они подсматривают друг у друга и быстренько их доделывают :)
Могу вам дать верное направление для гуглинга: http://yandex.ru/yandsearch?text=баланс ... stpar4=/s1 первые пара ссылок 100% решают вашу проблему с использованием iptables и линукса

Alex_hha
лейтенант
Сообщения: 755
Зарегистрирован: 2005-11-06 18:25:26
Контактная информация:

Re: объединение 2х каналов

Непрочитанное сообщение Alex_hha » 2009-08-10 21:44:53

hippieua писал(а):Привет, если может кто подсказать ....
Дано: домашний сервер CentOS 5.3, 2х100мбит канала от разных провайдеров,
Задача: получить результирующий траффик при скачивании инфы торрент сетями 2х100 ну или около того.

Собвственно вот ;) Как и каким способом настроить грамотную балансировку траффика ?
это называется bonding
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no

# cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no

# cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
BOOTPROTO=none
ONBOOT=yes
NETWORK=10.10.70.0
IPADDR=10.10.70.77
NETMASK=255.255.255.0
USERCTL=NO
Загружаем модуль:
# cat /etc/modprobe.conf | grep bond
alias bond0 bonding
options bond0 mode=1 miimon=100
Перезапускаем сеть
# service network restart
Смотрим статус
# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.2.4 (January 28, 2008)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth0
MII Status: up
Link Failure Count: 2
Permanent HW addr: 00:1b:11:50:7a:01

Slave Interface: eth1
MII Status: up
Link Failure Count: 1
Permanent HW addr: 00:18:fe:8c:a1:96

Аватара пользователя
Adekamer
пингвин
Сообщения: 694
Зарегистрирован: 2007-10-09 18:36:48
Откуда: 127.0.0.1
Контактная информация:

Re: объединение 2х каналов

Непрочитанное сообщение Adekamer » 2009-08-19 10:54:06

алексу про боундинг - молодца - нифигушки не разбираешся в технологиях :)

боундинг - это технология агрегирование каналов
а тут идет разговор про более высокий уровень - нежели банальный эзернет
как вариант если использовать иптаблес - то настраивать нат по более сложному условию
например если исходящий порт от 1024 до 35000 - это нат на канал 1
а исходящий порт 35001-65000 то нат канал 2 :)
ну понятно разбивку имеет смысл усложнить не 2 правилами а например правил 8 более ровно перемешав диапазон портов
но это первое что лезет в голову

Аватара пользователя
Adekamer
пингвин
Сообщения: 694
Зарегистрирован: 2007-10-09 18:36:48
Откуда: 127.0.0.1
Контактная информация:

Re: объединение 2х каналов

Непрочитанное сообщение Adekamer » 2009-08-19 10:54:42

и да - я вернулся

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: объединение 2х каналов

Непрочитанное сообщение zingel » 2009-08-19 11:06:19

но вот все и в сборе
Z301171463546 - можно пожертвовать мне денег

_Andy
проходил мимо

Re: объединение 2х каналов

Непрочитанное сообщение _Andy » 2009-08-19 11:08:18

Adekamer писал(а):и да - я вернулся
Где был? Как дела? У нас тут темы, понимаешь, идут интересные

hippieua
проходил мимо
Сообщения: 4
Зарегистрирован: 2009-08-09 0:45:25

Re: объединение 2х каналов

Непрочитанное сообщение hippieua » 2009-08-19 12:03:59

Помогло следующее
вот скрин для затравки Изображение

вот решение

Создать в /etc/iproute2/rt_tables 2 таблицы для каждого из провайдеров

Код: Выделить всё

255<--->local
254<--->main
253<--->default
0<----->unspec

101 FreeNet
102 Nline
Создать файлик /etc/routing/FreeNet.list в него можно дописывать адреса путь к которым будет идти четко через основного провайдера.

Взять и запустить мой скрипт предварительно отредактировав переменные

Код: Выделить всё


Описания переменных
FreeNet=путь к текстовому файлу где указаны адреса и сети которые нужно пускать только через основного провайдера в формате:
x.x.x.x
или
x.x.x.x/y

l_eth=интерфейс локальный
l_ip=локальный IP линукс шлюза
l_net=домашняя сеть

li_net=локалка провайдера ( для доступа к внутресетевым ресурсам)


i1_eth=интерфейс провайдера 1
i1_ip=IP провайдера 1
i1_net=сеть провайдера 1
i1_gw=шлюз провайдера 1


i2_eth=интерфейс провайдера 2
i2_ip=IP провайдера 2
i2_net=сеть провайдера 2
i2_gw=шлюз провайдера 2

t1=номер первого провайдера в таблице rt_tables ( /etc/iproute2/rt_tables)
t2=номер второго провайдера в таблице rt_tables ( /etc/iproute2/rt_tables)

Код: Выделить всё

#!/bin/sh

################### CONFIG ############
FreeNet="/etc/routing/FreeNet.list"
### Home Network
l_eth=eth2
l_ip=192.168.5.1
l_net=192.168.5.0/24

########### Local ISP Network #########
li_net=10.0.0.0/8

########### ISP1 ######################
i1_eth=eth0
i1_ip=89.252.20.173
i1_net=89.252.20.0/24
i1_gw=89.252.20.1

########### ISP2 ######################
i2_eth=eth1
i2_ip=10.1.2.161
i2_net=10.0.0.0/16
i2_gw=10.1.0.1

#########ip route2 tables##############
t1=101
t2=102
#######################################

########### Flushing ##################
iptables -t mangle -F NEW_OUT_CONN
iptables -t mangle -F PREROUTING
iptables -t mangle -F OUTPUT
iptables -t mangle -X NEW_OUT_CONN
ip route flush table $t2
ip rule del table $t2
ip route flush table $t1
ip rule del table $t1
ip route flush cache
#######################################

iptables -t mangle -N NEW_OUT_CONN
iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 1
iptables -t mangle -A NEW_OUT_CONN -m statistic --mode random --probability 0.50 -j RETURN
iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 2

for file in $FreeNet; do
if [ -f "$file" ]; then
{ cat "$file" ; echo ; } | while read ip_addr; do
if [ "$ip_addr" != "" ]; then
echo "Статическая маршрутизация для $ip_addr"
iptables -t mangle -A NEW_OUT_CONN -d $ip_addr -j CONNMARK --set-mark 1
fi
done
fi
done

iptables -t mangle -A PREROUTING -d $l_net -j RETURN
iptables -t mangle -A PREROUTING -d $li_net -j RETURN

iptables -t mangle -A PREROUTING -s $l_net -m state --state new,related -j NEW_OUT_CONN
iptables -t mangle -A PREROUTING -s $l_net -j CONNMARK --restore-mark

iptables -t mangle -A OUTPUT -d $l_net -j RETURN
iptables -t mangle -A OUTPUT -d $li_net -j RETURN

iptables -t mangle -A OUTPUT -s $l_net -m state --state new,related -j NEW_OUT_CONN
iptables -t mangle -A OUTPUT -s $li_net -j CONNMARK --restore-mark

ip route add $l_net dev $l_eth scope link table $t1
ip route add $i2_net dev $i2_eth scope link table $t1
ip route add $i1_net dev $i1_eth scope link src $i1_ip table $t1
ip route add 127.0.0.0/8 dev lo scope link table $t1
ip route add default via $i1_gw table $t1

ip rule add prio 51 fwmark 1 table $t1
ip rule add from $i1_ip table $t1

ip route add $l_net dev $l_eth scope link table $t2
ip route add $i1_net dev $i1_eth scope link table $t2
ip route add $i2_net dev $i2_eth scope link src $i2_ip table $t2
ip route add 127.0.0.0/8 dev lo scope link table $t2
ip route add default via $i2_gw table $t2

ip rule add prio 52 fwmark 2 table $t2
ip rule add from $i2_ip table $t2

ip route flush cache

Alex_hha
лейтенант
Сообщения: 755
Зарегистрирован: 2005-11-06 18:25:26
Контактная информация:

Re: объединение 2х каналов

Непрочитанное сообщение Alex_hha » 2009-08-19 22:39:27

боундинг - это технология агрегирование каналов
а тут идет разговор про более высокий уровень - нежели банальный эзернет
еще раз читаем постановку задачи -"Задача: получить результирующий траффик при скачивании инфы торрент сетями 2х100 ну или около того." Речь явно идет об агрегировании
как вариант если использовать иптаблес - то настраивать нат по более сложному условию
например если исходящий порт от 1024 до 35000 - это нат на канал 1
а это называется балансировка. Разницу чувствуешь? ;)

Аватара пользователя
Adekamer
пингвин
Сообщения: 694
Зарегистрирован: 2007-10-09 18:36:48
Откуда: 127.0.0.1
Контактная информация:

Re: объединение 2х каналов

Непрочитанное сообщение Adekamer » 2009-08-21 14:10:20

2 Алекс карашо
2х100мбит канала от разных провайдеров
айдестенд ?
при боундинге у тебя один ИП - а здесь у тебя 2 ИПа действующих
Дано: домашний сервер CentOS 5.3, 2х100мбит канала от разных провайдеров,
Задача: получить результирующий траффик при скачивании инфы торрент сетями 2х100 ну или около того.
и заметь - никаких слов про балансировку или агрегирование
мой ответ позволяет решить эту задачу
твой - впринципе нерабочий :)

Alex_hha
лейтенант
Сообщения: 755
Зарегистрирован: 2005-11-06 18:25:26
Контактная информация:

Re: объединение 2х каналов

Непрочитанное сообщение Alex_hha » 2009-08-21 16:37:10

получить результирующий траффик
если это не агрегирование (читать как суммирование), то я пЫонер :)
при боундинге у тебя один ИП - а здесь у тебя 2 ИПа действующих
в задаче ничего не было про то, что надо чтобы два и осталось ;)
мой ответ позволяет решить эту задачу
промолчим про такое решение (написанное на коленке, ну да ладно) :-D

Автор в любом случае уже решил проблему, так что ...

NiTr0
мл. сержант
Сообщения: 109
Зарегистрирован: 2008-08-29 0:05:24

Re: объединение 2х каналов

Непрочитанное сообщение NiTr0 » 2009-08-23 20:05:33

Имел небольшой опыт (причем - даже не на своей машине) объединения 2х каналов. Решал простым маршрутом на оба шлюза, ip route add default nexthop via GW1 nexthop via GW2. Ессно - на каждом интерфейсе нат.
Из наблюдений - балансировка не идеальная, но при большом кол-ве сессий - каналы примерно поровну нагружены. Для новой сессии маршрут выбирается случайным образом, после чего - все пакеты на данный ИП ходят по тому же маршруту. Маршруты кешируются, гугл говорит - кешируются навсегда (до следующего пересоздания дефолтного маршрута), потому периодически стоит маршрут килять и создавать по новой.
И еще одно - для торрента решение с 2мя внешними ИП адресами, думается, не прокатит в полной мере - т.к. на треккере региться будет всего 1 адрес из 2х - соответственно, траффик (вернее, запросы на соединение) будет идти на него. Как это обойти без серьезного допиливания клиента - я не представляю. Хотя - это касается только раздачи, для приема - препятствий быть не должно.

Гость
проходил мимо

Re: объединение 2х каналов

Непрочитанное сообщение Гость » 2009-08-28 22:32:32

я пробовал через nexthop основная проблема клиенты icq и skype вылетьают каждые 5 минут
скорость на трекере плавает то 20 то 3 .. хз с чем связано ....
а так работает ставильно
скорость загрузки постояннно выше 20 аска не реконектиццо

NiTr0
мл. сержант
Сообщения: 109
Зарегистрирован: 2008-08-29 0:05:24

Re: объединение 2х каналов

Непрочитанное сообщение NiTr0 » 2009-08-28 23:18:07

Так запустить mtr на какой-то узел, и помедитировать на маршрут - если он изменится, то источник реконнектов выяснен ;)

P.S. Надеюсь при этом не указывали опцию equalize? ;)

_spy_
проходил мимо
Сообщения: 3
Зарегистрирован: 2009-11-14 21:49:41

Re: объединение 2х каналов

Непрочитанное сообщение _spy_ » 2009-11-14 22:52:16

День Добрый !!!
Интересный скрипт, попробовал, столкнулся с двумя проблемами:

1. Проблемы с маской (invalid mask '17), задано 82.200.128.0/17.
2. RTNETLINK answers: Invalid argument.

В чем проблема!!!?

_spy_
проходил мимо
Сообщения: 3
Зарегистрирован: 2009-11-14 21:49:41

Re: объединение 2х каналов

Непрочитанное сообщение _spy_ » 2009-11-15 11:23:47

Первый вопрос снимается разобрался.
А вот второй!!!

_spy_
проходил мимо
Сообщения: 3
Зарегистрирован: 2009-11-14 21:49:41

Re: объединение 2х каналов

Непрочитанное сообщение _spy_ » 2009-11-15 11:44:18

Разобрался Всем спасибо !!!