使用具有多个网络的 kamailio sip 服务器,不工作



我需要将kamailio配置为在不同的网络和互联网上工作。我尝试了很多配置,但没有一个有效。

我配置了kamailio,如这个链接所示! 但不起作用,我查看了 tcp 转储:

>>14:49:20.328121 IP 192.168.10.8.sip > 187.95.131.xxx.sip: SIP: REGISTER sip:187.95.131.166 SIP/2.0
>>14:49:24.331926 IP 192.168.10.8.sip > 187.95.131.xxx.sip: SIP: REGISTER sip:187.95.131.xxx SIP/2.0

卡迈里奥不响应客户端。

kamailio的配置是:

>> WITH_MYSQL
>> WITH_AUTH
>> WITH_USRLOCDB
>> WITH_NAT
>>...
>>alias=187.95.131.xxx:5060
>>...

一切都像链接所说的那样。

当 Kamailio 调用时,rtpproxy 正在运行:

>>13:39:35 firewall /usr/sbin/kamailio[15886]: INFO: rtpproxy [rtpproxy.c:1598]: rtpp_test(): rtp proxy <unix:/var/run/rtpproxy/rtpproxy.sock> found, support for it enabled

我的网络设置是:

互联网<---->(带卡迈里奥的防火墙(<---->(LAN0,LAN1,LAN2(

LAN0 = 192.168.2.0/24

LAN1 = 192.168.3.0/24

LAN3 = 192.168.10.0/24

局域网不与其他局域网通信。(防火墙规则除外(

如果将 kamailio 设置为在所有 lan 接口上绑定,则仅当呼叫者与接收方位于同一局域网上时,VoIP 才有效,但在不同的局域网内或通过互联网,sip 寄存器但没有语音。

对于测试,接受互联网接口上的所有传入/传出 udp 连接以及 lans 和互联网接口之间的所有 udp 转发。

解决了!

转发(带有伪装(规则不适用于 kamailio,我被迫将 kamailio 配置为绑定所有接口,而不是将内部数据包重定向到外部接口。但为了确保安全,在没有 rtpproxy 的情况下进行了完整的测试后,我用 opensips 替换了 kamailio,这个比 kamailio 更有据可查。

rtpproxy 被配置为侦听本地主机而不是套接字文件。

基本上OpenSips.cfg设置如下:

auto_aliases=no
listen=udp:EXTERNAL_IP:5060 
...
modparam("nathelper", "sipping_from", "sip:pinger@EXTERNAL_IP")
...
loadmodule "rtpproxy.so"
modparam("rtpproxy", "rtpproxy_sock", "udp:localhost:12221")

*值得注意的是,即使将opensips配置为仅侦听外部IP,它也在其他接口上侦听。

比 rtpproxy 是用以下参数启动的:

rtpproxy -l EXTERNAL_IP -s udp:127.0.0.1:12221 -u rtpproxy rtpproxy

在 rtpproxy opensips 启动后。

最后,进行了一些测试,并在tcpdump的帮助下,显示rtpproxy使用30000-65000的端口范围来强制语音数据包通过opensips服务器,然后实施了以下防火墙规则:

iptables -A INPUT -p udp -m udp --dport 5060:5070 -j ACCEPT
iptables -A OUTPUT -p udp -m udp --sport 5060:5070 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 30000:65000 -j ACCEPT
iptables -A OUTPUT -p udp -m udp --sport 30000:65000 -j ACCEPT

最新更新