Очень нужно настроить Squid3 -> 2 параллельных провайдера (USB, USB)

Здравствуйте!

Бьюсь уже два месяца с проблемой: не могу настроить выход в интернет из локальной сети через двух провайдеров.

Мне нужно, чтобы прокси-сервер на squid при обращении к нему, отправлял запросы на модем и роутер в соотношении 1:1 или 1:2. Короче, чтобы если через squid - задействуются два канала.
И я не имею ввиду какое-то склеивание каналов для увеличения мощности - нужно работать только на уровне распределения запросов.

Что имею:
- Локальная сеть 192.168.2.0/24
- Роутер Zyxel Keenetic Giga II, IP: 192.168.2.1, шлюз
- Сервер с Ubuntu 12.04.4 LTS, на котором работают нужные мне службы и установлен Squid3. IP: 192.168.2.10
- USB-модем MegaFon 100-3 (ZTE MF-823), воткнут в Zyxel Keenetic Giga II
- USB-модем Билайн (ZTE MF-667), воткнут в Сервер с Ubuntu 12.04.4 LTS

Конфигурация сервера:

/etc/network/interfaces:
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.2.10
netmask 255.255.255.0
network 192.168.2.0
broadcast 192.168.2.255
gateway 192.168.2.1
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 8.8.4.4 8.8.8.8

# 3G Modem
iface ppp0 inet wvdial
provider wvdial
auto ppp0

wvdial.conf:
[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 = AT+CGDCONT=1,"IP","home.beeline.ru"
Modem Type = Analog Modem
Phone = *99#
ISDN = 0
Password = beeline
New PPPD = 1
Username = beeline
Modem = /dev/ttyUSB1
Baud = 9600
Stupid Mode = 1
Auto Reconnect = on
Idle Seconds = 0

Есть ещё скрипт, которым я пытался настроить требуемое:
#!/bin/sh
IF1=eth0
IP1=192.168.2.1
P1=192.168.2.1
P1_NET=192.168.2.0/24

IF2=ppp0
IP2=`ip address show | grep ppp0 | sed '1d' | awk '{print $2}'`
P2=`ip route show dev ppp0 | awk '/r/ { print $1 }'`
P2_NET=`ip route show dev ppp0 | awk '/r/ { print $1 }'`/32

ip route add $P1_NET dev $IF1 src $IP1 table zyxel
ip route add default via $P1 table zyxel
ip route add $P2_NET dev $IF2 src $IP2 table beeline
ip route add default via $P2 table beeline

ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2

#ip route add default via $P1

ip rule add from $IP1 table zyxel
ip rule add from $IP2 table beeline

ip route add default scope global nexthop via $P1 dev $IF1 weight 1 \
nexthop via $P2 dev $IF2 weight 1

Но, когда я его запускаю, интернет пропадает, а понять, почему - мне не хватает ума.
Я не админ и делаю это вынуждено, потому что больше некому. Помогите, пожалуйста.
  • Вопрос задан
  • 3420 просмотров
Пригласить эксперта
Ответы на вопрос 2
ifaustrue
@ifaustrue
Пишу интересное в теллеграмм канале @cooladmin
Коллега, приветствую! Я немного покапитаню, добавлю комментариев в ваш скрипт,
чтобы вы понимали логику и мы говорили на одном языке:
#!/bin/sh
#Описываем переменные первого интерфейса и его подсеть
IF1=eth0
IP1=192.168.2.1
P1=192.168.2.1
P1_NET=192.168.2.0/24
#Аналогично для второго (но влоб это сделать нельзя, потому достаём всё динамически через grep)
IF2=ppp0
IP2=`ip address show | grep ppp0 | sed '1d' | awk '{print $2}'`
P2=`ip route show dev ppp0 | awk '/r/ { print $1 }'`
P2_NET=`ip route show dev ppp0 | awk '/r/ { print $1 }'`/32
#Создаём первую таблицу маршрутизации
ip route add $P1_NET dev $IF1 src $IP1 table zyxel
#задаём для неё шлюз по умолчанию
ip route add default via $P1 table zyxel
#Аналогично со второй
ip route add $P2_NET dev $IF2 src $IP2 table beeline
ip route add default via $P2 table beeline

#Задаём два правила для ответа на входящий трафик, откуда пришёл, туда и ответить
ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2

#задаём правило трафика по-умолчанию (сами закомментили?)
#ip route add default via $P1
#дополнительно говорим, что при трафик от айпи интерфейса, ответить с использование соотв. таблиц (в первую очередь для для DNAT)
ip rule add from $IP1 table zyxel
ip rule add from $IP2 table beeline

#Определяем веса таблиц, которые мы создали и говорим что их нуджно использовать после основной (в которой у нас по идее пусто)
ip route add default scope global nexthop via $P1 dev $IF1 weight 1 nexthop via $P2 dev $IF2 weight 1


Собственно, что показалось странным (и возможно ошибочным)
1. Нет маскарадинга, для трафика. В случае с зикселем он вам, скорее всего, не нужен, а вот с модемом без этого точно не заработает
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -s $P1_NET -o $IF2 -j MASQUERADE
2. Зачем закоментили маршрут по-умолчанию в скрипте?
#ip route add default via $P1
снимите, проверьте
3. После выполнения скрипта - пингуйте шлюзы по умолчанию (ifconfig вам их покажет), а так же смотрите вывод route - там должны быть видны две таблицы маршрутизации и маршруты для всего и вся.
Ответ написан
@shaazz
Честно говоря не понятна суть вопроса. Обычно требуется при двух провайдерах резервирование канала (достигается определенным количеством пингов с определенным таймаутом на внешний адрес и, при отсутсвии ответов, переключение на резерв), либо балансировка spillover (при достижении заданного порога, используется одновременно второй канал), round robin (по очереди). Настраивается это на одном оборудовании. То есть, либо на железке Zyxel если она поддерживает резервирование каналов или балансировку, где один вход USB-свисток, второй - Ubuntu по ethernet -> WAN. Но так как у тебя на Ubuntu еще крутятся сервисы - тебе это не подходит (сервер за WAN не будет виден). Поэтому шлюзом у тебя должен быть Ubuntu сервер, где один вход USB-свисток, второй - Zyxel по ethernet (и соответственно вторая сетевуха должна быть на серваке для локалки). Либо пробовать выкинуть Zyxel из этой схемы и два свистка воткнуть в Ubuntu и ее настраивать. Балансировка в Ubuntu.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы