Хорошая статья. Единственное когда я попытался ее реализовать без PPP подключений(у обоих провайдеров статика) возникла следующая проблема:
есть маршрут 8.8.8.8 через провайдера 1.
Ситуация 1 — у провайдера отпадает шлюз. Все ок, маршрут активен и все переключается.
Ситуация 2 — физический линк между микротиком и провайдером 1 разрывается. Т.к. интерфейс не активен — маршрут тоже становится неактивен. Это приводит к переключению на резерв, потом начинает пинговаться 8.8.8.8 (маршрут то не работает), скрипт кидает на основной канал, инета нет, кидает обратно. И так постоянно.
После вариантов переписывания скриптов решил проблему очень просто — создал bridge, и в него засунул ether1 с основным провайдером. Все! Маршрут доступен через bridge, и даже в случае обрыва линка — маршрут на 8.8.8.8 все равно активен, т.к. bridge тоже активен.
Качество связи через VPN с полным шфированием на телефонах Yealink хорошее, ничего не тормозит и не прерывается. На андроид я пробовал подключаться к телефонии через стандартное приложение play.google.com/store/apps/details?id=net.openvpn.openvpn&hl=ru. Оно не поддерживает работу с OpenVPN в режиме моста. Качество было вполне нормальное. Но единственное, я подключался не используя SRTP+TLS на SIP. Нужно подобрать клиента в котором можно удобно вставить все сертификаты, но я пока не искал. По поводу встроенного клиента SIP в Android даже честно говоря не в курсе. Использовал CSipSimple.
Тут все как раз нормально. Приложение на Android не поддерживает Bridge (tap) интерфейсы. Я же сделал специально с тунельным(tun), поэтому мобильные телефоны работают с тунелем нормально. Подготовка стандартная — вытащили файлики для телефона в папку, туда же положили файл *.ovpn со стандартным конфигом наподобие:
client
dev tun
proto udp
remote XXX.XXX.XXX.XXX 1194
resolv-retry infinite
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
comp-lzo no
verb 3
Единственное пока не было возможности проверить файлы pkcs12. В easyrsa есть скрипт генерации ./build-key-pkcs12. Телефон точно работает с этим форматом, т.е. можете сгенерить под него 1 файл и загрузить в приложении.
По поводу подключения SIP с TLS+SRTP прокомментировать не могу т.к. не пробовал пока. И не знаю какое приложение умеет с этим работать. Подозреваю что CSIPSimple умеет.
Мне казалось что все понятно.
Цель — защита голоса от прослушивания — при подключении через интернет.
Грабли находил на каждом шагу и решил что описывать их будет намного дольше — т.к. самая большая проблема — отсутствие нормальной инструкции как готовить сертификаты для телефона и генерировать их. Поэтому я заполнил данный пробел — написав инструкцию как соединить эти технологии и подготовить к этому сервер с OpenVPN, Asterisk и сам телефон. Пути решения — пока знаю только 1 — его и описал в статье. Надеялся узнать различные пути решения в комментариях. Про телефон особо и сказать нечего. По отзывам пользователя телефон сделан очень качественно, никакого люфта, удобные кнопки, можно очень быстро набирать номер без задержек, хорошее качество передачи речи и микрофон. По поводу же его внутренних настроек лично хотелось бы выразить свое недовольство китайцам — написавшим это чудовище. Не всегда логичный веб интерфейс — к примеру кнопка перезагрузки находится в меня Upgrade. Так же в Grandstream удобнее сделана загрузка сертификатов и ключей TLS. В них просто текстовые поля в которые можно скопировать содержимое сертификата и ключа. Тут надо готовить все заранее. Очень неудобно сделана загрузка настроек OpenVPN. Вместо того чтобы прикрутить поддержку PKCS12 — они сделали неописанную (я не нашел нормального описания в мануале) процедуру подготовки архива. Так же почему то модуль openvpn-client в телефоне собран без поддержки sha256 — тоже непонятно.
Это первая фаза проекта, дальше через сервер OpenVPN планируется запускать клиентов и к другим серверам, а не только к *. ( RDP например) На самом OpenVPN разруливать доступом разных клиентов к разным сервисам — поэтому сделали отдельный. Кстати если есть мысли то подскажите как разных клиентов пускать к разным сетевым адресам? Я пока придумал только через iptables. Да и SpiritOfVox прав по поводу кубы, это тоже повлияло при принятии решения.
Думаю это просто вопрос религии =)) С какой стороны отлавливать линии. Хотя мне кажется что в таком случае тоже может не сработать. Представьте себе сервер на котором висит порядка 50 абонентов которые куда то звонят, с отдельного транка вы запускаете оповещение, как будете считать линии? А если транков 20 и всё это связано с кучей астерисков которые гоняют друг через друга звонки? Мне кажется лучше контролировать количество файлов в папке.
Вы не учитываете что нужно контролировать количество одновременно занятых линий. Количество call файлов в папке Outgoing находящихся одновременно равняется количеству одновременно совершаемых звонков и соответственно занятых линий. Причем если вы закинете туда больше файлов, чем у Вас есть реальных линий, то соответственно не сможете дозвониться и очень быстро пройдут 5 попыток дозвона — данный звонок пойдёт в список не дозвонившихся и можно начинать сначала.
Могу пояснить для чего это делалось, так нужно было человеку который у заказчика занимается настройкой АТС, он прописывал в своей маршрутизации реальные номера которые продал Глобус на конкретные порты абонентов с аналоговыми телефонами. Так им удобнее вести учет и смотреть какому абоненту какой номер продали и так далее. Причем мало всего — данный человек сам хотел управлять переадресацией вызовов которую могут попросить абоненты(его, с аналоговыми линиями). А т.к. с Астериском он не работает ему так удобнее, при необходимости переадресации он со своей стороны всё настраивал и оттуда же управлял через что пойдёт переадресация к примеру на мобильный, либо его линии Е1 подключенные к АТС либо же через транк глобуса. Всё зависит от пожеланий заказчика. Я бы вообще выкинул эту АТС с удовольствием и прицепил к астериску плату для связи с линиями Е1 и шлюзы для аналоговых телефонов.
По поводу того, что при использовании данных приложений не указывается формат я с Вами полностью согласен, но когда я проверял на практике (Удалял файл который там был к примеру в формате gsm и клал туда допустим wav) он у меня не воспроизводил данный файл и сразу обрывал дальнейшие действия, поэтому я подумал что легче будет сделать так. А в кастомных диалпланах у меня нормально всё работало и естественно формат файла я не указывал. По поводу записи тоже согласен, но ситуации бывают разные, тут решили с обработкой не заморачиваться и всех всё устроило.
есть маршрут 8.8.8.8 через провайдера 1.
Ситуация 1 — у провайдера отпадает шлюз. Все ок, маршрут активен и все переключается.
Ситуация 2 — физический линк между микротиком и провайдером 1 разрывается. Т.к. интерфейс не активен — маршрут тоже становится неактивен. Это приводит к переключению на резерв, потом начинает пинговаться 8.8.8.8 (маршрут то не работает), скрипт кидает на основной канал, инета нет, кидает обратно. И так постоянно.
После вариантов переписывания скриптов решил проблему очень просто — создал bridge, и в него засунул ether1 с основным провайдером. Все! Маршрут доступен через bridge, и даже в случае обрыва линка — маршрут на 8.8.8.8 все равно активен, т.к. bridge тоже активен.
client
dev tun
proto udp
remote XXX.XXX.XXX.XXX 1194
resolv-retry infinite
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
comp-lzo no
verb 3
Единственное пока не было возможности проверить файлы pkcs12. В easyrsa есть скрипт генерации ./build-key-pkcs12. Телефон точно работает с этим форматом, т.е. можете сгенерить под него 1 файл и загрузить в приложении.
По поводу подключения SIP с TLS+SRTP прокомментировать не могу т.к. не пробовал пока. И не знаю какое приложение умеет с этим работать. Подозреваю что CSIPSimple умеет.
Цель — защита голоса от прослушивания — при подключении через интернет.
Грабли находил на каждом шагу и решил что описывать их будет намного дольше — т.к. самая большая проблема — отсутствие нормальной инструкции как готовить сертификаты для телефона и генерировать их. Поэтому я заполнил данный пробел — написав инструкцию как соединить эти технологии и подготовить к этому сервер с OpenVPN, Asterisk и сам телефон. Пути решения — пока знаю только 1 — его и описал в статье. Надеялся узнать различные пути решения в комментариях. Про телефон особо и сказать нечего. По отзывам пользователя телефон сделан очень качественно, никакого люфта, удобные кнопки, можно очень быстро набирать номер без задержек, хорошее качество передачи речи и микрофон. По поводу же его внутренних настроек лично хотелось бы выразить свое недовольство китайцам — написавшим это чудовище. Не всегда логичный веб интерфейс — к примеру кнопка перезагрузки находится в меня Upgrade. Так же в Grandstream удобнее сделана загрузка сертификатов и ключей TLS. В них просто текстовые поля в которые можно скопировать содержимое сертификата и ключа. Тут надо готовить все заранее. Очень неудобно сделана загрузка настроек OpenVPN. Вместо того чтобы прикрутить поддержку PKCS12 — они сделали неописанную (я не нашел нормального описания в мануале) процедуру подготовки архива. Так же почему то модуль openvpn-client в телефоне собран без поддержки sha256 — тоже непонятно.