freeswitch acl 与 nat

配置

<param name="local-network-acl" value="none"/>

注意,该环境变量默认为none,它实际上是一个不存在的ACL,所以FreeSWITCH对任何来源IP都会认为它在NAT后面。

来源:https://cloud.tencent.com/developer/article/1763558 可信度较高

<param name="apply-nat-acl" value="nat.auto"/>

You can add the apply-nat-acl param to your profile to force NAT behavior when matching a certain access list
你可以通过在你的配置里添加此项来强制启用nat动作,当 acl 匹配成功时。

https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Networking/NAT-Traversal_3375417/

思考

freeswich 的 acl 作用不只像是一个 ip 黑名单白名单,还具有 ip 的过滤功能。

经过

背景

一个原本部署在局域网环境上的 freeswitch 要求部署在公网,但是想节约公网域名,使用已有的域名,就采用代理的方式,客户端使用 wss 连接指定的路径,即可转发到局域网的 freeswitch 上。

问题

sip 注册没有问题,当话机呼入时,呼入 answer 后一段时间就被 自动挂断

排查

会话被 freeswitch 超时自动挂断,原因时没有收到媒体数据,经排查发现客户端 invite 之后收到的 200 数据包内的 sdp 中的 ip 地址为局域网地址。

解决

使用

<param name="local-network-acl" value="none"/>

配置强制使用 nat。
但是实际上不是完美的解决办法,在此配置下,哪怕是局域网内的呼叫,客户端收到的 sdp 信息里的 ip 地址依然为外网。
应该可以使用

<param name="apply-nat-acl" value="nat.auto"/>

但是没有机会验证。

posted @ 2025-03-14 17:55  判空不判空  阅读(255)  评论(0)    收藏  举报