远程事件套接字的 Freeswitch ACL 配置

Freeswitch ACL configuration for remote event socket

我在一台服务器上有一个 FS 服务器 运行,在远程服务器上我有一个 Node JS 实例使用 node_esl(一个用于 FS 的 Node JS 事件套接字库)控制它。

每次我向服务器发送请求时都会出现以下错误:

[WARNING] mod_event_socket.c:2603 IP ::ffff:192.168.59.3 Rejected by acl "loopback.auto"

FS 服务器有 2 个接口:一个使用 public IP,第二个在专用网络 (192.168.59.0/24) 上。

我检查了 acl.conf.xml 文件和 event_socket.con.xml,到目前为止我没有发现任何特别之处。

最后一件事:这是一个开发环境,FS 运行 在 VM (VirtualBox) 中。 VM使用的接口是192.168.59.103,GW是192.168.59.3 因此,如果不是 ACL 问题(或两者),这可能是 NAT 问题。

您知道 ACL 配置应该是什么吗?

这可能是因为 IPv6 问题: https://freeswitch.org/jira/browse/FS-7638

作为解决方法,您可以尝试将 event_socket 绑定地址从 :: 更改为 192.168。59.x in autoload_configs/event_socket。conf.xml

我发现了原因: ACL 并没有真正配置好。使用的那个没有为 event_socket 打开正确的连接。因此 Event_Socket 要么仅供本地使用,要么仅供外部使用。 不得不重新创建一个打开本地访问的新 ACL(如果你想使用 fs_cli 则需要)并添加控制服务器的 IP。

谢谢你关于 IPv6 的建议,我之前测试过它,发现它对我的 "issue"

没有影响

这里有一些关于如何让它工作的信息: https://wiki.freeswitch.org/wiki/Mod_event_socket#Configuration

经过反复试验,我必须做的就是消除错误:

  1. 打开 FreeSWITCH/conf/autoload_configs/event_socket.conf.xml
  2. 取消注释以下行:
<param name="apply-inbound-acl" value="loopback.auto"/>

这是我的工作 event_socket.conf.xml 文件:

<configuration name="event_socket.conf" description="Socket Client">
  <settings>
    <param name="nat-map" value="false"/>
    <param name="listen-ip" value="::"/>
    <param name="listen-port" value="8021"/>
    <param name="password" value="ClueCon"/>
    <param name="apply-inbound-acl" value="loopback.auto"/>
    <!--<param name="stop-on-bind-error" value="true"/>-->
  </settings>
</configuration>

您必须转到 FreeSWITCH/conf/autoload_configs/event_socket.conf.xml 并取消注释并编辑 acl 行: <param name="apply-inbound-acl" value="loopback.auto"/> 你必须写类似 my_acl 而不是 loopback.auto

之后你必须去FreeSWITCH/conf/autoload_configs/acl.conf.xml然后写这样的东西:

<list name="my_acl" default="deny">
 <node type="allow" cidr="xxx.xxx.xxx.xxx/32"/>
 <node type="allow" cidr="xxx.xxx.xxx.0/24"/>
</list>

在此之后转到 fs_cli 和磁带命令:

reloadacl

尽情享受吧!

编辑:

确保以下内容:

<list name="my_acl" default="deny">
 <node type="allow" cidr="xxx.xxx.xxx.xxx/32"/>
 <node type="allow" cidr="xxx.xxx.xxx.0/24"/>
</list>

变为:

<list name="my_acl" default="deny">
 <node type="allow" cidr="xxx.xxx.xxx.xxx/32"/>
 <node type="allow" cidr="xxx.xxx.xxx.0/24"/>


  <node type="allow" cidr="192.168.42.42/32"/>
  <node type="allow" domain="$${domain}"/>
  <!-- this allow fs_cli to connect else fs_cli wont work --!>
  <node type="allow" cidr="127.0.0.1/32" />
</list>

我在 acl.conf.xml

下手动创建了 loopback.auto 列表
<list name="loopback.auto" default="allow">
    <node type="allow" cidr="172.31.0.0/16"/>
    <node type="allow" cidr="52.67.85.153/32"/> 
</list>

其中 172.31.0.0/16 是 Freeswitch 本地 IP 地址。

在 event_socket.conf.xml 文件中我离开 loopback.auto:

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

然后 运行 reloadaclreloadxml。就我而言,我需要重新启动 Freeswitch 才能使其正常工作。