В продолжении статей про 2 провайдера, хочу предложить вариант для Linux пользователей. Действующие лица те же 🙂
Лучше конечно использовать MultiPath TCP (MPTCP), но можно и этот метод
Тестовый стенд: Debian linux squeeze 6.0 i386 (kernel 2.6.32-5-686), USB модемы Novatel U720, AnyData ADU-500.
1) Подготовка модемов.
Проверим, что модемы у нас увиделись нормально:
# lsusb | grep -v 'Linux'
Bus 003 Device 002: ID 16d5:6502 AnyDATA Corporation CDMA/UMTS/GPRS modem
Bus 002 Device 002: ID 1410:2110 Novatel Wireless Ovation U720/MCD3000
При этом, когда вы вставляете модем в dmesg должна появится запись (пример для модема AnyDATA):
[ 3.625121] option 3-2:1.0: GSM modem (1-port) converter detected
[ 3.625532] usb 3-2: GSM modem (1-port) converter now attached to ttyUSB0
[ 3.625725] option 3-2:1.1: GSM modem (1-port) converter detected
[ 3.626116] usb 3-2: GSM modem (1-port) converter now attached to ttyUSB1
[ 3.626284] option 3-2:1.2: GSM modem (1-port) converter detected
[ 3.626681] usb 3-2: GSM modem (1-port) converter now attached to ttyUSB2
а вот для Novatel – будет вот такая:
[ 3.626859] option 2-2:1.0: GSM modem (1-port) converter detected
[ 3.626977] usb 2-2: GSM modem (1-port) converter now attached to ttyUSB0
[ 3.626994] option 2-2:1.1: GSM modem (1-port) converter detected
[ 3.627376] usb 2-2: GSM modem (1-port) converter now attached to ttyUSB1
Это в случае подключения модемов по отдельности. А если вместе – тогда вот так:
[ 3.625121] option 3-2:1.0: GSM modem (1-port) converter detected
[ 3.625532] usb 3-2: GSM modem (1-port) converter now attached to ttyUSB0
[ 3.625725] option 3-2:1.1: GSM modem (1-port) converter detected
[ 3.626116] usb 3-2: GSM modem (1-port) converter now attached to ttyUSB1
[ 3.626284] option 3-2:1.2: GSM modem (1-port) converter detected
[ 3.626681] usb 3-2: GSM modem (1-port) converter now attached to ttyUSB2
[ 3.626859] option 2-2:1.0: GSM modem (1-port) converter detected
[ 3.626977] usb 2-2: GSM modem (1-port) converter now attached to ttyUSB3
[ 3.626994] option 2-2:1.1: GSM modem (1-port) converter detected
[ 3.627376] usb 2-2: GSM modem (1-port) converter now attached to ttyUSB4
При этом ttyUSB[0-2] будут отвечать за AnyDATA, а ttyUSB[34] – за Novatel.
Позже эти данные пригодятся для составления конфигов.
2) Настройка ppp.
Для нормальной работы нам потребуется пакет ppp. Устанавливаем его:
#apt-get install ppp
Создаём файл (по умолчанию он уже есть) /etc/chatscripts/pap такого содержимого:
ABORT BUSY
ABORT VOICE
ABORT "NO CARRIER"
ABORT "NO DIALTONE"
ABORT "NO DIAL TONE"
"" ATZ
OK ATDT\T
CONNECT ""
Создаём файлы для наших пиров:
(/etc/ppp/peers/mtsconnect)
/dev/ttyUSB0
230400
crtscts
modem
noccp
novj
connect "/usr/sbin/chat -e -v -f /etc/chatscripts/pap -T '#777'"
noauth
user mobile
remotename mtsconnect
usepeerdns
#defaultroute
debug
updetach
lcp-echo-interval 20
lcp-echo-failure 3
persist
maxfail 0
(/etc/ppp/peers/itc)
/dev/ttyUSB3
crtscts
modem
noccp
novj
connect "/usr/sbin/chat -e -v -f /etc/chatscripts/pap -T '#777'"
noauth
user IT
usepeerdns
defaultroute
debug
updetach
lcp-echo-interval 20
lcp-echo-failure 3
persist
maxfail 0
Примечание.
Эти модемы нужно подключить именно так, что бы сначала определялся AnyData, а потом уже Novatel. В противном случае AnyData просто не сможет выполнить подключение. Возможно это баг.
Добавляем логины и пароли для этих подключений:
– для mtsconnect:
в файл /etc/ppp/chap-secrets добавляем такую строку
mobile mtsconnect internet
– для itc:
в файл /etc/ppp/pap-secrets добавляем такую строку
IT * IT *
3) Настройка ip route
Если у вас не установлен пакет iproute2, установите его. Так же для трансляции адресов нам потребуется iptables.
Открываем файл /etc/iproute2/rt_tables и добавляем такие строки:
100 ppp0
101 ppp1
где левая колонка – номер таблицы, правая – имя. Имя выбрано таким образом, что использовать переменные для ip-up скриптов.
Создаём файл /etc/ppp/ip-up.d/ip_route такого содержания ($1-eth, $4-peer-IP, $5-GW):
#!/bin/sh
/sbin/ip route add $5 dev $1 src $4 table $1
/sbin/ip route add default via $5 table $1
/sbin/ip rule add from $4 table $1
и ещё один /etc/ppp/ip-down.d/ip_route:
#!/bin/bash
/sbin/ip rule del from $4 table $1
4) Настройка NAT’a.
Для NAT’a можно использовать обычный маскарадинг в iptables.
5) Балансировка трафика.
Если хочется добавить возможность балансировки трафика, то выполняем следующую команду:
# /sbin/ip route add default scope global nexthop via $GW_ppp0 dev ppp0 weight 1 nexthop via $GW_ppp1 ppp1 weight 1
6) Разное
Дополнительно можно почерпнунть из этой статьи. Возможно потребуется выставить
net.ipv4.conf.all.arp_filter = 1