The OpenNET Project / Index page

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

Балансировка соединений в 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 (ok), 23:15, 15/05/2010 [ответить]  
  • +/
    если есть возможность сделать это без дополнительных патчей ткните носом КАК...
    iptables v1.3.8
    kernel 2.6.26.8
     

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




    Спонсоры:
    MIRhosting
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

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