Вход | Регистрация
Вы здесь: Главная / Форум / Главный форум по Asterisk / Конфигурация и настройка / два ISP и внешние SIP-клиенты Asterisk

два ISP и внешние SIP-клиенты Asterisk

Сообщений: 2

два ISP и внешние SIP-клиенты Asterisk

Добрый вечер

Есть сервер с тремя интерфейсами

один локально сети и два внешних каждый к своему интернет провайдеру ISP (хорошему и плохому)
хороший провайдер должен использоваться для VoIP трафика, плохой для всего остального

1. default route установлен на плохого провайдера
2. для каждого провайдера создана таблица маршрутизации и настроена маршрутизация внешних подключений по испочнику
3. Для SIP-провайдеров с известными IP настроен роутинг черз "хорошего" ISP

4. Внешние sip-клиенты (с силно динамическими адресами) регистрируются по адресу интерфеса хорошего провайдера, а вот голосовой трафик идет самостоятельно по интерфесу "плохого" провапйдера (он default route)

Как сделать так чтобы голосовой трафик шел через интерфейс хорошего провайдера при том что весь остальной трафик (не VoIP) должно идти на плохого?









2010-11-24 18:08

Сообщений: 80

Re: два ISP и внешние SIP-клиенты Asterisk

может ставить метки с помошью iptables на нужные пакеты и делать роутинг по меткам?

http://linux-ip.net/html/adv-multi-internet.html
2010-11-24 20:29

Сообщений: 2

Re: два ISP и внешние SIP-клиенты Asterisk

Собственно так и мы пробовали, но голосовой трафик все равно идет через wimax0. Может быть сможете подсказать где ошибка


#!/bin/sh

# включения
. /root/asScript/lib/net.sh


IF0='eth0' # именем нтерфейса (if0 на рисунке)
IF1='wimax0' # именем первого интерфейса (if1 на рисунке)
IF2='eth1' # именем второго интерфейса (if1 на рисунке)


IP0=$(ifIP ${IF0}) # IP адресом $IF0
IP1=$(ifIP ${IF1}) # IP адресом $IF1
IP2=$(ifIP ${IF2}) # IP адресом $IF2

P0=$(ifGate ${IF0}) # IP-адрес шлюза
P1=$(ifGate ${IF1}) # IP-адрес шлюза провайдера 1
P2=$(ifGate ${IF2}) # IP адрес шлюза провайдера 2

P0_NET=$(ifNet ${IF0}) # IP сеть, к которой принадлежит $P0
P1_NET=$(ifNet ${IF1}) # IP сеть, к которой принадлежит $P1
P2_NET=$(ifNet ${IF2}) # IP сеть, к которой принадлежит $P2

P2=XXX.XXX.XXX.XXX -- провайдер с хорошим джиттером

echo ==============
echo "${IF0} ip=${IP0} gate=${P0} net=${P0_NET}"
echo "${IF1} ip=${IP1} gate=${P1} net=${P1_NET}"
echo "${IF2} ip=${IP2} gate=${P2} net=${P2_NET}"
echo ==============

if [ "${P1}" != "0.0.0.0" ]; then
/sbin/ip route add default via ${P1} table T1
fi
if [ "${P2}" != "0.0.0.0" ]; then
/sbin/ip route add default via ${P2} table T2
fi

#Теперь добавляем правила для маршрутизации по источнику
if [ "${P1}" != "0.0.0.0" ]; then
/sbin/ip rule add from ${IP1} table T1
fi
if [ "${P2}" != "0.0.0.0" ]; then
/sbin/ip rule add from ${IP2} table T2
fi

# Устанавливаем самого дешевого провайдера как default гейт
if [ "${IP1}" != "0.0.0.0" ]; then
/sbin/ip route add default via ${IP1}
fi



IPTABLES=/usr/sbin/iptables
LOCALNET=172.17.17.0/24
# пытемся повысит приоритет QoS
$IPTABLES -A OUTPUT -t mangle -p udp -m udp --dport 5060 -j DSCP --set-dscp-class cs3 # SIP
$IPTABLES -A OUTPUT -t mangle -p tcp -m tcp --dport 5060 -j DSCP --set-dscp-class cs3 #SIP
$IPTABLES -A OUTPUT -t mangle -p udp -m udp --sport 10100:10199 -j DSCP --set-dscp-class ef # RTP
$IPTABLES -A OUTPUT -t mangle -p tcp -m tcp --dport 1720 -j DSCP --set-dscp-class cs3 # H.323
$IPTABLES -A OUTPUT -t mangle -p udp -m udp --dport 1720 -j DSCP --set-dscp-class cs3 # H.323


# метим пакеты правильно ???
$IPTABLES -A OUTPUT -t mangle -p udp -m udp --sport 5060 ! -d $LOCALNET -j MARK --set-mark 2
$IPTABLES -A OUTPUT -t mangle -p tcp -m tcp --sport 5060 ! -d $LOCALNET -j MARK --set-mark 2

$IPTABLES -A OUTPUT -t mangle -p udp -m udp --dport 5060 ! -d $LOCALNET -j MARK --set-mark 2
$IPTABLES -A OUTPUT -t mangle -p tcp -m tcp --dport 5060 ! -d $LOCALNET -j MARK --set-mark 2
$IPTABLES -A OUTPUT -t mangle -p udp -m udp --sport 10100:10199 ! -d $LOCALNET -j MARK --set-mark 2
$IPTABLES -A OUTPUT -t mangle -p tcp -m tcp --dport 1720 ! -d $LOCALNET -j MARK --set-mark 2
$IPTABLES -A OUTPUT -t mangle -p udp -m udp --dport 1720 ! -d $LOCALNET -j MARK --set-mark 2

$IPTABLES -A OUTPUT -t mangle -p tcp -m tcp --sport 1720 ! -d $LOCALNET -j MARK --set-mark 2
$IPTABLES -A OUTPUT -t mangle -p udp -m udp --sport 1720 ! -d $LOCALNET -j MARK --set-mark 2


#Теперь добавляем правила для маршрутизации по маркеру
if [ "${P2}" != "0.0.0.0" ]; then
/sbin/ip rule add fwmark 2 table T2
fi




:~ # ip rule show
0: from all lookup local
32760: from all fwmark 0x2 lookup T2
32761: from 87.245.184.218 lookup T2
32762: from 94.25.150.155 lookup T1
32763: from all fwmark 0x2 lookup T2
32764: from 87.245.184.218 lookup T2
32765: from 94.25.150.155 lookup T1
32766: from all lookup main
32767: from all lookup default











2010-11-24 21:11

Avatara of sun28
Откуда: Вулкан
Сообщений: 14

Re: два ISP и внешние SIP-клиенты Asterisk

asterisk умеет маркировать трафик, iptables умеет эти маркеры обрабатывать.

Самое правильное решение на мой взгляд, это разделение функций маршрутизации и обработки голосового трафика.
Зачем смешивать сущности, asterisk должен работать на сервере приложений, а не на маршрутизаторе.
Выделив asterisk адрес из сети выданной "хорошим" провайдером, вы получите конфеты автоматически, идеальным вариантом будет BGP.

Самый простой вариант, статические маршруты до клиентов через шлюз хорошего провайдера. Удачи.
WBR
2010-11-25 11:57

Добавить страницу в закладки:  Delicious Google Slashdot Yahoo Yandex.ru Reddit Digg Technorati Bobrdobr.ru Newsland.ru Smi2.ru Rumarkz.ru Vaau.ru Memori.ru Rucity.com Moemesto.ru News2.ru Mister-Wong.ru Myscoop.ru 100zakladok.ru