The OpenNET Project
 
Поиск (ключи):    ПРОГРАММЫ СТАТЬИ СОВЕТЫ ФОРУМ
  WIKI НОВОСТИ (+) MAN'ы ДОКУМЕНТАЦИЯ

Балансировка соединений в Linux через несколько линков (balance link nat iptables linux traffic)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: balance, link, nat, iptables, linux, traffic,  (найти похожие документы)
From: Tim Utschig <tim@tetro.net.> Newsgroups: email Date: Mon, 9 Dec 2007 14:31:37 +0000 (UTC) Subject: Балансировка соединений в Linux через несколько линков Оригинал: http://tetro.net/misc/multilink.html Для работы необходимо собрать NetFilter с модулями "nth" или "random", доступными в патчах "patch-o-matic-ng" (http://www.netfilter.org/downloads.html#svn) Имеем три линка: * eth0: проводная сеть 192.168.1.0/24, gateway 192.168.1.1, default route. * eth1: беспроводной линк 1, 172.16.0.0/16, gateway 172.16.0.1 * rausb0: беспроводной линк 2, 192.168.0.0/24, gateway 192.168.0.1 Соединение привязываем к линку через маркировку match/target. Для балансировки используем модули "random" или "nth". # Запрещаем блокирование пакетов ушедших в один интерфейс, а пришедших # из второго. echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter echo 0 > /proc/sys/net/ipv4/conf/rausb0/rp_filter # Поднимаем NAT на основных интерфейсах iptables -t nat -A POSTROUTING -o eth1 -s ! 172.16.0.0/16 -m state --state NEW -j MASQUERADE iptables -t nat -A POSTROUTING -o rausb0 -s ! 192.168.0.0/24-m state --state NEW -j MASQUERADE # Создаем цепочку для обработки новых исходящих соединений iptables -t mangle -N NEW_OUT_CONN # Пропускаем соединения идущие в проводную сеть iptables -t mangle -A NEW_OUT_CONN -d 192.168.1.0/24 -j RETURN iptables -t mangle -A NEW_OUT_CONN -p tcp -m multiport --destination-ports 22,80,443,6667 -j RETURN iptables -t mangle -A NEW_OUT_CONN -p udp --dport 53 -j RETURN # Новые исходящие соединения направляем в цепочку iptables -t mangle -A OUTPUT -o eth0 -m state --state NEW -j NEW_OUT_CONN # Пропускаем ранее созданные промаркированные соединения. iptables -t mangle -A OUTPUT -m connmark --mark 2 -j ROUTE --gw 172.16.0.1 --continue iptables -t mangle -A OUTPUT -m connmark --mark 3 -j ROUTE --gw 192.168.0.1 --continue Пример балансировки с модулем "random": # 34% всех соединений отправляем в интерфейс по умолчанию (проводная сеть). iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 0 iptables -t mangle -A NEW_OUT_CONN -m random --average 34 -j RETURN # 33% отправляем через eth1 iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 2 iptables -t mangle -A NEW_OUT_CONN -m random --average 33 -j RETURN # остальное через rausb0 iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 3 Пример балансировки с модулем "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 3 --packet 0 -j RETURN # второй из трех через eth1 iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 2 iptables -t mangle -A NEW_OUT_CONN -m nth --counter 1 --every 3 --packet 1 -j RETURN # третий из трех через rausb0 iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 3 iptables -t mangle -A NEW_OUT_CONN -m nth --counter 1 --every 3 --packet 2 -j RETURN Ситуация падения одного из линков. Помещаем в /etc/network/if-down.d/ (Debian) скрипт, вызываемый после отключения интерфейса: #!/bin/sh if [ "$IFACE" = "eth1" ]; then iptables -t mangle -D OUTPUT -m connmark --mark 2 -j ROUTE --gw 172.16.0.1 --continue 2>/dev/null fi if [ "$IFACE" = "rausb0" ]; then iptables -t mangle -D OUTPUT -m connmark --mark 3 -j ROUTE --gw 192.168.0.1 --continue 2>/dev/null fi exit 0 Ситуация возобнавления работы упавшего ранее интерфейса. Помещаем в /etc/network/if-up.d/ (Debian) скрипт, вызываемый после поднятия интерфейса: #!/bin/sh if [ "$IFACE" = "eth1" ]; then iptables -t mangle -A OUTPUT -m connmark --mark 2 -j ROUTE --gw 172.16.0.1 --continue 2>/dev/null fi if [ "$IFACE" = "rausb0" ]; then iptables -t mangle -A OUTPUT -m connmark --mark 3 -j ROUTE --gw 192.168.0.1 --continue 2>/dev/null fi exit 0 Описанная схема позволяет неплохо балансировать трафик от BitTorrent клиентов.

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

Обсуждение [ RSS ]
 
  • 1, reaper, 11:08, 31/01/2009 [ответить] [смотреть все]
  • +/
    неплохо бы переписать под текущую версию iptables, без задействования patch-o-matic-ng
     
  • 2, dr0n, 23:15, 15/05/2010 [ответить] [смотреть все]
  • +/
    если есть возможность сделать это без дополнительных патчей ткните носом КАК...
    iptables v1.3.8
    kernel 2.6.26.8
     

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



    АКЦИЯ! ПОДПИШИСЬ на журнал Linux Format до 31 января 2012 года и выиграй СУПЕРПРИЗ!

    Журнал "Linux Format" (Линукс Формат)- Единственный в России и странах СНГ журнал на русском языке, посвящённый Linux и свободному ПО. Журнал для IT-директоров, IT-менеджеров, программистов, системных администраторов, учителей школ и преподавателей ВУЗов и всех пользователей ПК. В каждом выпуске: Новости индустрии OpenSource, обзоры новинок свободного ПО, обучающие и методические статьи.

    Каждый, кто оформит подписку, получает бонус- объёмные наклейки на системный блок и подарки: с одним из первых выпусков журнала в 2012 году- диск с архивом номеров за 2005-2011 г.г. и ежемесячно электронную версию журнала в pdf-формате.

    Подробнее о проведении акции вы можете прочитать на странице сайта.


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