![Kamailio 作为仅 TCP 的 SIP 注册和中继](https://linux22.com/image/681732/Kamailio%20%E4%BD%9C%E4%B8%BA%E4%BB%85%20TCP%20%E7%9A%84%20SIP%20%E6%B3%A8%E5%86%8C%E5%92%8C%E4%B8%AD%E7%BB%A7.png)
我有一个相当复杂的设置,我想在其中运行 SIP 服务器。一般来说,我想在内部网络上运行仅支持 IPv6 的 Kamailio SIP 服务器,并让外部 SIP 客户端能够通过仅支持 IPv4 的网络拨打内部电话。
因此,问题是我无法通过 IPv4 访问其他网络中的任何设备。带有 Kamailio 服务器的网络具有 IPv6 连接,但可以从互联网上的其他 IPv6 网络访问。
但是,我想在路上/不在办公室时使用 Android 上的 SIP 应用程序(特别是 Mizudroid,但无论什么都可以,即使是原生 Android 客户端对我来说也很好)连接到 SIP 服务器。不幸的是,移动网络仅支持 IPv4,而且大多数 WiFi 网络也仅支持 IPv4。
不过,我找到了一个服务提供商(https://myonlineportal.net/portmapper),它可以在特定端口上充当 IPv4 到 IPv6 网关。也就是说,如果您在 portmapper.myonlineportal.net:12345 上连接到此服务,它会将此流量转发到 [your-ipv6]:5060(5060 可以是任何您喜欢的值,但 5060 适用于 SIP)。缺点是它只为 TCP 连接提供此功能。
无论如何,我设置了 Kamailio 服务器并对其进行了配置,IPv6 网络内的客户端可以正常呼叫并相互通话。问题出在外部的客户端。他们可以连接到 Kamailio,也可以呼叫内部的某人。但接听电话后,连接失败,通话中断。此外,从内部呼叫外部不起作用,来自软电话“PhonerLite”的错误消息是“477:不幸的是,发送到下一跳时发生错误 (477/SL)”。
不幸的是,我不太熟悉 SIP 协议。据我所知,Kamailio 只是一个“代理”,它告诉 Caller1 如何联系 Caller2。这里的问题可能是,只有一个端口通过端口映射器与 Kamailio 服务器建立连接。即使我将每个设备都设置为使用 TCP 作为传输协议。
我想知道这是否可能?我认为如果 Kamailio 不仅是注册商,还充当中继/代理,那么它就可以工作?因此,来自外部的呼叫不应该是 dev-to-dev,而是 dev-kamailio-dev。对于我的应用程序来说,如果由于使用 TCP 而出现延迟,这并不重要。此外,使用外部服务是不可能的,因为最终 Kamailio 服务器将与固定电话集成。
我也很乐意听取其他建议。请记住,Kamailio 服务器和路由器也可以通过 IPv6 从互联网访问,而移动设备只有 IPv4 连接!
任何帮助深表感谢!