The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Объединение нескольких каналов Интернет и простейшая балансировка нагрузки. (linux balance traffic netfilter iptables)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: linux, balance, traffic, netfilter, iptables,  (найти похожие документы)
From: Gall <admin@gall.com.ua.> Newsgroups: email Date: Mon, 26 Mar 2006 14:31:37 +0000 (UTC) Subject: Объединение нескольких каналов Интернет и простейшая балансировка нагрузки. Большая часть информации взята мной отсюда: http://tetro.net/misc/multilink.html Ну а для тех кто плохо владеет английским, я попытаюсь как можно более подробно объяснить как это сделать. Это не есть прямое руководство к действию, это только мое мнение и описание того, что работает у меня. Аппетит приходит во время еды (вместо вступления): В наше время без Интернета практически никак не обойтись, и чем выше скорость передачи данных, чем шире канал - тем лучше ) Имея в своем распоряжении всего одну выделеную линию xDSL-115kbp/s я смог построить небольшую домашнюю сеть, и дал возможность своим пользователям узнать кто же такой этот WWW. Но прошло время, и моя выделенка начала потихоньку захлебываться от того количества запросов, которое неустанно генерировали пользователи сети. Что делать? Безвыходных ситуаций как известно практически не бывает, ну а в данном случае ответ очевиден - нужен второй, а может и третий канал. Провести выделенку в наше время проблем особо не составит. У меня на это ушло меньше недели. Ну а что дальше? Как раздавать Интернет с двух каналов? Просто спаять вместе четыре провода - слишком просто, чтобы быть правдой. Вот тут мы и имеем несколько реальных направлений для изысканий. - Разделить поровну пользователей и использовать два сервера доступа. Но по каким критериям делить пользователей, и где гарантия, что пользователи одного канала не начнут интенсивно что-то скачивать из Интернета, в то время как пользователи второго канала вообще ничего не будут делать? Этот метод меня изначально не устраивал, и соответственно рассмотрен не будет. - Попытаться собрать оба канала в одном сервере и, хотя бы приблизительно, сбалансировать нагрузку на них. Это, как мне кажеться, как раз то, что доктор прописал. Но и тут есть несколько вариантов решения. Самый простой, с помощью Iproute2, на данную тему в Интернете можно найти несколько вариантов решения. Немного сложнее будет сделать все это через Iptables, рассмотрим этот вариант более подробно. Подготовка: Для реализации этого коварного плана нам понадобиться немного поработать. Нам нужно ядро версии Linux 2.6.14.2 которое можно найти на сайте http://kernel.org , Iptables v.1.3.4 и патчи из набора "patch-o-matic-ng" которые добавляют поддержку ROUTE, nth и random для Iptables. Патчи и iptables вы можете найти здесь http://www.netfilter.org/downloads.html#ftp Описывать процесс наложения патчей и сборки ядра я думаю нет необходимости. Установки: Итак начнем самое интерессное, но сначала определимся с тем, что имеем. В силу сложившихся обстоятельств инетернет поступает на сервер с двух роутеров расстояние между которыми около 1км. Поэтому была выделена маленькая подсеть именно для транспортировки трафика на сервер. Конфигурация компьютера который все это обьединяет вместе. -eth0 - интерфейс с адресом 192.168.1.1/24 (направленный во внутрь сети). -eth1 - интерфейс с адресом 192.168.0.1/29 (направленный в транспортную подсеть). -192.168.0.2/29 и 192.168.0.3/29 - адреса шлюзов. -192.168.1.2/24 - адрес прокси сервера, который раздает инет пользователям. Настройки Iptables: Создаем новую цепочку правил: iptables -t mangle -N NEW_OUT_CONN Загоняем все новые соединения в созданную цепочку: iptables -t mangle -A FORWARD -i eth0 -o eth1 -m state --state NEW -j NEW_OUT_CONN Далее указываем каким пакетам через какой шлюз уходить: iptables -t mangle -A POSTROUTING -o eth1 -m connmark --mark 0 -j ROUTE --gw 192.168.0.2 --continue iptables -t mangle -A POSTROUTING -o eth1 -m connmark --mark 1 -j ROUTE --gw 192.168.0.3 --continue Ну и самое интерессное, маркировка пакетов с использованием NTH метода: iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 0 iptables -t mangle -A NEW_OUT_CONN -m nth --counter 1 --every 2 --packet 0 -j RETURN iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 1 iptables -t mangle -A NEW_OUT_CONN -m nth --counter 1 --every 2 --packet 1 -j RETURN В завершении замаскируем уходящие пакеты и перекроем доступ всем кому ходить сюда не положено: iptables -t nat -A POSTROUTING -s 192.168.1.2 -o eth+ -j SNAT --to-source 192.168.0.1 iptables -t nat -P POSTROUTING DROP Вот так все работает у меня. Для общего развития приведу пример реализации метода RANDOM: iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 0 iptables -t mangle -A NEW_OUT_CONN -m random --average 50 -j RETURN iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 1 Я не утверждаю, что NTH единственно правильный метод, но меня он устраивает. В конечном итоге вам решать каким вариантом удобнее пользоваться. Удачи. 23.03.2006г. -=GaleON=-

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Port22 (?), 13:12, 27/03/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Текст с ошибочками :-)
     
  • 1.2, Alien (??), 13:22, 27/03/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Подобная балансировка крайне не эффективна. Смысл балансировки должен быть в управлении и входящим, а не только исходящим трафиком и не только TCP :). Для  этого сто лет назад придумали BGP(на худой конец ospf). Автору - учиться дальше.
     
     
  • 2.8, Аноним (-), 09:27, 28/03/2006 [^] [^^] [^^^] [ответить]  
  • +/
    И автономную зону, в каждую квартиру.
     

  • 1.3, igor (??), 13:29, 27/03/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А на ядре 2.4.х будет работать ????
     
  • 1.4, Mr.Uef (??), 15:01, 27/03/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    2 Alien
    А можно подробнее, о том как управлять входящим трафиком? И заодно, зачем?
     
     
  • 2.5, BB (??), 16:12, 27/03/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Наверное человек неверно выразился, не управление входящим траффиком а балансировка его. в принципе достигается использованием шаренного ip адреса и arp балансингом. В принципе ничего запредельного в этом нет :)
     

  • 1.6, Миша (?), 19:27, 27/03/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ерунда какая-то. С помощью iproure2 такое есть уже очень давно. Делается "путь по умолчанию" на 2 интерфейса (или можно десять!!), и всё разлетается поровну или в указанной пропорции.

    Только там ещё проще можно вес пути указывать :)

    Зачем из пушки по мухам бить?

    Это ещё что, слыхали про фанатов которые шейпинг в netfilter (iptables) пихают? :)
    Радует что в vanilla такая порнография не попадёт, навсегда оставшись левыми патчами.

     
     
  • 2.10, антш (?), 21:44, 28/03/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Миша, а вы можете ответить на парочку вопросов?
    Моя тема вот тут на РСДН: http://www.rsdn.ru/Forum/Message.aspx?mid=1801464&only=1
    :)
    У вас есть электронный адрес? А то вопрос настройки доступа в интернет через 3-4 интерфейса для меня очень важен. :((((
    Спасибо!!!
     
     
  • 3.11, BB (??), 09:50, 29/03/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Я конечно не Миша, но ответить/помочь смогу, оставляйте e-mail или аську ....
    мне можно написать на vodoley7@yandex.ru
    PS вариантов решения вашей проблемы существует несколько...
     
  • 2.15, b2d (?), 12:54, 22/11/2006 [^] [^^] [^^^] [ответить]  
  • +/
    будте так добры ... ссылочку на это ваше решение...
     
  • 2.20, batfromhell (?), 10:45, 02/08/2007 [^] [^^] [^^^] [ответить]  
  • +/
    Насколько я понимаю реально увеличить пропускную способность при закачке файла с конкретного сервака с помощью iproute не выйдет. Вот что написано в LARTC:

    Note that balancing will not be perfect, as it is route based, and routes are cached. This means that routes
    to often-used sites will always be over the same provider.

     

  • 1.7, Mr.Uef (??), 19:50, 27/03/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вообще, мне достаточно интересно, чтоб балансинг велся не по байтам/пакетам, а именно по соединениям.
    Т.е. чтоб одно соединение через один канал, а другое через другой.
     
     
  • 2.9, BB (??), 17:49, 28/03/2006 [^] [^^] [^^^] [ответить]  
  • +/
    А в чем тут может быть принципиальная сложность ? Сохранять state соединений - ничего необычного в этом нет :)
     

  • 1.12, Gall (??), 00:04, 12/04/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Спасибо,"критики", что не прошли мимо :о)
    Весь прикол в том, что когда мне позарез было нужно слить два канала, помощи просить было неукого.
    Я почти за месяц перекопал кучу всякой инфы и опробовал всяких способов, пока не наткнулся на этот, смог его реализовать и увидеть конечный результат.
    И запостил я его сюда только для того, что если кто попадет в такую ситуацию, не обладая мега познаниями в линуксе (как собственно и я), смог хотя бы на первое время решить проблему.
     
  • 1.13, Ansy (?), 15:16, 29/04/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А как быть, если выдана подсетка РЕАЛЬНЫХ IP-адресов? И у альтернативного аплинка IP другие?
    Только заказом своей AS, LIR и маршрутизацией по BGP? Дешевле вариантов нет?
     
  • 1.14, Alex (??), 11:12, 04/05/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а у меня два подключения (PPPOE) и провайдер выдают одинаковый шлюз что на первое подключение что на второе( скажите как в такой ситуации разрулить балансировку?
     
  • 1.16, __Serg__ (??), 00:33, 03/03/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Поставте модемы в режим моста, ну и дальше разбейте их по разным подсетям ...
     
  • 1.17, SUrov_IBM (?), 21:37, 21/06/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >А как быть, если выдана подсетка РЕАЛЬНЫХ >IP-адресов? И у альтернативного аплинка IP другие?
    >Только заказом своей AS, LIR и маршрутизацией по >BGP? Дешевле вариантов нет?

    Для этого вовсе не обязательно становиться LIR'ом, достаточно приобрести сеть PI (ISP-независимую)/24 и AS естественно вместе с ней, далее взаимодействовать со своими ISP по BGP. PI сеть хоть дело и тонкое, но всегда останется вашей. :-)

     
  • 1.18, Twoboots (?), 13:59, 03/07/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А как быть если версия ядра 2.6.20.7 и Iptables 1.3.8... patch-o-maеic-ng  не ставится
    и ROUTE nth random соответственно нема...

    может еще ест ькакой способ балансировть нагрузку между несколькими провайдерами

     
  • 1.19, Twoboots (?), 15:54, 03/07/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    точнее немного не так .. патч ставится patch-o-matic-ng-20070702 но в нем тока ROUTE  а nth и рандом нема...
     
     
  • 2.21, andy (??), 12:19, 09/10/2007 [^] [^^] [^^^] [ответить]  
  • +/
    to Twoboots
    точнее в 1.3.8 есть  nth и рандом, только он вынесен в другой модуль который теперь называется statistic нужно в ядре включить опцию и пересобрать iptables. однозначно будет работать, второй вопрос как :).
    А RANDOM можно добавить патчем, но эти патчи каким-то таинственным образом разные для разных ядер.
    Я для 2.6.18.8 ROUTE добавил патчем 20070925
     

  • 1.23, vovchyk_bratyk (?), 05:07, 26/11/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Доброе время суток :) у меня, кажется, такая же проблемма: есть один провайдер и 2 канала с того же самого провайдера по 512 kb/s, установил squid, но дальше не знаю что делать :( как мне обьединить их, чтоб я смог раздавать инет юзерам? я в линуксе новичок и прошу помогите мне как чайнику )
     

    игнорирование участников | лог модерирования

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру