Категорії
Linux

2 провайдера на Linux с помощью ip route

В продолжении статей про 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

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Домашняя страничка Andy
Записки молодого админа
Самостоятельная подготовка к Cisco CCNA
Самостоятельная подготовка к Cisco CCNP
Powered by Muff