真没想到电信代理服务器(电信代理服务器地址)
OpenSIPS 是用于语音、视频、IM、在线状态和任何其他SIP扩展的开源 SIP 代理服务器。OpenSIPS 被推荐用于任何类型的 SIP
概述在众多的sip服务器中,主要有俩大类,一类侧重于媒体/业务服务器,比如freeswitch/asterisk,另一类侧重于代理/负载服务器,比如opensips/kamailio今天我们对opensips做一个简单介绍。
OpenSIPS 是用于语音、视频、IM、在线状态和任何其他SIP扩展的开源 SIP 代理服务器OpenSIPS 是一种多功能、多用途的SIP信令服务器,运营商、电信或 ITSP 将其用于 Class4/5平台、中继、企业/虚拟 PBX 解决方案、会话边界控制器、应用服务器、前端负载等解决方案、IMS 平台、呼叫中心等等。
OpenSIPS 被推荐用于任何类型的 SIP 场景/服务:高吞吐量 - 数万CPS,数百万个在线呼叫(参见官方测试)路由和集成的灵活性 - 用于实现自定义路由逻辑的路由脚本,多个接口 API(参见手册)
有效的应用程序构建 - 超过 120 个模块提供功能,用于 SIP 处理、后端操作、集成、路由逻辑(请参阅模块列表)本章节主要介绍opensips的编译安装、配置启动的通用流程开发环境Centos:CentOS release 6 (Final)或以上版本。
opensips:2.4.9GCC/C++:4.4.7编译安装依赖库yum install -y autoconf automake libtool gcc-c++ ncurses-devel make
zlib-devel lynx flex bison mysql pcre python-devel openssl-devel mysql-devel安装hiredisgitclone https://github.com/redis/hiredis.git hiredis
cdhiredismakeinstall源码安装包:https://opensips.org/pub/opensips/2.4.9/opensips-2.4.9.tar.gz wget https://opensips.org/pub/opensips/2.4.9/opensips-2.4.9.tar.gz
tar –zxvf opensips-2.4.9.tar.gz编译安装:方法1:cd opensips-2.4.9 make include_modules="cachedb_redis db_mysql dialplan python tls_mgm proto_tls proto_ws proto_wss "
prefix="/usr/local/opensips" install方法2:cdopensips-2.4.9makemenuconfig增加cachedb_redis db_mysql dialplan python tls_mgm proto_tls proto_ws proto_wss 模块编译
修改安装目录为/usr/local/opensips保存退出menuconfigmakeinstall目录结构默认安装路径为 /usr/local/opensips编译安装完成后,检查安装目录opensips
├── etc │ └── opensips │ ├── opensips.cfg │ ├── opensipsctlrc │ ├── osipsconsolerc
│ ├── scenario_callcenter.xml │ └── tls │ ├── ca.conf │ ├── README │ ├──
request.conf │ ├── rootCA │ │ ├── cacert.pem │ │ ├── certs │ │ │ └── 01
.pem │ │ ├── index.txt │ │ ├── private │ │ │ └── cakey.pem │ │ └──
serial │ ├── user │ │ ├── user-calist.pem │ │ ├── user-cert.pem │ │ ├──
user-cert_req.pem │ │ └── user-privkey.pem │ └── user.conf ├── lib64 │ └── opensips
│ ├── modules │ │ ├── acc.so │ │ ├── alias_db.so │ │ ├── auth_aaa.so │ │ ├──
auth_db.so │ │ ├── auth.so │ │ ├── avpops.so │ │ ├── b2b_entities.so │ │ ├──
b2b_sca.so │ │ ├── benchmark.so │ │ ├── cachedb_local.so │ │ ├── cachedb_redis
.so │ │ ├── cachedb_sql.so │ │ ├── call_center.so │ │ ├── call_control.so │ │ ├──
cfgutils.so │ │ ├── clusterer.so │ │ ├── db_cachedb.so │ │ ├── db_flatstore.so
│ │ ├── db_mysql.so │ │ ├── db_text.so │ │ ├── db_virtual.so │ │ ├──
dialog.so │ │ ├── dialplan.so │ │ ├── dispatcher.so │ │ ├── diversion.so │ │ ├──
dns_cache.so │ │ ├── domainpolicy.so │ │ ├── domain.so │ │ ├── drouting.so │ │ ├──
enum.so │ │ ├── event_datagram.so │ │ ├── event_flatstore.so │ │ ├── event_jsonrpc
.so │ │ ├── event_route.so │ │ ├── event_routing.so │ │ ├── event_virtual.so │ │ ├──
event_xmlrpc.so │ │ ├── exec.so │ │ ├── fraud_detection.so │ │ ├── freeswitch_scripting
.so │ │ ├── freeswitch.so │ │ ├── gflags.so │ │ ├── group.so │ │ ├──
imc.so │ │ ├── jsonrpc.so │ │ ├── load_balancer.so │ │ ├── mangler.so │ │ ├──
mathops.so │ │ ├── maxfwd.so │ │ ├── mediaproxy.so │ │ ├── mi_datagram.so │ │ ├──
mid_registrar.so │ │ ├── mi_fifo.so │ │ ├── mi_http.so │ │ ├── mi_json.so │ │ ├──
msilo.so │ │ ├── nathelper.so │ │ ├── nat_traversal.so │ │ ├── options.so │ │ ├──
path.so │ │ ├── peering.so │ │ ├── permissions.so │ │ ├── pike.so │ │ ├──
presence_callinfo.so │ │ ├── presence_xcapdiff.so │ │ ├── proto_bin.so │ │ ├──
proto_hep.so │ │ ├── proto_ws.so │ │ ├── python.so │ │ ├── qos.so │ │ ├──
ratelimit.so │ │ ├── registrar.so │ │ ├── rr.so │ │ ├── rtpengine.so │ │ ├──
rtpproxy.so │ │ ├── script_helper.so │ │ ├── seas.so │ │ ├── signaling.so │ │ ├──
sipcapture.so │ │ ├── sip_i.so │ │ ├── sipmsgops.so │ │ ├── siptrace.so │ │ ├──
sl.so │ │ ├── sms.so │ │ ├── speeddial.so │ │ ├── sql_cacher.so │ │ ├──
sst.so │ │ ├── statistics.so │ │ ├── stun.so │ │ ├── textops.so │ │ ├──
tls_mgm.so │ │ ├── tm.so │ │ ├── topology_hiding.so │ │ ├── uac_auth.so │ │ ├──
uac_redirect.so │ │ ├── uac_registrant.so │ │ ├── uac.so │ │ ├── uri.so │ │ ├──
userblacklist.so │ │ └── usrloc.so │ └── opensipsctl │ ├── dbtextdb │ │ └──
dbtextdb.py │ ├── opensipsctl.base │ ├── opensipsctl.ctlbase │ ├── opensipsctl
.dbtext │ ├── opensipsctl.fifo │ ├── opensipsctl.mysql │ ├── opensipsctl
.sqlbase │ ├── opensipsctl.unixsock │ ├── opensipsdbctl.base │ ├── opensipsdbctl
.dbtext │ └── opensipsdbctl.mysql ├── sbin │ ├── opensips │ ├── opensipsctl │ ├── opensipsdbctl
│ ├── opensipsunix │ ├── osipsconfig │ └── osipsconsole └── share ├── doc │ └── opensips
│ ├── AUTHORS │ ├── INSTALL │ ├── NEWS │ ├── README │ ├──
README.acc │ ├── README.alias_db │ ├── README.auth │ ├── README.auth_aaa
│ ├── README.auth_db │ ├── README.avpops │ ├── README.b2b_entities │ ├──
README.b2b_sca │ ├── README.benchmark │ ├── README.cachedb_local │ ├──
README.cachedb_redis │ ├── README.cachedb_sql │ ├── README.call_center │ ├──
README.call_control │ ├── README.cfgutils │ ├── README.clusterer │ ├──
README.db_cachedb │ ├── README.db_flatstore │ ├── README.db_mysql │ ├──
README.db_text │ ├── README.db_virtual │ ├── README.dialog │ ├── README
.dialplan │ ├── README.dispatcher │ ├── README.diversion │ ├── README.dns_cache
│ ├── README.domain │ ├── README.domainpolicy │ ├── README.drouting │ ├──
README.enum │ ├── README.event_datagram │ ├── README.event_flatstore │ ├──
README.event_jsonrpc │ ├── README.event_route │ ├── README.event_routing │ ├──
README.event_virtual │ ├── README.event_xmlrpc │ ├── README.exec │ ├──
README.fraud_detection │ ├── README.freeswitch │ ├── README.freeswitch_scripting │ ├──
README.gflags │ ├── README.group │ ├── README.imc │ ├── README.jsonrpc │ ├──
README.load_balancer │ ├── README.mangler │ ├── README.mathops │ ├── README
.maxfwd │ ├── README.mediaproxy │ ├── README.mi_datagram │ ├── README.mid_registrar
│ ├── README.mi_fifo │ ├── README.mi_http │ ├── README.mi_json │ ├──
README-MODULES │ ├── README.msilo │ ├── README.nathelper │ ├── README.nat_traversal
│ ├── README.options │ ├── README.path │ ├── README.peering │ ├──
README.permissions │ ├── README.pike │ ├── README.presence_callinfo │ ├──
README.presence_xcapdiff │ ├── README.proto_bin │ ├── README.proto_hep │ ├──
README.proto_ws │ ├── README.python │ ├── README.qos │ ├── README.ratelimit
│ ├── README.registrar │ ├── README.rr │ ├── README.rtpengine │ ├──
README.rtpproxy │ ├── README.script_helper │ ├── README.seas │ ├── README
.signaling │ ├── README.sipcapture │ ├── README.sip_i │ ├── README.sipmsgops
│ ├── README.siptrace │ ├── README.sl │ ├── README.sms │ ├──
README.speeddial │ ├── README.sql_cacher │ ├── README.sst │ ├── README.statistics
│ ├── README.stun │ ├── README.textops │ ├── README.tls_mgm │ ├──
README.tm │ ├── README.topology_hiding │ ├── README.uac │ ├── README.uac_auth
│ ├── README.uac_redirect │ ├── README.uac_registrant │ ├── README.uri
│ ├── README.userblacklist │ └── README.usrloc ├── man │ ├── man5 │ │ └──
opensips.cfg.5 │ └── man8 │ ├── opensips.8 │ ├── opensipsctl.8 │ └──
opensipsunix.8 └── opensips ├── dbtext │ └── opensips │ ├── acc │ ├──
active_watchers │ ├── address │ ├── aliases │ ├── b2b_entities
│ ├── b2b_logic │ ├── b2b_sca │ ├── cachedb │ ├──
carrierfailureroute │ ├── carrierroute │ ├── cc_agents │ ├──
cc_calls │ ├── cc_cdrs │ ├── cc_flows │ ├── closeddial │ ├──
clusterer │ ├── cpl │ ├── dbaliases │ ├── dialog │ ├──
dialplan │ ├── dispatcher │ ├── domain │ ├── domainpolicy │ ├──
dr_carriers │ ├── dr_gateways │ ├── dr_groups │ ├── dr_partitions
│ ├── dr_rules │ ├── emergency_report │ ├── emergency_routing
│ ├── emergency_service_provider │ ├── fraud_detection │ ├──
freeswitch │ ├── freeswitch_scripting │ ├── globalblacklist │ ├──
grp │ ├── imc_members │ ├── imc_rooms │ ├── load_balancer │ ├──
location │ ├── missed_calls │ ├── presentity │ ├── pua │ ├──
registrant │ ├── re_grp │ ├── rls_presentity │ ├── rls_watchers
│ ├── route_tree │ ├── rtpengine │ ├── rtpproxy_sockets │ ├──
silo │ ├── sip_trace │ ├── speed_dial │ ├── subscriber │ ├──
tls_mgm │ ├── uri │ ├── userblacklist │ ├── usr_preferences
│ ├── version │ ├── watchers │ └── xcap ├── menuconfig_templates
│ ├── opensips_loadbalancer_def.m4 │ ├── opensips_loadbalancer.m4 │ ├──
opensips_residential_def.m4 │ ├── opensips_residential.m4 │ ├── opensips_trunking_def
.m4 │ └── opensips_trunking.m4 └── mysql ├── acc-create.sql ├──
alias_db-create.sql ├── auth_db-create.sql ├── avpops-create.sql ├──
b2b-create.sql ├── b2b_sca-create.sql ├── cachedb_sql-create.sql ├──
call_center-create.sql ├── carrierroute-create.sql ├── closeddial-create.sql ├──
clusterer-create.sql ├── cpl-create.sql ├── dialog-create.sql ├──
dialplan-create.sql ├── dispatcher-create.sql ├── domain-create.sql ├──
domainpolicy-create.sql ├── drouting-create.sql ├── emergency-create.sql ├──
fraud_detection-create.sql ├── freeswitch_scripting-create.sql ├── group-create
.sql ├── imc-create.sql ├── load_balancer-create.sql ├── msilo-create
.sql ├── permissions-create.sql ├── presence-create.sql ├── registrant-create
.sql ├── rls-create.sql ├── rtpengine-create.sql ├── rtpproxy-create
.sql ├── siptrace-create.sql ├── speeddial-create.sql ├── standard-create
.sql ├── tls_mgm-create.sql ├── uri_db-create.sql ├── userblacklist-create
.sql └── usrloc-create.sql创建数据库注意事项:该操作需要保证对应数据库没有创建过cd /usr/local/opensips/etc/opensips/ vi opensipsctlrc DBENGINE=MYSQL DBPORT=3306 DBHOST=192.168.0.110 DBNAME=opensips DBRWUSER=root DBRWPW=
"opensips" DBROOTUSER="root"执行命令/usr/local/opensips/sbin/opensipsdbctl create防火墙CENTOS6iptables-IINPUT
1–pudp–dport5060–jACCEPTiptables-IINPUT1–ptcp–dport7443–jACCEPTserviceiptablessaveCENTOS7firewall-cmd --permanent --zone=public --add-rich-rule=
rule family="ipv4" port port="5060" protocol="udp" accept firewall-cmd --permanent --zone=public --add-rich-rule=
rule family="ipv4" port port="7443" protocol="tcp" accept firewall-cmd --reload配置日志修改 /usr/local/opensips/etc/opensips/opensips.cfg
log_facility=LOG_LOCAL0修改 /etc/rsyslog.conflocal0.* -/var/log/opensips/opensips.log新增 /etc/logrotate.d/opensips
/var/log/opensips/opensips.log { copytruncate noolddir size 20M rotate 64 dateext dateformat .%Y%m%d.%s sharedscripts postrotate /bin/
kill -HUP `cat /var/run/syslogd.pid 2>/dev/null`2>/dev/null || true endscript }设置定时任务sudo crontab -e
* * ** * /usr/sbin/logrotate /etc/logrotate.d/opensips重启rsyslog服务service rsyslog restartTCP最大连接数限制用户级别
查看linux系统用户最大打开文件限制ulimit -n修改limits.confvi /etc/security/limits.conf * soft nofile 100000 * hard nofile 100000
linux系统级别查看linux系统对同时打开文件数的硬限制sysctl -a|grep file-max修改sysctl.confvi /etc/sysctl.conf fs.file-max = 100000
使sysctl配置立即生效:sysctl -p网络端口限制修改,服务器需要作为client时配置查看linux系统最大追踪TCP连接数量sysctl -a | grep ipv4.ip_conntrack_max
查看linux系统端口范围sysctl -a | grep ipv4.ip_local_port_range修改sysctl.confvi/etc/sysctl.confnet.ipv4.ip_local_port_range
=1024065535net.netfilter.nf_conntrack_max=100000使sysctl配置立即生效:sysctl -pLinux下查看tcp连接数及状态命令:netstat -n | awk
/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}统计7443端口连接数netstat -nat|grep -i "7443"|wc -l统计已连接上的,状态为established
netstat -na|grep ESTABLISHED|wc -l查出哪个IP地址连接最多,异常情况需要封IPnetstat -na|grep ESTABLISHED|awk {print $5}|awk -F:
{print $1}|sort|uniq -c|sort -r netstat -na|grep SYN|awk {print $5}|awk -F: {print $1}|sort|uniq -c|sort
-r启动脚本cd opensips-2.4.9/packaging/redhat_fedora cp opensips.init /etc/init.d/opensips chmod 777 /etc/
init.d/opensips sed -i "s/\/usr\/sbin/\/usr\/local\/opensips\/sbin/g" /etc/init.d/opensips sed -i "s/\/etc\/\$prog/\/usr\/local\/opensips\/etc\/\$prog/g"
/etc/init.d/opensips开机自动启动useradd-d /usr/local/opensips -s /sbin/nologin opensipschkconfig--add opensips
chkconfigopensips on启停命令启动:service opensips start或者/usr/local/opensips/sbin/opensipsctl start后台启动方式,如果启动失败,需要查看log文件
停止:service opensips stop或者/usr/local/opensips/sbin/opensipsctl stop常用命令/usr/local/opensips/sbin/opensips -C
//检查配置文件是否有错误 /usr/local/opensips/sbin/opensipsctl monitor //opensips运行参数监控 /usr/local/opensips/sbin/opensipsctl ping
//使用OPTION 检测uri/usr/local/opensips/sbin/opensipsctl dispatcher show //dispatcher模块信息展示配置文件当前文档主要描述,opensips作为注册服务器的信令代理和负载节点的配置方法。
/usr/local/opensips/etc/opensips/opensips.cfg## OpenSIPS residential configuration script# by OpenSIPS Solutions
## This script was generated via "make menuconfig", from# the "Residential" scenario.# You can enable / disable more features / functionalities by
# re-generating the scenario with different options.### Please refer to the Core CookBook at:# https://opensips.org/Resources/DocsCookbooks
# for a explanation of possible statements, functions and parameters.######## Global Parameters #########
log_level=3 log_stderror=no log_facility=LOG_LOCAL0 children=4/* uncomment the following lines to enable debugging */
#debug_mode=yes/* uncomment the next line to enable the auto temporary blacklisting of not available destinations (default disabled) */
#disable_dns_blacklist=no/* uncomment the next line to enable IPv6 lookup after IPv4 dns lookup failures (default disabled) */
#dns_try_ipv6=yes/* comment the next line to enable the auto discovery of local aliases based on reverse DNS on IPs */
auto_aliases=no listen=udp:192.168.0.202:5080# CUSTOMIZE ME listen=udp:192.168.0.202:5060#listen = wss:192.168.0.202:7443 use_children 5
tcp_max_connections=4096 user_agent_header="REG-PXY001"####### Modules Section #########set module path
mpath="/usr/local/opensips/lib64/opensips/modules/" loadmodule "db_mysql.so"#### SIGNALING module loadmodule
"signaling.so"#### StateLess module loadmodule "sl.so"#### Transaction Module loadmodule "tm.so" modparam(
"tm", "fr_timer", 2) modparam("tm", "fr_timeout", 5) modparam("tm", "fr_inv_timeout", 30) modparam("tm"
, "restart_fr_on_each_reply", 0) modparam("tm", "onreply_avp_mode", 1) #### Record Route Module loadmodule
"rr.so"/* do not append from tag to the RR (no need for this script) */ modparam("rr", "enable_double_rr"
, 1) modparam("rr", "append_fromtag", 1) loadmodule "dialog.so" modparam("dialog", "db_url", "mysql://root:123456@localhost/opensips"
) #### MAX ForWarD module loadmodule "maxfwd.so" loadmodule "textops.so"#### SIP MSG OPerationS module
loadmodule "sipmsgops.so"#### FIFO Management Interface loadmodule "mi_fifo.so" modparam("mi_fifo",
"fifo_name", "/tmp/opensips_fifo") modparam("mi_fifo", "fifo_mode", 0666) #### URI module loadmodule
"uri.so" modparam("uri", "use_uri_table", 0) #### USeR LOCation module loadmodule "usrloc.so" modparam(
"usrloc", "nat_bflag", "NAT") modparam("usrloc", "working_mode_preset", "single-instance-no-db") #### REGISTRAR module
loadmodule "registrar.so" modparam("registrar", "tcp_persistent_flag", "TCP_PERSISTENT") /* uncomment the next line not to allow more than 10 contacts per AOR */
#modparam("registrar", "max_contacts", 10)#### ACCounting module loadmodule "acc.so"/* what special events should be accounted ? */
modparam("acc", "early_media", 0) modparam("acc", "report_cancels", 0) /* by default we do not adjust the direct of the sequential requests. if you enable this parameter, be sure to enable "append_fromtag" in "rr" module */
modparam("acc", "detect_direction", 0) loadmodule "proto_udp.so" loadmodule "dispatcher.so" modparam(
"dispatcher", "db_url", "mysql://root:123456@localhost/opensips") modparam("dispatcher", "ds_ping_method"
, "OPTIONS") modparam("dispatcher", "ds_ping_interval", 60) modparam("dispatcher", "ds_probing_threshhold"
, 2) modparam("dispatcher", "ds_probing_mode", 1) loadmodule "load_balancer.so" modparam("load_balancer"
, "db_url", "mysql://root:123456@localhost/opensips") modparam("load_balancer", "probing_method", "OPTIONS"
) modparam("load_balancer", "probing_interval", 60) ####### Routing Logic ######### main request routing logic
route{ script_trace( 1, "$rm from $si, ruri=$ru", "me"); if (!mf_process_maxfwd_header(
"10")) { sl_send_reply("483","Too Many Hops"); exit; }
if (!has_totag()) { # initial request record_route(); }
else { # sequential request - obey the indicated route loose_route(); t_relay();
exit; } # handle cancel and re-transmissions# from now on we have only the initial requests
# select the node thatll handle the call (load balanced)# the method used is different for invite/register requests
# unknown methods are rejected hereif ( is_method("CANCEL") ) { if ( t_check_trans() ) t_relay();
exit; } elseif(is_method("OPTIONS")) { # send reply for each options request
sl_send_reply("200", "ok"); exit; } elseif (is_method("INVITE"
)) { xlog("L_INFO", "INFO: this sip message is an invite\n"); if (!ds_select_dst(
"1", "1")) { send_reply("503","Service Unavailable");
exit; } } elseif (is_method("REGISTER")) { xlog("L_INFO"
, "INFO: this sip message is a register\n"); if (!ds_select_dst("1", "1")) { send_reply(
"503","Service Unavailable"); exit; } } else { send_reply(
"405","Method Not Allowed"); exit; } # route the requestif (!t_relay()) { sl_reply_error(); } }
增加网关数据/usr/local/opensips/sbin/opensipsctl dispatcher addgw 1 sip:192.168.0.146:5060 0 50 fs1reg001 /usr/
local/opensips/sbin/opensipsctl dispatcher addgw 1 sip:192.168.0.150:5060 0 50 fs2reg002sip软终端配置
加载测试通过sip软终端注册,发起呼叫,测试信令和媒体的连通性总结opensips作为负载均衡的代理网关,性能非常好网关常见的功能,我们通过opensips.cfg配置文件的路由脚本基本很容易实现,具体请关注opensips的子模块介绍和接口。
空空如常求真得真
- 标签:
- 编辑:李松一
- 相关文章
-
3dmax沙发?3dmax沙发材质?万万没想到
沙发布艺衰减材质的做法先打开一个我们提前准备好的场景快捷键M打开材质编辑器,给材质球一个vray的标准材质漫反射给一个衰减前侧…
-
信用卡理财?信用卡理财从入门到精通小说?这都可以
儿童财商启蒙越来越被重视,甚至已经成为多地小学教育的必修课。
- apple id更改密码?apple id更改密码账户详情不可用?深度揭秘
- 教师节小品剧本?适合教师节表演的小品剧本?太疯狂了
- 教师节小品剧本?适合教师节表演的小品剧本?万万没想到
- 暗黑破坏神2战网?暗黑破坏神2战网排行?满满干货
- 重庆高校课程在线开放平台?重庆高校课程在线开放平台怎么加入班课?这都可以