systemd. opensips 1.7. centos7
Чтобы использовать автозагрузку на centos7 без понимания как работает systemd можно взять файл из новых версий opensips для systemd доработать его и добавить к себе в систему
- разместить файл opensips.service в /etc/systemd/multi-user.target.wants
- отредактировать файл:
[Unit]
Description=OpenSIPS is a very fast and flexible SIP (RFC3261) server
Documentation=man:opensips
After=network.target mariadb.service postgresql.service rtpproxy.service
Requires=mariadb.service
[Service]
Type=forking
User=root
Group=root
RuntimeDirectory=opensips
RuntimeDirectoryMode=775
Environment=P_MEMORY=32 S_MEMORY=32
EnvironmentFile=-/etc/sysconfig/opensips
PermissionsStartOnly=yes
PIDFile=%t/opensips/opensips.pid
ExecStart=/usr/local/sbin/opensips -P %t/opensips/opensips.pid -f /etc/opensips/opensips.cfg
ExecStop=/usr/bin/pkill –pidfile %t/opensips/opensips.pid
Restart=always
TimeoutStopSec=30s
LimitNOFILE=262144
[Install]
WantedBy=multi-user.target
3. выполнить systemctl enable openspis.service
по идее это всё, можно перезагружать, если ошибки будут, то проверить можно в логах journalctl -xe
полезная статья.
1.05.2019Черный список ip адресов для voip
sh скрипт который
!/bin/bash8.04.2019
BADIPSFILE="badips.list"
BADIPSFILETEMP="$BADIPSFILE".temp
ADDLISTFILE="$BADIPSFILE".load
# get new list
wget https://www.badips.com/get/list/voip/0 -O $BADIPSFILETEMP
# sort new list
sort $BADIPSFILETEMP -o $BADIPSFILETEMP
# touch to be sure that file exist
touch $BADIPSFILE
# diff old ans new file
diff $BADIPSFILE $BADIPSFILETEMP | grep -Po '\d+.\d+.\d+.\d+' > $ADDLISTFILE
# copy new file to old for next ips going fast
cp -f $BADIPSFILETEMP $BADIPSFILE
cp -f drop_temp.xml drop_temp_.xml
BLOCKED_IP=$ADDLISTFILE
IPTABLES="iptables"
if [ -f $BLOCKED_IP ]; then
while read BLOCKED; do
$IPTABLES -A INPUT_direct -i ens192 -s $BLOCKED -p udp -j DROP
done < $BLOCKED_IP
fi
troubleshoot. ACK sending to wrong host
solve is add function fix_sdp_contact() into onreply_route .
по-русски: проблема была в том, что опенсипс получая ACK от абонента не пересылал его обратно, через внутренний интерфейс железке. А слал ACK напрямую тому, кто указан был в 200 OK оригинальном. в Итоге помогло добавление функции в onreply_route которая по идее должна заменять поле контакт на адрес источника запроса.
29.11.2018opensips 1.11 uac_regstrant timer error 100% cpu load
При большом количестве записей от 150, начинаются проблемы с регистрацией, причина в моём случае в SRV lookup – это когда для домена сначала определяется SRV запись и если её нет, то тогда отдаётся обычная.
В моём случае помогла смена dns серверов на 8.8.8.8 и на 4.4.4.4.
7.04.2015Проблемы с виртуальной машиной. Opensips. KVM.
http://opensips-open-sip-server.1449251.n2.nabble.com/fr-timer-not-working-properly-td7588092.html
Вот здесь описывается случай с процессором AMD Opteron(tm) Processor 6344 (on KVM).
1.04.2015
Opensips. NAT. Port. Asterisk.
Почти день потратил на то чтобы понять почему при исходящем звонке нет звука.
Система такая:
Client A ( local IP) —> Router(TP-Link) —-> Opensips (NAT_HELPER) —-> Asterisk (1.8) (A2Billing) —–> Carrier
По SIP trace все гладко, порты, IP адреса, все подменяется просто отлично но аудио нет. Не слышно абонента.
Оказывается при выходе с TP-link media отправлялось не с 8000 порта, а с 1024. Чертов роутер меняет его по свему усмотрению, при это в SIP сообщение он не залезает, потому, что я отключил все “умные” функции связанные с SIP сообщениями на роутере, для чего? Для того, чтобы быть уверенным в том, что SIP сообщение отправленное мной, не претерпевает изменений.
Так вот, а Астериск получая медиа-трафик с порта 1024 слал его на 8000, т.к. в сообщении указан именно он. TP-Link разводил руками, че это мне на 8000 порт приходит трафик, я шлю только с 1024. В общем, в астериске есть настройка nat в sip.conf значение comedia означает, что астериск будет слать трафик на фактический адрес, с которого приходит медиа. Это решает такие проблемы.
| Posted in Проблемы при настройке | No Comments »
Load Balancing SIP
UAC – > LB -> (PROXY1 | PROXY2 | … ) -> UAS
Задача: раскидать звонки между sip proxy, сначала на PROXY1, в случае его недоступности на PROXY2.
В идеале если хочется распределять нагрузку между несколькими прокси серверами, то нужно делать LB в режиме stateless (использовать функцию forward() совместо с модулем dispatcher) однако в таком случае нет возможности сделать failover в случае падения одного из проксей, т.к. response нельзя поймать в отдельный блок. (хотя возможно разместив код в разделе onreply_route… надо будет проверить).
Сначала учтем ситуацию что в сообщении уже содержится route и вызовем функцию loose_route. без нее вы рискуете на некоторых звонках, это зависит от вашего окружения, получить зацикливание сообщений ACK. Нужно обязательно проверить, чтобы loose вызывался для ACK сообщений и участвующих в диалоге, а не для первых сообщений в диалоге, т.к. это может привести к пробеганию через ваш прокси трафика на чужие сервера, либо на поставщиков услуг, что страшнее, т.к. это сразу минус бабки.
Ниже представлен конфиг:
request_route {
if (loose_route()) { #Если сообщение содержит Route: то функция выдаст 1. Если его там нет, то 0. Здесь мы проверяем, есть ли в сообщении Route и если да, то…
xlog(“L_INFO”,”ACK TRansported…”); #Выводим в лог любую хрень полезную для понимания
t_relay(); #Оправляем сообщение согласно этому заголовку Route.
exit; #Завершаем выполнение скрипта, т.к. больше LB делать ничего не надо.
}
if (!ds_select_domain(“1”, “8”)) # Здест мы пользуемся функцией которая выберет для нас адрес прокси (proxy1) и подставит его в URI (первая строчка в SIP сообщении)
{
xlog(“L_ALERT”,”404 No route $ru”); # ВЫводим в лог сообщение елси ни один из проксей не доступен.
send_reply(“404″,”No route”); #Посылаем “клиенту” 404 сообщение, мол, нет возможности отправить вызов.
exit; # Завершаем скрипт
} else {
t_on_failure(“RTF_DISPATCH”); # Если таки прокси для сообщения определен, то привязываем ответ к разделу “RTF_DISPATH”, там мы поймаем ответ, и если он говорит о проблеме с прокси, то отправим сообщение на другой прокси.
xlog(“L_ALERT”,”Passed dispatcher $ru via $du $rm”); # Запишем в лог информацию о том, что сообщение будет отправленно на $ru.(при вызове функции ds_select_domain $ru меняется на новый
route(RELAY); # собственно отправляем сообщение в раздел где оно отправится к $ru.
}
}
| Posted in Без рубрики, Готовые решения | No Comments »
Переезд на 1.9 с 1.7.2
Из-за частых проблем с памятью и не желанием с ними бороться переехал на версию 1.9. Не скажу что задача сложная, несколько часов времени. большое желание переписать конфиг с его логикой.
Но в итоге все базы обновил, заполнил, все вертится на новье.
Большой минус в новой панели у модуля dialplan у меня web не заработал – скопировал со старой версии и удалил в некоторых частях ссылки на match_len – этого столбца в новой таблице диалплана – нет.
Привет.
| Posted in opensips | No Comments »