我有一个侦听多个 IP 的 OpenSIPS 服务器。如果我将呼叫路由回下一个点,我想确保所有信令和媒体都来自呼叫最初登陆的 IP(我不希望呼叫者和被呼叫者知道彼此的 IP 地址)。
我相信我需要像 RTPProxy 这样的东西。
我的问题是每个 IP 地址需要一个 RTPProxy 服务器,还是可以通过单个服务器路由多个 IP?有更好的解决方案吗?
我将自己尝试这个,但我正在努力让 RTPProxy 服务器正常运行(我的无知而不是 RTPProxy 的任何问题)。我提前询问只是想看看是否有人知道我是否在浪费时间进行设置。
[更新]
对于任何有兴趣的人,这就是我让它工作的方式,尽管我不确定我是否想以此作为最终解决方案。需要更多的测试。对于 2 个 IP,具有拓扑隐藏和 RTP 代理。除了下面的答案,我希望它对某人有所帮助。
加载 rtpproxy 进程 -
rtpproxy -l _your_public_ip_1_ -s udp:localhost:7722
rtpproxy -l _your_public_ip_2_ -s udp:localhost:7723
然后修改 kamailio.cfg 文件 -
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 -
#!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_ 命令的高级版本。基本上它只是启动并为你做一切 -
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);