首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用OpenSIPS/Kamailio/OpenSER进行RTP代理

使用OpenSIPS/Kamailio/OpenSER进行RTP代理
EN

Stack Overflow用户
提问于 2012-10-03 20:02:28
回答 1查看 9K关注 0票数 4

我有一个监听多个IP的OpenSIPS服务器。如果我将呼叫路由回下一个点,我希望确保所有信令和媒体都来自呼叫最初到达的IP (我不希望呼叫者和被呼叫者知道对方的IP地址)。

我相信我所需要的就像RTPProxy一样。

我的问题是,我是否需要为每个IP地址配备一台RTPProxy服务器,或者是否可以通过一台服务器路由多个IP?有没有更好的解决方案?

我打算自己尝试一下,但我正在努力让RTPProxy服务器正常运行(我的无知,而不一定是RTPProxy的任何问题)。我提前问了一下,看看有没有人知道我是不是在浪费时间。

更新

对于任何感兴趣的人来说,这就是我让它工作的方式,尽管我不确定我是否想把它作为最终的解决方案。需要更多的测试。对于2个IP,具有拓扑隐藏和RTP代理。伴随着下面的答案,我希望它能帮助一些人。

加载rtpproxy进程-

代码语言:javascript
复制
rtpproxy -l _your_public_ip_1_ -s udp:localhost:7722
rtpproxy -l _your_public_ip_2_ -s udp:localhost:7723

然后修改kamailio.cfg文件-

代码语言:javascript
复制
loadmodule "/usr/local/lib64/kamailio/modules/topoh.so"
modparam("topoh", "mask_key", "Your_key_here")
modparam("topoh", "mask_ip", "10.0.0.1")

下一位为RTP代理-1和2-创建两个组-

代码语言:javascript
复制
#!ifdef WITH_NAT
    # ----- rtpproxy params -----
    modparam("rtpproxy", "rtpproxy_sock", "1 == udp:127.0.0.1:7722")
    modparam("rtpproxy", "rtpproxy_sock", "2 == udp:127.0.0.1:7723")

然后,在标准(已发货)配置的NAT部分中,根据入站呼叫到达的IP选择要在代理中使用的组。rtp_proxy_manage是force_和unforce_命令的高级版本。基本上它就会启动并为你做所有的事情-

代码语言:javascript
复制
route[NATMANAGE] {
    #!ifdef WITH_NAT
        ....
        if($Ri=="X.X.X.1")
            set_rtp_proxy_set("1");

        if($Ri=="X.X.X.2")
            set_rtp_proxy_set("2");

        rtpproxy_manage("",$Ri);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-12 00:48:12

如果使用RTPProxy,则每个IP地址需要一台RTPProxy服务器。您可以使用'-l‘参数指定要侦听的IP:

代码语言:javascript
复制
# /usr/sbin/rtpproxy -l 10.10.10.10 -s unix:/var/run/rtpproxy/rtpproxy1.sock -u rtpproxy rtpproxy -p /var/run/rtpproxy/rtpproxy1.pid &
# /usr/sbin/rtpproxy -l 10.10.10.11 -s unix:/var/run/rtpproxy/rtpproxy2.sock -u rtpproxy rtpproxy -p /var/run/rtpproxy/rtpproxy2.pid &

您需要将其与独立的opensips/openser/kamailio实例相匹配:

代码语言:javascript
复制
listen=udp:10.10.10.10:5060
...
loadmodule "rtpproxy.so"

modparam("rtpproxy", "rtpproxy_sock", "unix:/var/run/rtpproxy/rtpproxy1.sock")

...
unforce_rtp_proxy();
...
force_rtp_proxy();

代码语言:javascript
复制
listen=udp:10.10.10.11:5060
...
loadmodule "rtpproxy.so"

modparam("rtpproxy", "rtpproxy_sock", "unix:/var/run/rtpproxy/rtpproxy2.sock")

...
unforce_rtp_proxy();
...
force_rtp_proxy();

如果您有一些使用C的经验,那么可以通过修改rtpproxy模块来识别多个rtpproxy实例。

此外,如果通过用户空间中继RTP的想法让您感到困扰,MediaProxy也是一种选择。

您的openser/opensips/kamailio不是中继RTP流量的用户空间守护进程,而是通过JSON web post告诉python MediaDispatcher联系可用的MediaRelay来设置linux内核级连接跟踪流量转发条目。

这种方法的缺点是,当前的python媒体分派器和媒体中继读取/etc/mediaproxy/config.ini -您将需要修改python以获取配置参数,这样您就可以有多个config.ini文件,每个实例一个文件来设置正确的重定向。

示例/etc/mediaproxy/config.ini可能如下所示:

代码语言:javascript
复制
[Relay]
dispatchers = 10.10.10.10:25060

[Dispatcher]
socket_path = /var/run/mediaproxy/dispatcher.sock
listen = 10.10.10.10:25060
listen_management = 10.10.10.10:25061

[OpenSIPS]
socket_path = '/var/run/opensips/socket'

在您的opensips配置文件中:

代码语言:javascript
复制
modparam("mi_datagram", "socket_name", "/var/run/opensips/socket")

...

loadmodule "mediaproxy.so"

# ----- mediaproxy params -----
modparam("mediaproxy", "mediaproxy_socket", "/var/run/mediaproxy/dispatcher.sock")
#modparam("mediaproxy", "disable", 1)
#modparam("mediaproxy", "natping_interval", 60)

...
engage_media_proxy();
...
end_media_session();

听起来你使用rtpproxy来满足你的特殊需求可能会更好一些。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12708089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档