Два модема в системе: как организовать работу?

Аватар пользователя birukoff

Всем доброго дня.

В системе под -ASP v10 - два модема: мобильный тел.- на /dev/ttyUSB0, и Zuxel на com1. Оба отлично работают - каждый в отдельности. Как настроить систему, чтобы оба модема одновременно передавали данные, либо один работал на прием пакетов, другой - более медленный - на передачу?

Аватар пользователя sergeil

Re: два модема в системе: как организовать работу?

Цитата:
birukoff писал:
Всем доброго дня.

В системе под -ASP v10 - два модема: мобильный тел.- на /dev/ttyUSB0, и Zuxel на com1. Оба отлично работают - каждый в отдельности. Как настроить систему, чтобы оба модема одновременно передавали данные, либо один работал на прием пакетов, другой - более медленный - на передачу?

Классическая multi-home система...
Если адреса статические + подымаются по загрузке системы, то совсем без проблем. Если адреса динамические, подымаются в произвольный момент времени и не одновременно, то сложнее. То есть, я бы сказал, что это уже профессиональное подключение. Вы уверены, что готовы так глубоко двигать в этом направлении? Если да, то я попытаюсь Вам помочь. Хотя, это может представлять чисто спортивный интерес. Реальное увеличение производительности не будет стоить затрат времени и сил.
Улыбка

Аватар пользователя birukoff

Re: два модема в системе: как организовать работу?

Цитата:
sergeil писал:

Цитата:
готовы так глубоко двигать в этом направлении? Если да, то я попытаюсь Вам помочь.

У меня оба адреса динамические. Но автоматизация - это второе дело. Можно же адреса получить, а потом прописать ручками, или так не получится?

Аватар пользователя sergeil

Re: два модема в системе: как организовать работу?

Цитата:
birukoff писал:
У меня оба адреса динамические. Но автоматизация - это второе дело. Можно же адреса получить, а потом прописать ручками, или так не получится?

Получится, но это будет не просто Улыбка
Вам нужно получить для каждого из соединений IP-адрес, маску подсети (скорее всего 255.255.255.255), шлюз по умолчанию. Ну, а потом, не разрывая соединения, подстаить все это в скрипт. Если одно их соединений разрывается, что характерно для ppp, pptp, то нужно смотреть.

#/bin/bash
###############################################################
# Setup two routes
###############################################################

let routes=0

case "`/sbin/ip -4 -o addr show dev eth1`" in
    *62.xxx.xx.19*) 
	ip rule  add        from 62.xxx.xx.19/28  table 201
	ip route add default via 62.xxx.xx.17    table 201 
	let routes=$routes+1
                ;;

    *)	echo "ERROR"

esac

case "`/sbin/ip -4 -o addr show dev eth2`" in
    *195.xxx.xx.51*) 
	ip rule  add        from 195.xxx.xx.51/28  table 202
	ip route add default via 195.xxx.xx.49    table 202
	let routes=$routes+1
                ;;

    *)	echo "ERROR"

esac

ip route flush cache

if [ $routes -eq 2 ] ;  then
    ip route del default
    
    ip route add default equalize scope global         \
	nexthop via 195.xxx.xx.49 dev eth2 weight 1 \
	nexthop via 62.xxx.xx.17  dev eth1 weight 1
    ip route flush cache
fi

Думаю, теперь Вы понимаете...

Аватар пользователя birukoff

Re: два модема в системе: как организовать работу?

На ttyUSB0 мне выдают адрес типа 10.10.0.236 (вот сейчас конкретно такой)
remote 192.168.12.136
на ttyS0 адрес 82.209.220.122
remote 194.158.206.81

Правильно ли я понял, что для моего случая в скрипт надо записать так:
#/bin/bash
###############################################################
# Setup two routes
###############################################################

let routes=0

case "`/sbin/ip -4 -o addr show dev ttyUSB0`" in
*10.10.0.236*)
ip rule add from 10.10.0.236/28 table 201
ip route add default via 10.10.0.17 table 201
let routes=$routes+1
;;

*) echo "ERROR"

esac

case "`/sbin/ip -4 -o addr show dev ttyS0`" in
*82.209.220.122*)
ip rule add from 82.209.220.51/28 table 202
ip route add default via 82.209.220.49 table 202
let routes=$routes+1
;;

*) echo "ERROR"

esac

ip route flush cache

if [ $routes -eq 2 ] ; then
ip route del default

ip route add default equalize scope global
nexthop via 82.209.220.49 dev ttyS0 weight 1
nexthop via 10.10.0.17 dev eth1 weight 1
ip route flush cache
fi

Аватар пользователя birukoff

Re: два модема в системе: как организовать работу?

Еще по ходу вопрос: таблицы 201 и 202 - это что? И еще. У меня модем на ttyUSB0 реально качает около 90Кбит/сек, а на ttyS0 - 16Кбит/сек. Можно ли с помощью ... weight 2 ... сделать трафик несимметричным?

Аватар пользователя sergeil

Re: два модема в системе: как организовать работу?

Цитата:
birukoff писал:
Еще по ходу вопрос: таблицы 201 и 202 - это что?

Это таблицы маршрутизации

[sergeil@app sergeil]$ cat /etc/iproute2/rt_tables

#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
201     T1
201     T2

Теперь вместо 201 и 202 можна использовать T1 и T2.

Цитата:
И еще. У меня модем на ttyUSB0 реально качает около 90Кбит/сек, а на ttyS0 - 16Кбит/сек. Можно ли с помощью ... weight 2 ... сделать трафик несимметричным?

Да.
Но теоретически Вы балансируете только исходящий траффик.
Этот исходящий траффик, как правило, инициирует сессии, траффик по которым всегда возвращается на тот интерфейс, с которого сессия начата. Сессии, начатые извне, Вы таким образом балансировать не можете.

У маршрута, заявленного первым, будет некоторый приоритет...

Аватар пользователя sergeil

Re: два модема в системе: как организовать работу?

ifup <имя_соединения1>
export SUB_NET1="`ip addr show ppp0 | grep inet | awk '{print $2}'`"
export DEF_ROU1="`ip route show default | grep default | awk '{print $3}'`"
ip route del default

ifup <имя_соединения2>
export SUB_NET2="`ip addr show ppp1 | grep inet | awk '{print $2}'`"
export DEF_ROU2="`ip route show default | grep default | awk '{print $3}'`"


ip rule   add from            $SUB_NET1  table 201
ip route add default via $DEF_ROU1  table 201

ip rule   add from            $SUB_NET2  table 202
ip route add default via $DEF_ROU2  table 202

ip route del default

ip route add default equalize scope global
nexthop via $DEF_ROU1 dev ppp0 weight 1
nexthop via $DEF_ROU2 dev ppp1 weight 1

ip route flush cache

Теперь вроде все правильно. Только проверить не на чем.
Модемных соединений нет...

Устройства ttyS0, ... - это устройство COM-порта и к сессии PPP никакого отношения не имеет. Вообще удивляюсь, что с ним связан какой-то IP адрес.

* имя_соединения - это лейба, обычно название провайдера. Зависит от того, как у Вас созданы ppp соединения.

Аватар пользователя birukoff

Re: два модема в системе: как организовать работу?

Пока не получилось.

Я скрипт начал так:

#/bin/bash
###############################################################
# Setup two routes
###############################################################
ifup /dev/ttyS0 #(пробовал ppp0 - результат такой - же, ifup просит устройства)
export SUB_NET1="`ip addr show ppp0 | grep inet | awk '{print $2}'`"
export DEF_ROU1="`ip route show default | grep default | awk '{print $3}'`"
ip route del default

ifup /dev/ttyUSB0
export SUB_NET2="`ip addr show ppp1 | grep inet | awk '{print $2}'`"
export DEF_ROU2="`ip route show default | grep default | awk '{print $3}'`"

запустил его и получил следующее:

/sbin/ifup: конфигурация для /dev/ttyS0 не найдена.
Применение: ifup <имя устройства>
/sbin/ifup: конфигурация для /dev/ttyUSB0 не найдена.
Применение: ifup <имя устройства>
RTNETLINK answers: File exists
Error: an inet address is expected rather than "table".
RTNETLINK answers: No such process
RTNETLINK answers: No such device
./2modes_scp: line 24: nexthop: command not found
./2modes_scp: line 25: nexthop: command not found

поскольку ppp0 и ppp1 я поднимаю вручную, пока нет надобности в проверке установлены они или нет. Для того, чтобы ifup понимал мои модемы как устройства, может надо в /etc/sysconfig/network-scripts/ создать для них файлы ifcfg-ppp0 и ifcfgppp1 с описанием типа DEVICE = ppp0 , MODEMPORT=/dev/ttyS0 и т.д.? А nexthop - функция, по-видимому?

Аватар пользователя sergeil

Re: два модема в системе: как организовать работу?

Цитата:
birukoff писал:
/sbin/ifup: конфигурация для /dev/ttyS0 не найдена.
Применение: ifup <имя устройства>

Да, модемы должны быть сконфигурированы
<Настройка сети>, ...

Будет:
1. Создан файл /etc/sysconfig/network-script/ifup-чего-то-там.
2. Будет создана секция в /etc/wvdial.conf с параметрами соединения.
3. В /etc/ppp/pap-secrets будут добавлены пароли...

Когда подывается канал ppp, создается устройство ppp. Нумерация начинается с нуля. То есть, первый поднятый ppp канал будет ассоциироваться с сетевым устройством ppp0, второй - ppp1...

Цитата:
А nexthop - функция, по-видимому?

Нет, то араметр для '/sbin/ip'.

man ip

Аватар пользователя birukoff

Re: два модема в системе: как организовать работу?

Запустил system-config-network. Выбрал модем, все про него написал, потом - еще раз описал второй модем. Так вот, после первого запуска в /etc/sysconfig/networking/devices появился файл ifcfg-xxx, потом, после попытки сконфигурировать второй модем, в этом каталоге появился файл ifcfg-yyy, а тот, который был, исчез. Я сделал много попыток, пытаясь понять, где ошибаюсь. Результат - всегда один файл в этом каталоге и в каталоге /etc/ppp/peers - аналогичная ситуация. Как это обойти?

А надо ли это делать вообще? У меня уже есть соединения, пусть и запущенные не скриптом ipup.Ведь когда я запускаю свои соединения, в системе появляются ppp0 и ppp1 и существуют одновременно. Дальше - теоретически - можно было бы как - то подправить таблицу маршрутизации.
сейчас она вот такая:
[root@localhost ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.12.136 0.0.0.0 255.255.255.255 UH 0 0 0 ppp1
194.158.206.81 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 lo
0.0.0.0 194.158.206.81 0.0.0.0 UG 0 0 0 ppp0

Аватар пользователя sergeil

Re: два модема в системе: как организовать работу?

Цитата:
birukoff писал:
...
Я сделал много попыток, пытаясь понять, где ошибаюсь. Результат - всегда один файл в этом каталоге и в каталоге /etc/ppp/peers - аналогичная ситуация. Как это обойти? А надо ли это делать вообще? У меня уже есть соединения, пусть и запущенные не скриптом ipup.

Если Ваш метод позволяет запускать соединения одно за другим из скрипта, то разницы нет. Мы можем использовать Ваши, уже настроенные, соединения...

Цитата:
Ведь когда я запускаю свои соединения, в системе появляются ppp0 и ppp1 и существуют одновременно.

Да, они существуют оба, но информация о шлюзе по умолчанию этого соединения уже потеряна. Куда пакеты пересылать будем?

Цитата:
Дальше - теоретически - можно было бы как - то подправить таблицу маршрутизации.

Если у Вас есть оба шлюза по умолчанию - то действительно нет проблем. Но проблема в том, что второе стартующее соединение удаляет маршрут по умолчанию и создает новый. То есть, шлюз первого соединения Вы теряете. Конечно, в случае, если Ваш провайдер настраивает proxy-arp, то IP адрес соединения равен IP адреса шлюза. Но это работает не всегда.

Цитата:
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 lo

Эта псевдо-сеть убирается через определение переменной NOZEROCONF=yes в файле /etc/sysconfig/network. Не знаю кто эту сеть использует. Только глаза мозолит...

Цитата:
0.0.0.0 194.158.206.81 0.0.0.0 UG 0 0 0 ppp0

У Вас есть только шлюз второго соединения. А какой адрес шлюза был у первого соединения? Кстати, раз уж мы серьезно заговорили о маршрутизации, то лучше использовать не `netstat -r`, а более продвинутую утилиту из набора iproute2.
То есть, полную информацию о маршрутизации даст только `ip route show`
[sergeil@homedesk ~]$ ip route show

...
10.101.0.0/16  proto zebra  metric 60 equalize
        nexthop via 172.16.101.17  dev gre101016 weight 1
        nexthop via 172.16.101.25  dev gre101024 weight 1
...

[sergeil@homedesk ~]$ netstat -r -n

...
10.101.0.0      172.16.101.17   255.255.0.0     UG        0 0          0 gre101016
...

То есть, netstat показал только первый маршрут Улыбка

Аватар пользователя Albert_j

Re: два модема в системе: как организовать работу?

Извиняюсь, что всез. Есть вопросик. Насколько я знаю, для диалап-соединения в каталоге /etc/ppp можно создать файлы ip-up.local и ip-down.local, в эти файлы поместить команды для маршрутизации и настройки файрвола, что-бы они отрабатывались при поднятиии и отключении соединения. А если соединений несколько?
Собственно скрипт /etc/ppp/ip-up:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[ -f /etc/sysconfig/network-scripts/ifcfg-${LOGDEVICE} ] && /etc/sysconfig/network-scripts/ifup-post ifcfg-${LOGDEVICE}

[ -x /etc/ppp/ip-up.local ] && /etc/ppp/ip-up.local "$@"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Если предыдущую строчку исправить на
-x /etc/ppp/ip-up.${LOGDEVICE} ] && /etc/ppp/ip-up.${LOGDEVICE}
Получу ли необходимый "эффект"?

Аватар пользователя sergeil

Re: два модема в системе: как организовать работу?

Цитата:
Насколько я знаю, для диалап-соединения в каталоге /etc/ppp можно создать файлы ip-up.local и ip-down.local, в эти файлы поместить команды для маршрутизации и настройки файрвола, что-бы они отрабатывались при поднятиии и отключении соединения. А если соединений несколько?
Собственно скрипт /etc/ppp/ip-up:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[ -f /etc/sysconfig/network-scripts/ifcfg-${LOGDEVICE} ] && /etc/sysconfig/network-scripts/ifup-post ifcfg-${LOGDEVICE}

[ -x /etc/ppp/ip-up.local ] && /etc/ppp/ip-up.local "$@"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Если предыдущую строчку исправить на
-x /etc/ppp/ip-up.${LOGDEVICE} ] && /etc/ppp/ip-up.${LOGDEVICE}
Получу ли необходимый "эффект"?

1. Я-бы не стал пологатся на этот механизм. К сожалению, я заметил, что он работает не всегда.

2. Не следует редактировать стандартные скрипты. Они будут перезаписаны при первом-же обновлении соответствующего пакета. Рекомендую использовать стандартный механизм и обработку поместить в /etc/ppp/ip-up.local. Но никто не мешает Вам вызвать /etc/ppp/ip-up.${LOGDEVICE} из /etc/ppp/ip-up.local

3. На какой эффект Вы рассчитываете?
Если по Теме:, то косвенно. Вы можете попытаться это использовать для сохранения параметров установленного соединения в файле в формате скрипта, устанавливающего переменные окружения.

Но, опять-же, напомнаю, что Вас может ждать глубокое разочарование, поскольку никто этот скрипт может и не вызвать...

Аватар пользователя birukoff

Re: два модема в системе: как организовать работу?

Мои соединения запускаются из скрипта:
одно - pppd call diallog
другое - wvdial;

По поводу скриптов ip-up. Там переменным присваиваются значения LOGDEVICE=$6 и REALDEVICE=$1
А где они определяются? Где-то же сначала должно произойти присвоение значений переменным $6 и $1?

Аватар пользователя sergeil

Re: два модема в системе: как организовать работу?

Цитата:
birukoff писал:
Мои соединения запускаются из скрипта:
одно - pppd call diallog
другое - wvdial;
По поводу скриптов ip-up. Там переменным присваиваются значения LOGDEVICE=$6 и REALDEVICE=$1 А где они определяются? Где-то же сначала должно произойти присвоение значений переменным $6 и $1?

Конечно, но я Вам, как раз, и не рекомендовал использовать ip-up.
http://www.dcaccess.net/welcome/linux/PPP-HOWTO-23.html

#       $1      the interface name used by pppd (e.g. ppp3)
#       $2      the tty device name
#       $3      the tty device speed
#       $4      the local IP address for the interface
#       $5      the remote IP address
#       $6      the parameter specified by the 'ipparam' option to pppd

Фрагмент /etc/sysconfig/network-scripts/ifup-ppp

...
# ifup-post for PPP is handled through /etc/ppp/ip-up
if [ "${1}" = daemon ] ; then
  # we've been called from ppp-watch, so don't invoke it for persistence
  shift
else
  # just in case a full path to the configuration file is passed in
  CONFIG=$(basename $1)
  [ -f "${CONFIG}" ] || CONFIG=ifcfg-${1}
  source_config
  # don't start ppp-watch by xDSL
  if [ "${DEMAND}" != yes -a "$TYPE" != "xDSL" ] ; then
    # let ppp-watch do the right thing
    shift
   exec /sbin/ppp-watch "${CONFIG##ifcfg-}" "$2"
  fi
fi

Убедитесь, что ip-up вызывается при старте обоих Ваших PPP соединений.
Есть у меня подозрение, что он не вызывается.

RSS-материал