Несколько 3G модемов - сложение скорости каналов (Есть ли простая настройка?)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС для молодых и начинающих системных администраторов.

Модераторы: SLEDopit, Модераторы разделов

156
Сообщения: 234
ОС: OPENSUSE ALTLINUX

Несколько 3G модемов - сложение скорости каналов

Сообщение 156 »

Что хотим - имеется несколько безлимиток от сотовых операторов через 3G модемы, можно ли без сложных скриптов и установки спец. софта настроить балансировку нескольких 3G каналов какими нибудь штатными средствами системы, а то найденные способы балансировки каналов предназначенны для продвинутых админов , так как сложны в настройке. В общем случае сабж попадает под балансировку каналов, и в найденных примерах балансировка настраивается на двух сторонах каналов, в случае с 3G для настройки балансировка нам доступна только одна строна. Хотелось бы узнать, есть ли простые средства балансировки каналов для 3G модемов?
п.с. В винде в свойствах подключения модема есть галочка "согласовывать подключения между модемами", которая балансирует загрузку каналов...

Вот что нашлось за сегодня

Код: Выделить всё

#!/bin/sh

################### CONFIG ############
FreeNet="/etc/routing/FreeNet.list"
### Home Network
l_eth=eth2
l_ip=192.168.5.1
l_net=192.168.5.0/24

########### Local ISP Network #########
li_net=10.0.0.0/8

########### ISP1 ######################
i1_eth=eth0
i1_ip=89.252.20.173
i1_net=89.252.20.0/24
i1_gw=89.252.20.1

########### ISP2 ######################
i2_eth=eth1
i2_ip=10.1.2.161
i2_net=10.0.0.0/16
i2_gw=10.1.0.1

#########ip route2 tables##############
t1=101
t2=102
#######################################

########### Flushing ##################
iptables -t mangle -F NEW_OUT_CONN
iptables -t mangle -F PREROUTING
iptables -t mangle -F OUTPUT
iptables -t mangle -X NEW_OUT_CONN
ip route flush table $t2
ip rule del table $t2
ip route flush table $t1
ip rule del table $t1
ip route flush cache
#######################################

iptables -t mangle -N NEW_OUT_CONN
iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 1
iptables -t mangle -A NEW_OUT_CONN -m statistic --mode random --probability 0.50 -j RETURN
iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 2

for file in $FreeNet; do
if [ -f "$file" ]; then
{ cat "$file"; echo; } | while read ip_addr; do
if [ "$ip_addr" != "" ]; then
echo "Статическая маршрутизация для $ip_addr"
iptables -t mangle -A NEW_OUT_CONN -d $ip_addr -j CONNMARK --set-mark 1
fi
done
fi
done

iptables -t mangle -A PREROUTING -d $l_net -j RETURN
iptables -t mangle -A PREROUTING -d $li_net -j RETURN

iptables -t mangle -A PREROUTING -s $l_net -m state --state new,related -j NEW_OUT_CONN
iptables -t mangle -A PREROUTING -s $l_net -j CONNMARK --restore-mark

iptables -t mangle -A OUTPUT -d $l_net -j RETURN
iptables -t mangle -A OUTPUT -d $li_net -j RETURN

iptables -t mangle -A OUTPUT -s $l_net -m state --state new,related -j NEW_OUT_CONN
iptables -t mangle -A OUTPUT -s $li_net -j CONNMARK --restore-mark

ip route add $l_net dev $l_eth scope link table $t1
ip route add $i2_net dev $i2_eth scope link table $t1
ip route add $i1_net dev $i1_eth scope link src $i1_ip table $t1
ip route add 127.0.0.0/8 dev lo scope link table $t1
ip route add default via $i1_gw table $t1

ip rule add prio 51 fwmark 1 table $t1
ip rule add from $i1_ip table $t1

ip route add $l_net dev $l_eth scope link table $t2
ip route add $i1_net dev $i1_eth scope link table $t2
ip route add $i2_net dev $i2_eth scope link src $i2_ip table $t2
ip route add 127.0.0.0/8 dev lo scope link table $t2
ip route add default via $i2_gw table $t2

ip rule add prio 52 fwmark 2 table $t2
ip rule add from $i2_ip table $t2

ip route flush cache

2 канала по 100 Мбит от разных провайдеров дают 21,3Мб/сек что соответствует почти 200Мбитам.

Это решение исключает кучу проблем связанных с использованием netxhop, а также позволяет иметь статически роуты в случае необходимости.

решение рабочее вприницпе для любой линукс системы с версией iptables 1.3.8 и выше.
иначе придется поработать patch-o-matic


и ещё нашлось


Код: Выделить всё

Как раздавать Интернет с двух каналов?

Просто спаять вместе четыре провода - слишком просто, чтобы быть правдой. Вот тут мы и имеем несколько реальных направлений для изысканий.

    * Разделить поровну пользователей и использовать два сервера доступа. Но по каким критериям делить пользователей, и где гарантия, что пользователи одного канала не начнут интенсивно что-то скачивать из Интернета, в то время как пользователи второго канала вообще ничего не будут делать? Этот метод меня изначально не устраивал, и соответственно рассмотрен не будет.
    * Попытаться собрать оба канала в одном сервере и, хотя бы приблизительно, сбалансировать нагрузку на них. Это, как мне кажеться, как раз то, что доктор прописал. Но и тут есть несколько вариантов решения. Самый простой, с помощью 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 единственно правильный метод, но меня он устраивает.

В конечном итоге вам решать каким вариантом удобнее пользоваться. Удачи.

Большая часть информации взята мной отсюда: http://tetro.net/misc/multilink.html Это не есть прямое руководство к действию, это только мое мнение и описание того, что работает у меня.

Статья взята с сайта OpenNet
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Несколько 3G модемов - сложение скорости каналов

Сообщение sash-kan »

156 писал(а):
27.08.2010 12:05
Это решение исключает кучу проблем связанных с использованием netxhop
список проблем известен?


156 писал(а):
27.08.2010 12:05
Самый простой, с помощью Iproute2, на данную тему в Интернете можно найти несколько вариантов решения.
кстати, очень интересно было бы узнать и все остальные (кроме единственного, известного лично мне) варианты.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
156
Сообщения: 234
ОС: OPENSUSE ALTLINUX

Re: Несколько 3G модемов - сложение скорости каналов

Сообщение 156 »

Остальные найденные варианты балансировки, а их большинство, предназначены для балансировки каналов между двумя серверами, т.е. настройки проводятся на двух сторонах балансируемых каналов, поэтому к нашему случаю они не подходят, и соответственно не приводятся. Трудность балансировки заключается в том, что все настройки балансировки должны делаться для переменного ип адреса и только на одной стороне - на стороне установки gprs модемов. Про проблемы с использованием netxhop ничего сказать не могу, так как я не автор этого утверждения.
Спасибо сказали: