Mumble无法通过域名连接到服务器

0. 问题背景与问题描述

0.1 问题背景

Mumble 部署在阿里云的 ECS 上,IP 为 11.4.5.14,域名为 mumble.example.com

域名未经过 ICP 备案

0.2 问题描述

  1. Mumble 客户端无法通过域名连接到服务器,但是可以通过 IP 连接。

  2. 直接通过 IP 访问时,会有约为 5 秒的延迟。

1. 直连 IP 分析

1.1. 抓包分析直连 IP 连接

Wireshark 抓包如下:

可以看到,Mumble 客户端通过 UDP 协议请求了服务器的端口,用于显示延迟和提供服务器基本信息。

序号为 415 的包是点击连接服务器后,客户端发送的第一个包,通过 WireShark 可以看到,客户端使用 NBNS 协议向服务器发送了一个查询,查询内容为*

很明显,服务器端根本没有此项服务,因此客户端没有收到任何回应。

此时客户端又重新发送了两次请求,但是服务器端依然没有回应。

此时已经经过了 5 秒的时间。

而后客户端才进行了正常的 TCP 握手等操作。

1.2. 解决方案

由于 Mumble 已经长时间未更新,因此建议通过域名的方式访问服务器。

2. 通过域名连接分析

2.1. 抓包分析域名连接

Wireshark 抓包如下:

可以看到,点击连接后,客户端没有使用 NBNS 协议向服务器发送查询,而是直接进行了 TCP 握手操作,发送了序号为 685 的包。

在包 687 成功建立 TCP 连接后,客户端发送了一个 TLSv1 的 Client Hello 包。

观察包的内容:

可以看到,客户端在包的内容中,指定了 SNI 为 mumble.example.com

而通过 IP 直连时,客户端并没有发送 SNI。

在客户端发送 Client Hello 包后,服务器端返回了三个 RST 包,关闭了连接。

Mumble 中提示:The remote host closed the connection.

2.2. 原因猜测

首先,我们可以确定服务器可以正常建立 TCP 连接,而且可以回应 IP 直连的请求。

与 IP 直接访问唯一的不同是,Client Hello 包中包含了 SNI。

而恰好,在 RST 包前,服务器与客户端的行为,与 HTTPS 的握手行为一致。

因此我们有理由怀疑,这次阻断为阿里云的防火墙阻断,原因是域名没有经过 ICP 备案但尝试了HTTPS连接

2.3. 验证猜测

我们准备了一个经过 ICP 备案的域名,mumble-icp.example.com,并且将其解析到了服务器的 IP 11.4.5.14

使用这个域名进行连接,并通过 Wireshark 抓包。

可以看到,客户端成功建立了 TCP 连接,并且在发送了 Client Hello 包后,没有 RST 包返回,服务器也成功连接。

2.4. 解决方案

  1. 自行 ICP 备案,并实际架设网站,备案请遵守相关法律法规。
  2. 借用他人已经备案的域名,理论上 Mumble 并不是网站,同时 Mumble 是私用语音服务器,此行为可行,但实际操作请咨询工信部、阿里云以及其他有关部门。
  3. 使用 IP 直连,并忍受 5 秒的延迟。
  4. 将服务器迁出到国外。

3. 总结

Mumble 通过 IP 连接时,会有约为 5 秒延迟原因是:客户端尝试了 NBNS 协议,但服务器端没有此项服务,因此客户端没有收到任何回应。Timeout 后才进行了正常的 TCP 握手等操作。解决方案之一是使用域名连接。

Mumble 无法通过域名连接到服务器,原因是域名被阿里云拦截。解决方案之一是 ICP 备案。


Mumble无法通过域名连接到服务器
https://nacldragon.top/2024/Mumble-Cant-Connect/
作者
NaCl
发布于
2024年1月28日
许可协议