关于opensips搭建的几点注意项 2013-11-25 17:37

来源:互联网 发布:淘宝上信用卡套现 编辑:程序博客网 时间:2024/06/05 20:14
 

关于opensips搭建的几点注意项

 4746人阅读 评论(3) 收藏 举报
 分类:
 

最近在搞opensips时发现好多问题,总结下面几点!

1、现在很难申请到公网地址,所以大多opensips都放在nat后面,这样的话通过路由器的DMZ功能的话,opensips会造成回环via路由,直接连注册登录都不行。解决方法就是在opensips.cfg中增加两个变量:

advertised_address="public_ip"

alias="public_ip"

或者

listen=udp:private_ip:5060 as public_ip:5060 (这种方式可解决36秒问题和主叫方挂断被叫方不挂现象)

但是这种方式通话中没有语音传输,是要走rtp代理才可以


2、关于rtp代理的问题

opensips在1.9.1版本中提供了rtpproxy模块,走rtp代理可以实现所有nat类型的穿透,包括复杂的对称型nat。不过把rtpproxy代理放到nat后面的话会很麻烦,最近在网上看到了一个解决方案,更新rtpproxy-1.2.1下面几个文件。给大家参考一下:


(1)修改main.c文件


    131     bh[0] = bh[1] = bh6[0] = bh6[1] = NULL;
    132 
    133     cf->advertised = NULL; 
    134     cf->port_min = PORT_MIN;
    135     cf->port_max = PORT_MAX;


if (getrlimit(RLIMIT_NOFILE, &(cf->nofile_limit)) != 0)
    149         err(1, "getrlimit");
    150 
    151     while ((ch = getopt(argc, argv, "vf2Rl:6:s:S:t:r:p:T:L:m:M:u:Fin:Pad:A:")) != -1)
    152         switch (ch) {
    153         case 'A':
    154                         cf->advertised = strdup(optarg);
    155                         break;

    156         case 'f':
    157             cf->nodaemon = 1;
    158             break;

(2)修改rtpp_command.c文件

 if (lia[0] == NULL || ishostnull(lia[0]))
    203         len += sprintf(cp, "%d\n", lport);
    204     else{
    205                 if(cf->advertised != NULL)
    206                         len += sprintf(cp, "%d %s%s\n", lport, cf->advertised,
    207                         (lia[0]->sa_family == AF_INET) ? "" : " 6");
    208                 else
    209                                 len += sprintf(cp, "%d %s%s\n", lport, addr2char(lia[0]),
    210           (lia[0]->sa_family == AF_INET) ? "" : " 6");
    211     doreply(cf, fd, buf, len, raddr, rlen);
    212         }

    213 }

(3)在rtpp_define.h中增加定义

136 
    137     int log_level;
    138     int log_facility;
    139     char *advertised;
    140 };

(4)使用如下命令启动rtpproxy代理

rtpproxy -A public_IP -l privite_ip -s udp:localhost:7890 -L 8192 -F -d INFO LOG_LOCAL0

我是参考下面方式(rtpproxy -A you_public_ip -l 0.0.0.0 -s udp:localhost:7722 -L 8192 -m 25000 -M 34999 -F -d INFO LOG_LOCAL0)

(5)同样修改opensips.cfg配置文件,设置rtp连接

modparam("rtpproxy", "rtpproxy_sock", "udp:localhost:7890") # CUSTOMIZE ME

0 0