The OpenNET Project / Index page

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

Объединение нескольких каналов Интернет и простейшая балансировка нагрузки. (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 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Наверное человек неверно выразился, не управление входящим траффиком а балансиро... весь текст скрыт [показать] [показать ветку]
     
  • 1.6, Миша, 19:27, 27/03/2006 [ответить] [смотреть все]  
  • +/
    Ерунда какая-то. С помощью iproure2 такое есть уже очень давно. Делается "путь по умолчанию" на 2 интерфейса (или можно десять!!), и всё разлетается поровну или в указанной пропорции.

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

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

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

     
     
  • 2.10, антш, 21:44, 28/03/2006 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Миша, а вы можете ответить на парочку вопросов Моя тема вот тут на РСДН http ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.11, BB, 09:50, 29/03/2006 [^] [ответить] [смотреть все]  
  • +/
    Я конечно не Миша, но ответить помочь смогу, оставляйте e-mail или аську мн... весь текст скрыт [показать]
     
  • 2.15, b2d, 12:54, 22/11/2006 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    будте так добры ... ссылочку на это ваше решение...
     
  • 2.20, batfromhell, 10:45, 02/08/2007 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Насколько я понимаю реально увеличить пропускную способность при закачке файла с... весь текст скрыт [показать] [показать ветку]
     
  • 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:      
    Заголовок:
    Текст:





      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor