AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Android+openVPN+Asterisk

Newbies/FAQ Forum 23 сообщений -
#1

Привет всем!

Цель следующая - прицепить смартфон вообще (экспериментирую с HTC Desire X dual sim) к офисному астериску через openVPN-канал. Не напрямую по двум причинам:
1. Не хочу выставлять порты астериска наружу.
2. Попадал в ситуации, когда оператор, предоставляющий доступ в интернет грубо резал все, что не связано с http[s] и почтой.
Вывод - загоняем SIP в VPN, которая пойдет на 443-й порт офисного роутера.
Реализация:
0.На смартфоне Android 4.1.1. В качестве SIP-клиента беру 2 программы SIPDroid и Vimphone (там 729-й кодек встроен).
1. Первый шаг - берем программу SIPDroid (HTC зачем-то вырезала из прошивки возможность VoIP подключения стандартной звонилки). Подключаемся как SIP-телефон к офисной АТС по WiFi. Всё работает безупречно.
2. Шаг второй. Туннель openVPN поднимаю с помощью "openVPN для Android". Эта программа не требует рутования смартфона. Туннель поднимается успешно, офисные сервера я вижу, могу обмениваться с ними файлами. Подключаюсь к астериску... В итоге - меня слышно, я никого не слышу.
Разбираю полеты: Смартфон подключается к Астериску не с IP-адреса, который назначен через openVPN, а с IP-адреса, который смартфон получает от WiFi-DHCP-сервера (это хорошо видно по sip show peers). Соответственно ответный трафик направляется мимо кассы и я ничего не слышу. Это если пользоваться SIPDroid'oм. Vimphone ведет себя более хитро - он проводит двойную регистрацию, первая - с DHCP-адреса, вторая, сразу же за первой, с openVPN-адреса. sip show peers показывает вторую регистрацию. Но все равно - ответного трафика нет...

Вопрос - как корректно подключиться с андроидофона к офисному астериску через туннель openVPN? Как привязать звонилки к именно openVPN-адресу?
#2

первый раз узнали про NAT ?

чтоб были конкретные ответы - пишите адреса локалки, нат, клиента нат и сервера астера
#3

1. А веб-сервер, FTP-сервер и почтовый Вы тоже не хотите выставлять наружу? Что за глупости...
_________________
Gentoo Linux || Asterisk 11.2-cert3
Решения телефонии на базе Asterisk || http://it-need.ru
#4

Веб и FTP - на внешнем хостинге. И это правильно. Почтовый - единственное, что наружу выходит. Но его фиг заломаешь. * не хочу наружу выставлять. Нечего ему там (при наличии VPN) делать.
Про NAT - а причем здесь NAT? Я же сказал, что доступ к * из внешнего мира только через openVPN. То есть - для * все входящие соединения есть соединения локальной сети. И NAT не играет ни разу. Более того - есть ноут, который тоже является клиентом openVPN. На том же VPN-сервере. И никаких проблем добраться с него до * из программы linphone нет. Всё работает как часы. Сервер регистрирует клиента с IP, который получен клиентом от openVPN. Более того - у меня есть второй на фирме астериск (думаю и о третьем). Который связан с основным именно по opnenVPN. Проблем здесь нет.
На андроиде же - клиент попадает на сервер со своим "локальным", от DHCP, адресом. Почему этот "локальный" адрес проходит через openVPN - я понять не могу. Причем:
1. SIPDroid вообще ставит на игнор openVPN адресацию.
2. Vimphone вначале регистрируется с dhcp-адреса и сразу же за этим с openVPN-адреса. * показывает, что клиент законнекчен с openVPN-адреса, но ответный трафик, похоже (вечером уточню) гонит на dhcp-адрес. Где его получать некому...
#5

а вы попробуйте
поставьте в параметрах extension который идет с телефона NAT-YES

это ведь не долго ?
#6

Это не долго. Но бессмысленно. А именно:
1. Я поднимаю на андроиде openVPN. Получаю, при этом, IP-адрес из сети 192.168.128.0 (конкретный адрес зависит от ключа, с которым идет коннект).
2. Регистрируюсь на астеристке с sip андроида. Регистрируется оно не с адреса openVPN, а с какого-то dhcp серого адреса (например, 78.25.чегото.там, если иду через мегафоновскую 3G-сеть).
3. Пакеты от меня на астериск приходят. А отвечает он адресу 78.25.чегото.там... Куда эти пакеты будут направлены на роутере на котором реализована openVPN и который про этот адрес ни сном ни духом? В канал openVPN? С какой стати?
===================================
Попробовал... Заработало....


Последний раз редактировалось: Cruiser78 (Пн Янв 20, 2014 11:34)
#7

я запускал подобную схему.
она рабочая.
причем завелось не сразу. какие то софтовые телефоны на андроиде отказались так работать.

что ставил - уже не помню. помню что для отпуска делал. Smile

_________________
Алексей Милько
#8

Cruiser78 @ Пн Янв 20, 2014 12:27 писал(а):
...
3. Пакеты от меня на астериск приходят. А отвечает он адресу 78.25.чегото.там... Куда эти пакеты будут направлены на роутере на котором реализована openVPN и который про этот адрес ни сном ни духом? В канал openVPN? С какой стати?


В настройках SIP абонента в Астериске пропишите host=IP адресс внутренней сети.
Настройте, что бы клиенту OpenVPN с определенным MAC адресом выдавался определенный IP адрес. Это можно сделать резервацией в DHCP по MAC.

_________________
С уважением, DarkUser.
#9

что я не улавливаю вашу схему

нормально это вот так

подсоединяю через vpn
получаю адрес из внутренней сети
присоединяюсь к внутреннему адресу сервера asterisk

криво вот так

подсоединяю через vpn
не получаю внутренний адрес
присоединяюсь к vpn адресу сервера asterisk
#10

Совершенно верно.
Идем по правильному пути:
1. Подключаемся по VPN.
2. Поднимается tun-интерфейс.
3. Этому tun-интерфейсу средствами openVPN присваивается адрес внутренней сети и задаются определенные правила маршрутизации.
4. Подключаемся к астериску по его внутреннему адресу, то есть через туннель openVPN, через интерфейс tun0.

Но подключение, почему-то, происходит не с адреса tun-интерфейса, а с адреса eth0 (я не знаю как там интерфейсы в андроиде именуются), который был получен по DHCP, когда поднимался или WiFi, или 3G.

Причем - если я работаю с ноута, где организован свой канал openVPN - такой заморочки не наблюдается. SIP-клиент коннектится к астериску именно с адреса tun-интерфейса. То есть с адреса, который был назначен в openVPN.
#11

если идет подключение не с того интерфейса - значит маршрутизация не правильная

проверьте через traceroute
#12

если маршрутизация неправильная, то как я по самбе к офисным серверам (к которым доступ есть только через openVPN) по внутренним адресам подключаюсь? Так что, маршрутизация - она правильная. А вот почему SIP-андроид выходит из туннеля с иным, нетуннельным, адресом - я никак не пойму.
#13

В клиенте сервер прописан по имени? А при подключенном VPN оно разрешается во внешний адрес или во внутренний?
#14

всё просто.
программа биндится на итервейсе подключенному к интернет, а не openvpn.
таких "программ" и для десктопных ОС хватает.
нужно попробовать другого клиента для SIP.
#15

стесняюсь спросить, а маршрут в домашнюю сеть на клиенте прописан?

типа такого:
#маршрут на домашнюю сеть
route 192.168.33.0 255.255.255.0 192.168.2.1

#192.168.33.0 255.255.255.0 - домашняя подсеть
#192.168.2.1 - сервер овпн

ну или так:
redirect-gateway #тогда весь трафик пойдет через овпн

Added after 3 minutes:

а вообще выложи трассировку с астериска до андроида и с андроида до астера.
#16

Отвечаю всем сразу:

1. В настройках openVPN я издавна не использую имен. Только IP-адреса.
2. Настройка маршрутизации следующая:
Код:
# cat /etc/openvpn/ccd/Alex-HTC
# приcваиваем ip-адрес
ifconfig-push 192.168.128.34 192.168.128.33
iroute 192.168.6.0 255.255.255.0

# роутинг на сети центрального офиса
push "route 192.168.43.0 255.255.255.0 192.168.128.33"

# роутинг на сеть второго офиса
push "route 192.168.53.0 255.255.255.0 192.168.128.33"


Ну и на самом астериске маршруты:
Код:
# ip r
192.168.53.0/24 via 192.168.43.2 dev eth0
192.168.128.0/24 via 192.168.43.2 dev eth0
192.168.0.0/24 via 192.168.43.2 dev eth0
.....
default via 192.168.42.1 dev eth1

То есть, всё, что должно работать через OpenVPN заворачивается именно на OpenVPN-сервер. Дефолтный маршрут - на внешний роутер, который сидит на втором интерфейсе. Так что если * захочет отправить какой пакет на некий IP, который не есть "моя сеть", то кинет его на внешний роутер и такой кривой клиент ничего не получит.

Но я, похоже, добился устойчивого коннекта. А именно - спасибо awsswa за его настойчивость - включил NAT для клиента и трафик пошел правильно, в нужном направлении. Но это, считаю, неправильно, астериск должен получать пакеты с андроидного tun-интерфейса, с openVPN-адреса.
#17

посмотрите csipsimple и кодек speex8. по трафику и качеству +- как g729.
#18

Лучше бы l2tp использовал бы )
_________________
FreeBSD X.XX - Asterisk X.XX
#19

Еще можно SIP TLS+SRTP
Не просто же так придумали )))

_________________
Gentoo Linux || Asterisk 11.2-cert3
Решения телефонии на базе Asterisk || http://it-need.ru
#20

А еще можно не мучатся SIP-ом, а использовать IAX.
Благо Zoiperесть и под Android, iOS, Windows i Linux

I wse normalno rabotaet.
#21

Cruiser78
получилось что-то?
сколько уже советов "надавали", а о результате не слышно.
#22

Так я уже несколько раз написал, что всё заработало когда NAT для данного клиента включил.. А за советы - спасибо. Будем смотреть, пробовать, подбирать оптимум...
#23

то есть я был прав ? с первом же ответе Smile