Большой Воронежский Форум

Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел.
Вернуться   Большой Воронежский Форум » Коммуникации и связь в Воронеже » » Коммуникации
Обсуждение всего, что связано с интернет, а также сетевого оборудования и сетевых технологий от офисных сетей до домашних.

telecomservice
freedom
Ответ
 
Опции темы
Старый 03.02.2008, 02:00   #1   
Форумец
 
Сообщений: 491
Регистрация: 02.12.2005
Возраст: 36

Lampus вне форума Не в сети
Балансировка сетевой нагрузки или как увеличить отдачу через ADSL2+ до 400 кб/сек =)

Смотрим сначала на скрин, где изображён KTorrent. Смотрим на скорость загрузки - 1,037 Мб/сек. Теперь смотрим второй скрин, где изображено окно программы telnet, подключенной к моему модему. Downstream speed всего 6786 кбит/сек. Это не глюк Korrent'a и не фотошоп (и не GIMP). Просто я распределил нагрузку между двумя домолинковскими модемами. Если ещё интересно, то читайте мой пост номер 2 о том как я это осуществил.
Миниатюры
Нажмите на изображение для увеличения
Название: 1mb2.png
Просмотров: 126
Размер:	101.9 Кб
ID:	224219   Нажмите на изображение для увеличения
Название: telnet113.png
Просмотров: 117
Размер:	46.2 Кб
ID:	224220  

  Ответить с цитированием
Старый 03.02.2008, 02:43   #2   
Форумец
 
Сообщений: 491
Регистрация: 02.12.2005
Возраст: 36

Lampus вне форума Не в сети
Сразу говорю что ничего нового я здесь не поведую. Большинство из тех кому это надо всё и так знают, либо знают где найти, если понадобится. Просто я думаю чо мой пост может пригодится начинающим админам в небольших локальных сетях, которым нужна высокая пропускная способность внешнего канала на сервере, да и простым личерам, которым лень ждать пока скачается и уних есть добрый сосед, который позволит заюзать свой модем =)
В общем для всего этого чуда нам понадобится Linux и установленный пакет iproute2.
Я буду рассматривать пример для домолинка.
Опишу как у меня всё это устроено: имеется локальная сеть. Непосредственно в свитч воткнут мой домолинковский модем. Пакетниками закрыты все ресурсы кроме локальных, чтоб злоумышленники из локалки не заюзали внешний инет на халяву =) IP модема 10.1.9.113. Также имеется сервер с IP 10.1.9.105, который разводит домолинковский инет. На сервере стоит биллинг. Но это не суть важно, так как за локальные домолинковские ресурсы деньги не снимаются. Вот его мы и будем использовать как второй канал. Модем подключенный к этому серверу работает даже на меньшей скорости чем мой - что то около 3.6 мбит/сек, и к тому же AnnexA. Все эксперименты проводились на ноуте с IP 10.1.9.236.
Я написал вот такой вот скриптик:
Цитата:
#!/bin/bash
IF1=eth0
IF1_IP1=10.1.9.236
GW_IP1=10.1.9.113
IF2=eth0
IF2_IP=10.1.9.236
GW_IP2=10.1.9.105
ip route add 80.82.32.0/19 dev $IF1 src $IF1_IP1 table T1
ip route add 88.83.192.0/19 dev $IF1 src $IF1_IP1 table T1
ip route add 77.45.128.0/17 dev $IF1 src $IF1_IP1 table T1
ip route add default via $GW_IP1 table T1
ip route add 80.82.32.0/19 dev $IF2 src $IF1_IP2 table T2
ip route add 88.83.192.0/19 dev $IF2 src $IF1_IP2 table T2
ip route add 77.45.128.0/17 dev $IF2 src $IF1_IP2 table T2
ip route add default via $GW_IP2 table T2
ip rule add from $GW_IP1 table T1
ip rule add from $GW_IP2 table T2
ip route add default scope global nexthop via $GW_IP1 dev $IF1 weight 1 nexthop via $GW_IP2 dev $IF2 weight 1
Ну с логической точки зрения скрипт не совсем верен, так как не требуется создания двух одинаковых таблиц T1 и T2 для локальных ресурсов. Ну оно здесь не просто так =) Это для того чтобы можно было указать локальные диапазоны двух РАЗНЫХ провайдеров. Допустим в T1 указываем локальные диапазоны Domolink'а, а в T2 локальные диапазоны Intercon'a.
Теперь о переменных: IF1 и IF2 - это переменные содержащие имена интерфейсов к которым подключены модемы 1 и 2 соответственно, а IF1_IP и IF2_IP - IP адреса, назначенные на интерфейсы IF1 и IF2.
GW_IP1 и GW_IP2 - это IP адреса шлюзов. Они обычно соответсвуют IP адресу соответствующего модема, если те работают в режиме роутера.
Сохраняем скрипт с именем balance.sh.
Выполняем команду chmod 755 balance.sh
Это сделает файл balance.sh исполняемым для владельца.
Запускаем его, и смотрим не вывалилось ли ошибок.
Если нет - то можно юзать =)
Проверить что используется несколько модемов можно несколько раз выполнив команду traceroute для различных хостов. Шлюзы должны оказываться разными.
У меня получилось вот так:
Цитата:
root@lampusnb:~# traceroute mail.ru
traceroute: Warning: mail.ru has multiple addresses; using 194.67.57.226
traceroute to mail.ru (194.67.57.226), 30 hops max, 38 byte packets
1 10.1.9.105 (10.1.9.105) 0.498 ms 0.398 ms 0.337 ms
2 192.168.1.1 (192.168.1.1) 2.236 ms 1.278 ms 1.004 ms
3 lo100.c10008-a77.vsi.ru (80.82.53.125) 41.417 ms 39.459 ms 39.981 ms
...

traceroute to ya.ru (213.180.204.8), 30 hops max, 38 byte packets
1 10.1.9.113 (10.1.9.113) 0.808 ms 0.839 ms 0.699 ms
2 lo100.c10008-a77.vsi.ru (80.82.53.125) 40.086 ms 35.343 ms 45.577 ms
3 ge3-0.gsr.a77.hw.vsi.ru (88.83.197.153) 82.076 ms 60.174 ms 33.538 ms
...
Только запомните, что прирост в скорости вы увидите только при большом количестве параллельных потоков (например, как в торрентах и других p2p сетях, или при многопоточной закачке файлов, ну а также при большом кол-ве клиентов )
И ещё. Если у вас используются каналы с сильно различающейся пропускной способностью - попробуйте поиграться с параметром weight. Это позолит нагрузить в большей степени один, либо другой канал.

З.Ы. Что то я неудобоваримое понаписал. Просто уже поздно, бошка не варит, завтра и допишу. Если у кого то будут вопросы - отвечу.
  Ответить с цитированием
Старый 03.02.2008, 23:52   #3   
DontDoItAgain
 
Сообщений: 36
Регистрация: 10.12.2005
Возраст: 44

Arnold Laynе вне форума Не в сети
Lampus, а теперь научи, как грамотно развести соседа на использование его модема
  Ответить с цитированием
Старый 04.02.2008, 21:42   #4   
Форумец
 
Сообщений: 32
Регистрация: 08.10.2007

myau вне форума Не в сети
Ну я уж молчу сколько ошибок в скрипте наваял ...
IF2_IP - где-нибуть используется?
$IF1_IP2 - где-нибуть определяется?
ip rule add from $GW_IP1 table T1
from всегда использует адрес интерфеса - а не адрес гатевея ...
И вообще - зачем тебе таблицы - ты что - souce routing решил применить? нафига он тебе.

Я молчу и о том, что все что тут нарисовал (в случае если все ошибки выправить) - годится только для default routing'а. А если хоть один из модемов с закрытым интернетом ... познокомь с таким соседом - расшарившим модем в локалке - и не закрывшим его фильтром от платного трафика.

Короче, складывается впечатление, что прочитал статью на www.opennet.ru (поиск по ключевому слову - nexthop) и изложил ее в своей трактовке, добавив кучу ошибок

ну а теперь конструктив.
Если отбросить всю словесную шелуху, то нужно всего-лишь дать три команды:

ip route add 80.82.32.0/19 nexthop via $GW_IP1 dev eth0 nexthop via $GW_IP2 dev eth0
ip route add 88.83.192.0/19 nexthop via $GW_IP1 dev eth0 nexthop via $GW_IP2 dev eth0
ip route add 77.45.128.0/17 nexthop via $GW_IP1 dev eth0 nexthop via $GW_IP2 dev eth0

и ты получишь multipach routing на домолинковские сети
после чего ставь дефаулт роутинг (на интернет), туда - где он реально работает.

Да, в таблице маршрутизации не должно быть роутингов на домолинковские сетки, если есть - убейте их, перед тем как давать вышеприведеные команды.

И не забывайте такую замечательную команду:
ip route flush cache
очистит кеш таблицы роутинга - что заставит компьютер по-новой искать пути к источникам (вполне возможно что через другой модем).

Кроме того - такая схема должна еще обладать повышенной живучестью - в том смысле, что при отключении одного из модемов - все должно продолжать работать. (Сам не проверял)
  Ответить с цитированием
Старый 05.02.2008, 01:52   #5   
Форумец
 
Сообщений: 491
Регистрация: 02.12.2005
Возраст: 36

Lampus вне форума Не в сети
myau, на счёт ошибок в скрипте ты прав. Я этот скрипт не проверил, прежде чем выложить, а зря. У меня это имело несколько другой вид, а вводить переменные я начал лишь для того, чтобы придать скрипту большую читабельность. Просто голый набор комманд с моими ip вряд ли бы кому то что-то дал. А теперь ещё посмотри в какое время оставлен тот пост (да и этот за одно), всё сразу поймёшь =)
Видимо ты не внимательно читал мой пост, ибо после блока со скриптом я написал что таблицы T1 и T2 в данном случае абсолютно бесполезны и приведены лишь для того, чтобы скрипт можно было адаптировать для использования двух разных провайдеров с собственными локальными диапазонами. И ещё данный скрипт предполагает что ни о каких пакетных фильтрах речи не идёт, то бишь помимо локальных ресурсов доступна ещё и внешка. А если у нас два подключения к одному и тому же прову, с одними и теми же локальными ресурсами и всегда открытой внешкой, то вообще было бы достаточно одной строчки:
Цитата:
ip route add default scope global nexthop via $GW_IP1 dev $IF1 weight 1 nexthop via $GW_IP2 dev $IF2 weight 1
В общем хотел сделать пример поуниверсальней, а получилось как всегда =\
Хотя такая конструкция (пока я не начал менять реальные ip на имена переменных) замечательно работала, в чём можно убедиться взглянув на скрины.

Arnold Laynе, телепаты в отпуске. Ситуацию конкретней опиши.
  Ответить с цитированием
Старый 10.02.2008, 22:50   #6   
Куратор темы
 
Аватар для Herbert Wells
 
Сообщений: 187
Регистрация: 24.01.2002
Возраст: 53

Herbert Wells вне форума Не в сети
Спасибо. Подскажите, нужно что-ли дополнительно дописывать в скрипте, что-бы использовать 3 или 4-ре модема ? Планируются только для использования torrents.vsi.ru .
  Ответить с цитированием
Старый 11.02.2008, 00:14   #7   
Форумец
 
Сообщений: 491
Регистрация: 02.12.2005
Возраст: 36

Lampus вне форума Не в сети
Herbert Wells, надо лишь добавить соответствующее кол-во nexthop via $GW_IPxxx dev $IFxxx weight 1

И если модемы заводятся на скоростях с большой разницей, то не забываем крутить параметр weight
  Ответить с цитированием
Старый 15.02.2008, 22:24   #8   
Форумец
 
Сообщений: 32
Регистрация: 08.10.2007

myau вне форума Не в сети
Ну и ... доволен ... если ты до сих пор в этом режиме работаешь ... то полный ... провакатор.
таблицу смотрел?
cat /proc/net/ip_conntrack | grep ESTABLISHED
И это только установленные соединения ....
Только список превышает 3 МеГаБайта
А сколько буферов памяти под каждое соединение выделяется?
но это ошибки с Нашей стороны ... а с Ихней сороны - сколько не полученных ACK на ихней SYN было? (Тэорию открой)
Ну а теперь - как всегда, позитив ...
Правду не расскажу - скажу лишь подсказку:
1.Статический роутинг спасает - на таком количестве объектов(приемников)
2. Статический роутинг - делается везде, в том числе и под виндой ...(штатными средствами)
Так что проверить меня очень просто.
И не нужно тут изобретать велосипед.
  Ответить с цитированием
Старый 15.02.2008, 22:44   #9   
Форумец
 
Сообщений: 32
Регистрация: 08.10.2007

myau вне форума Не в сети
так что не зря, команды:
route add ...
Работают как в винде, так и на линуксе.
  Ответить с цитированием
Старый 21.02.2008, 23:13   #10   
35 FPS
 
Аватар для Mark5
 
Сообщений: 899
Регистрация: 18.01.2003

Mark5 вне форума Не в сети
http://ylsoftware.com/?action=news&na=viewfull&news=399
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind