我有一个在一台服务器上运行的 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 个接口:一个使用公共 IP,第二个使用专用网络 (192.168.59.0/24)。
我检查了 acl.conf.xml 文件和 event_socket.con.xml,到目前为止我没有看到任何特别的东西。
最后一件事:这是一个开发环境,FS 在虚拟机(VirtualBox)中运行。 VM使用的接口是192.168.59.103,GW使用的接口是192.168.59.3 因此,如果不是 ACL 问题(或两者兼而有之),这可能是 NAT 问题。
您知道 ACL 配置应该是什么吗?
您必须转到 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 的配置并不是很好。使用的方法没有为 event_socket 打开正确的连接。因此,Event_Socket 要么打开仅供本地使用,要么仅供外部使用。 必须重新创建一个新的 ACL,并打开本地访问(如果您想使用 fs_cli,这是必需的)并添加控制服务器的 IP。
感谢您关于 IPv6 的建议,我之前测试过它,发现它对我的“问题”没有影响
我在
loopback.auto
下手动创建了
acl.conf.xml
列表
<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"/>
然后运行
reloadacl
和 reloadxml
。就我而言,我需要重新启动 Freeswitch 才能使其正常工作。
这里有一些关于如何让它工作的信息: https://wiki.freeswitch.org/wiki/Mod_event_socket#Configuration
经过一番尝试和错误后,我所要做的就是消除错误:
<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>
这可能是由于 IPv6 问题而发生: https://freeswitch.org/jira/browse/FS-7638
作为解决方法,您可以尝试在 autoload_configs/event_socket.conf.xml 中将 event_socket 绑定地址从 :: 更改为 192.168.59.x