为什么防火墙检测不会说谎

3CX 系统中内置了一个防火墙检测工具,可以检测防火墙的“端口转发”和“端口保留”设置是否正确。

端口转发

3CX 系统会确认防火墙或网关设备上是否正确设置 “全锥形 NAT”。

全锥形 NAT允许任何外部实体连接到 3CX 系统,而无需防火墙在允许连接之前首先确认实际数据包来自 3CX 。这对于 VoIP 供应商来说是非常重要的,因为 SIP 服务器不会将你的系统作为语音终端来传输音频。

在一些场景中,防火墙会将入站的数据设置为“不允许”的阻止名单中,即使 3CX 向该地址发送数据(音频),防火墙也会阻止与该地址的连接。

端口保留

端口保留是防火墙检查器检查的另一个关键因素。

防火墙会检测端口在 LAN IP 转换到 WAN IP 的过程中是否变化。从技术角度来说这不是问题,这取决于 SIP 供应商的实现方式,他们回复的端口是在 UDP 头部中看到的 3CX 系统的源端口还是 RFC 的定义。RFC 定义 SIP 服务器必须回复 SIP 消息中 “contact” 字段的 IP 地址和端口。为了消除任何的“可能”,防火墙检测也会检查这类映射。

如果 3CX 从默认 SIP 端口 5060 生成本地 SIP 消息,然后转换为公网 IP(WAN IP),在这种情况下端口保持不变,依然是 5060。

为此,系统会使用系统中配置的第一个 STUN 服务器运行两个独立测试。第一个 STUN 服务器的默认值应该是 stun.3cx.com。强烈建议不要修改这个地址。总的来说,防火墙检测类似于 “what is my ip” 的网站会检测公网 IP 地址,不过它也同时会检测端口。

概览

下面是在 3CX 管理控制台运行失败的防火墙检测,我们用 wireshark 打开了抓包文件。接下来我们会阐述防火墙检测的每一步和结果。在 wireshark 中我们只让他只显示端口 3478 或 3479。

另外 Windows 防火墙的禁用也对防火墙检测非常重要。3CX 系统的安装会为某些 3CX 应用程序创建例外,但不会为防火墙检查程序本身创建例外!

Test 1

3CX 在运行防火墙检测之前会停止服务释放端口,以便端口可以绑定到防火墙检测程序。本文档仅关注第一个已测试的端口(5060),但所有其他端口的过程相同。

上图中包含了下面几步:

  1. 3CX 服务器的本地 IP 是 102.168.3.159,向 IP 地址为 192.50.247.220 的 STUN 服务器发送了一个 classic-stun 的请求。
  2. 本地端口为 5060 UDP
  3. STUN 服务器的端口是 3478。
  4. 声明 STUN 服务器不应更改其 IP 或端口以回复此请求。

每个请求都有一个唯一的 “Transaction ID”,以可靠地确保接收的数据属于初始请求。在极少数情况下,您可能会看到服务器发送多个请求,但永远不会收到回复,如下所示。这意味着:

  • 出站流量被防火墙阻止
  • 没有传递回服务器

在这两种情况下,请检查防火墙设置!

STUN 服务器回复如下:

  1. 请求的 Binding Request。
  2. 然后定义发送请求的公网 IP 和端口5060,IP地址为 XX.XX.96.162。

根据之前我们的定义 – STUN 能看到 PBX 定义的端口说明端口保留是生效了的。如果你在 “Mapped-Address” 字段看到其他端口说明防火墙检测会失败,端口保留的设置也没有生效。如果出现了这种问题,请联系防火墙供应商以解决问题。

Test 2

在 Test 2 中服务器会向同一个 stun 服务器发起另一个请求(相较于 Test 1)。

然而,

  1. 3CX 服务器将请求标记为与 Test 1 不同,并将 “Change IP and Change Port” 都设置为(1)。这意味着 stun 服务器应该向 3CX 发送响应。但这次是从防火墙未知的 IP 地址和端口发送,即对请求的期待响应。
  2. 如果服务器没有从 stun 服务器收到回应,将会发送 3 次请求。这也意味着全锥型 NAT 没有工作。

两个测试都是 3CX 服务器向 STUN 服务器发送请求,STUN 回响应消息。Test 2 与 Test 1 的不同之处在于 Test 2 中 STUN 服务器回复的响应消息的是一个没有与 3CX 进行过任何通信的 IP(比如 SIP Trunk 的音频服务器),3CX 服务器无法收到该响应。在这种情况下,请与防火墙供应商联系以解决问题。

正确的响应是在 Test 2 中接收数据,其中 “Mapped-Address” 与 Test 1 中的 IP 和端口完全相同。

如果您希望了解流量应该来自何处,请检查防火墙日志。3CX Stun服务器的IP地址为(-1),端口为(+1)。所以答案预计来自 198.50.247.219:3479,但从未进入 3CX 系统的 NIC。

在系统报告中: