在多个网络中使用 kamailio sip 服务器,无法正常工作

Use kamailio sip server with more than one network, is not working

我需要配置 kamailio 以在不同网络和互联网上工作。我尝试了很多配置,但 none 有效。

我按照 link 所示配置了 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 不响应客户端。

kamailio的配置是:

>> WITH_MYSQL

>> WITH_AUTH

>> WITH_USRLOCDB

>> WITH_NAT
>>...

>>alias=187.95.131.xxx:5060

>>...

一切都像 link 所说的那样。

当 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

我的网络设置是:

互联网 <---->(带 kamailio 的防火墙)<---->(LAN0、LAN1、LAN2)

LAN0 = 192.168.2.0/24

LAN1 = 192.168.3.0/24

LAN3 = 192.168.10.0/24

局域网不与其他人交谈。 (防火墙规则除外)

如果将 kamailio 设置为绑定所有 lan 接口,则 voip 仅在呼叫者与接收者位于同一 lan 上时才有效,但在不同的 lan 中或通过互联网,sip 注册但没有语音。

对于测试,所有 incoming/outcoming 互联网接口上的 udp 连接以及局域网和互联网接口之间的所有 udp 转发都被接受。

已解决!

转发(带伪装)规则在 kamailio 上效果不佳,我被迫将 kamailio 配置为绑定所有接口,而不是将内部数据包重定向到外部接口。但只是为了确保,在没有 rtpproxy 的 sussesfull 测试之后,我用 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