И как это должно помочь?
Asterisk в отличии от того же FreeSWITCH не умеет динамически менять настройки о этого и проблема.
bolshoy_plohish ( 2012-06-08 04:28:08 +0400 )редактироватьИмеется Asterisk 1.6 на роутере с двумя внешними IP адресами (два разных интернет провайдера для надёжности). Сам по себе роутинг в линуксе разруливается с помощью source route. SIP клиенты могут залогинется только к одному IP который подставляется при default route, на второй IP можно залогинется только если клиент использует TCP SIP. Смотрел SIP монитором, астериск получает UDP SIP регистрацию на IP#2 но сам отвечает подставляя IP#1. Как побороть это?
Что бы решить вопрос с подключением по UDP на любой IP адрес придется сделать примерно следующее (пишу по памяти, применяйте только понимая что вы делаете):
echo "
101 rt_provider1
102 rt_provider1" >> /etc/iproute2/rt_tables
iptables -t mangle -A PREROUTING -i eth1 -j CONNMARK --set-mark 1
iptables -t mangle -I PREROUTING -i eth2 -j CONNMARK --set-mark 2
ip route add defalt via PROVIDER1_GATEWAY table rt_provider1
ip route add defalt via PROVIDER2_GATEWAY table rt_provider2
ip rule add pref 1000 fwmark 1 table rt_provider1
ip rule add pref 1001 fwmark 2 table rt_provider2
Подробности здесь http://lartc.org/lartc.html
А вообще, если все клиенты поддерживают TCP SIP и DNS SRV, то вам это все не нужно. Настраивайте SRV запись с двумя IP адресами и используйте SIP TCP. Не усложняйте себе жизнь :)
И как это должно помочь?
Asterisk в отличии от того же FreeSWITCH не умеет динамически менять настройки о этого и проблема.
bolshoy_plohish ( 2012-06-08 04:28:08 +0400 )редактироватьА цена вопроса ?
Если на шару(как у меня), то на сервере можно не указывать внешний IP, а маршрутизаторе указать что сервер принудительно ыходит через один канал, а если он падает, то через второй. Это хорошо если той сервер регится у SIP-провыйдера. Возможна и работа внешних абонентов, если сам телефон потдерживает функцию "резервный сервер" (видел такое в Грандстримах). В принципе всё работает весьма корректно. Можно даже и с доменом поиграться, как тут уже кто-то упоминал, тоже будет нормально работать.
Если за деньги(тоесть нужно действительно хорошая отказоустойчивость) то правильно оставить на сервере один IP и смотреть в сторону динамической маршрутизации. Купить зону BGP например.
Ещё как вариант можно использовать сам сервер(с 3-мя сетевушками), как шлюз в инет, это ещё проще всего.
"купить зону BGP" звучит особенно профессионально :) для этого нужен несколько иной маршрутизатор и несколько другой специалист. А еще нужно чтоб провайдеры согласились анонсировать вашу AS-ку. которую еще надо купить и кого-то из провайдеров уговорить на выделение PA адресов. Для смолл бизнеса это анриал и стоит прилично. Другое дело что можно вынести станцию (или прокси, как сказал meral) в ЦОД где всё вышеописанное уже проделано.
shakirov ( 2012-06-07 16:30:11 +0400 )редактироватьТак я и написал "за деньги" ))) Да звучит круто, но для какой-нить кортпорации, которая потеряет за час без телефонии стоимость зоны BGP впроне реально. Что касается ЦОД-а, вопрос, будут ли эти самые ЦОД-овцы настраивать QOS для Вас ? У меня свои небольшой ЦОД, я комплектую сервера для ещё полтора десятка ЦОД-ов, и я знаю как админы ЦОД-ов относятся к подобным заявкам. НО всё опять-же зависит от нагрузки на Ваш сервер.
amonra ( 2012-06-07 16:42:28 +0400 )редактироватьЕсть ещё вариант, поднять 2 сервера (можно виртуальных), кажый привязать к своему внешнему IP и в диалпланах обоих серверов прописать звонить на оба сервера сразу: Dial(SIP/${exten}@server1&SIP/${exten}@server2). Тут вообще будет полная отказоустойчивость.
Вообще можно много чего наворотить, просто нужно включить фаназию....)
amonra ( 2012-06-07 17:02:54 +0400 )редактироватьнафига ж такой ЦОД в котором надо QOS? вон в германию в хетзнер вынести. там 10мбит минимум будет на сервер. зак акието 30 евро. или я могу впс предоставить(realtime/voip настроено) за 30. про два сервера я писал.
meral ( 2012-06-08 00:16:00 +0400 )редактироватьАстериск тут не причем. у вас дефолтный маршут выходит через IP1, соответственно когда приходит пакет на IP2, выйдет он через IP1. Как вариант прописать маршуты для подсети для IP2. Но в любом случае будет работать только один. Чтобы отвечало с того интерфейса откуда пришел, нужно настраивать iptables и route.
:-) Что-то новенькое!
Здесь вот почитай для начала:
http://tools.ietf.org/html/rfc2543
bolshoy_plohish ( 2012-06-07 12:32:51 +0400 )редактироватьДругое дело, как можно перехватить пакеты и поправить на лету заголовки?
bolshoy_plohish ( 2012-06-07 12:42:58 +0400 )редактироватьпересылкой пакетов согласно маршрутам занимается OS. Если в sip.conf настроен bindaddr=0.0.0.0., а у сервера два белых ИП.то настраивать нужно маршрутизацию. поправьте если я ошибаюсь.
brost ( 2012-06-07 13:07:58 +0400 )редактироватьЕсли провайдер работатет по TCP то можно слать на одного по tcp а на др по udp, тогда source адреса точно можно сделать разными
bindport=5060
bindaddr=X.X.X.X;
tcpbindaddr=Y.Y.Y.Y
transport=tcp
На FreeSWITCH вроде как можно реализовать такую задачу.
Поставить FreeSWITCH перед Asteris.
У меня, правда, с наскоку разобраться не получилось.:-)))
Ставим роутер с тремя портами. Два WAN (два провайдера) и один LAN (астериск). На рутере настраиваем маркировкой соединений, все что пришло через WAN1 - отдавать через WAN1, что через WAN2 отдавать через WAN2. На астериске будет соответвенно всего один адресс с одним маршрутом.
угу. маркирование соединений это для меня чтото страшное. но все равно не будет работать. сами догадаетесь почему?)
meral ( 2012-06-07 00:31:30 +0400 )редактироватьэто очень сложная задача. астериск за натом так работаьт не будет.ибо нужно это единицам из милионов.
можно решить используя семейство ser(kamailio/opensips) но это уровень "ГУРУ".
еще можно решить делая sipnat на ваших роутерах. тоже гуру, только в iptables.
простое решение только одно - сделать на внешнем vps relay/nat и пробросить openvpn.
Asterisk не за NATом, роутер и есть Asterisk и у него 2 IP разных.
nil ( 2012-06-06 19:54:51 +0400 )редактироватьесли роутер и есть астериск, то все должно работать. ну если роут указан правильно и запросы приходят на интерфейс с которым сейчас дефаулт роут. в остальных случаях - смотри выше. как вариант можеет ДВА астерсика запустить.
meral ( 2012-06-07 00:33:07 +0400 )редактироватьБоюсь что эта задача решается только установкой роутера отдельного.
Нука, расскажи ка идею подобной конснструкции, а то я что-то сообразить не могу.
bolshoy_plohish ( 2012-06-06 18:02:10 +0400 )редактироватьвроде как всё просто, на роутере сорсроутинг включаем и маппим порт (с двух внешних интерфейсов) на внутренний IP с астериском.
shakirov ( 2012-06-06 18:12:38 +0400 )редактироватьне пройдет. астериск будет показывать внеший адрес толко один.
meral ( 2012-06-07 00:33:47 +0400 )редактироватьПочему не дать разруливать это Камалии например?
В данном случае, наверное, только используя externhost.
Только для этого нужно иметь доменное имя.
Если доменного имя нет, то можно использовать DinDNS или другие схожие сервисы.
externhost какая-то странная альтернатива. Две A записи для хоста указывать категорически нельзя, т.к. если один канал, то получится игра в рулетку. Как вариант - менять одну единственную A запись для хоста, но нужно учитывать, что бывают кэширующие днс сервера, которые будут держать в кэше старый адрес. В общем использование externhost во всех отношениях не есть хорошо. Проще менять externip при смене канала.
andy-none ( 2012-06-06 15:50:47 +0400 )редактироватьА при этом Asterisk передергивать не придется?
bolshoy_plohish ( 2012-06-06 16:32:32 +0400 )редактироватьЗадан: 2012-06-06 08:16:03 +0400
Просмотрен: 6,831 раз
Обновлен: Jun 07 '12
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.