Skip to main content

网络信息 (Networking Information)

网络信息 (Networking Information)

Resonite 是一个功能丰富的引擎,既连接其他用户,也连接 Resonite 云服务。如果您有顾虑或希望配置防火墙,请继续阅读以了解更多信息。

HTTP & WebSocket 流量

诸如消息、个人资料信息和库存中的物品等内容都存储在 Resonite 云端。您的 Resonite 客户端将使用 HTTP(S) 或 WebSocket 来获取这些信息。

以下是您可能会看到的连接目标列表:

  • 大多数 HTTPS 流量来自 api.resonite.com
  • SignalR(实时更新)会与 Microsoft 托管的服务建立 WebSocket 连接,同样位于 api.resonite.com
  • 资源(Avatar、网格、纹理等)和其他 Blob(大文件)来自多个主机:
    • 资产变体(Asset variants)存储在 variants.resonite.comskyfrost-archive.resonite.com/variants
    • 资产(Assets)存储在 assets.resonite.comskyfrost-archive.resonite.com/assets
    • 缩略图(Thumbnails)存储在 thumbnails.resonite.comskyfrost-archive.resonite.com/thumbnails

房间流量 (Session traffic)

当您连接到一个 Resonite 房间时,您正在启动与房间主机的连接。这通常是另一个用户的计算机,但有时也可以是 Headless(无头)房间,这些房间可能托管在很多地方——最常见的两个地方是某人的备用计算机或数据中心租用的服务器。

根据您的设置和房间主机的设置,您将使用以下协议之一进行连接:

LNL

  • LNL 使用 UDP 进行连接。
  • 端口会有所不同,可以是任何端口,因为它允许主机选择一个空闲端口。
  • 在其他情况下,将使用中继(Relay)。
  • 打洞(Punch-through) 或中继之后,与用户的实际连接可以是任何 IP 或端口。

Steam Networking Sockets

Steam Networking Sockets 是 Valve 创建的网络协议。您可以在 这里 找到相关信息。

建立连接

Resonite 利用多种方法尝试将用户连接到远程机器上的房间。这可以用下面的流程图来说明。

[此处为连接选项流程图: LNLConnectionOptions]

Resonite 会尽可能尝试直接连接用户,例如在局域网(LAN)上。然而,由于各种网络安全限制,这并不总是可行的。

直接 IP (Direct IP)

通常,直接 IP 连接是最好的。您将直接与远程服务器连接,并明确告诉 Resonite 去哪里以及如何到达那里(您正在使用直接 IP 地址或域名进行连接)。

要使用直接 IP:

  • 使用 OpenWorld ProtoFlux 节点并添加一个 Uri(从上往下第二个紫色输入),填写 IP 地址和端口,格式如下:lnl://<IPv4 address>:<Port>/,或者直接将 URI 粘贴到 Resonite 中。
    • 对于 IPv6,请将地址用方括号括起来:lnl://[<IPv6 address>]:<port>/
    • 您也可以使用 DNS 记录:lnl://<domain>:<port>/
  • 目前 URL 中必须包含端口。
  • 这主要适用于拥有静态 IP 地址和端口的 Headless 房间。请留意房间所有者提供的包含其世界直接链接的物品,因为这是连接到该世界最可靠和快捷的方式。

例如,对于托管在 IPv4 地址 203.0.113.7,IPv6 地址 2001:db8::7,DNS 记录 seven.example.com,端口 12100 的房间:

  • lnl:///203.0.113.7:12100/: IPv4 直连
  • lnl://[2001:db8::7]:12100/: IPv6 直连
  • lnl://seven.example.com:12100/: DNS 直连

UDP 打洞 (LNL NAT 穿透)

Resonite 中的 LNL 使用 UDP 打洞技术,以便在连接的一方或双方存在网络地址转换 (NAT) 的情况下,在您和房间主机之间建立双向连接。

这是由 Resonite 的 LNL 穿透服务器(与 LNL Relay 中看到的主机相同)促成的,您和主机都与该服务器建立连接,以便在您和主机之间建立一个应该与直接连接没有区别的连接。

如果您遇到 NAT 穿透问题,您可能处于严格型(Strict,也称为 Type 3)NAT 后面,这种 NAT 的条件会导致打洞无法工作。

您可以通过在 Web 浏览器中访问 https://networktest.razortune.com/ 来检查您的 NAT 类型——这是社区成员 Rucio 托管的工具,专门针对 Resonite 网络。

如果您的 NAT 类型是 Strict,通常有两个原因:

  • 您的路由器可能有导致此情况的 NAT 设置——您需要的是 1:1 NAT 或静态 NAT(术语可能因路由器而异)。
  • 您的 ISP(互联网服务提供商)可能正在以导致此问题的方式执行 CGNAT——您可以检查路由器报告的 WAN 地址与 https://ipinfo.io 等站点显示的地址是否一致;如果这两个地址不同,您可能处于 CGNAT 后面。

如果是路由器的问题:

检查您的路由器设置——一个好的开始是搜索 “<路由器型号> Open NAT” 并查看相关的设置建议。

如果是 ISP 的问题:

您可以联系您的 ISP,让他们将您移出 CGNAT 或为您提供静态公网 IPv4 地址。申请静态 IP 可能需要付费。

如果您无法解决严格 NAT 的情况,建议使用 直接 IP 连接,或者使用 LNL 中继 连接到房间。

可能存在的 Bug

  • 目前的一个问题似乎是 NAT 穿透服务器偶尔响应不够快,而客户端并不总是等待响应,而是尝试其内部列表中的下一个协议。
  • 穿透服务器不支持 IPv6,仅支持 IPv4。世界某些地区(如日本)的一些 ISP 仅使用 IPv6。这些网络中的用户可能无法使用 NAT 穿透(这会变得非常复杂,结果会有所不同)。(Github Issue #143)

LNL 中继 (Relay)

这可能会带来性能影响。中继充当两个客户端之间的第三个点,所有流量都通过它路由。Ping 值可能会更高(但不总是如此)。如果中继出现问题或过载,您可能会遇到服务问题。

我们拥有以下 LNL 中继:

  • uswest1.resonite.com - 美国西部 (俄勒冈州希尔斯伯勒)
  • au1.resonite.com - 大洋洲 (澳大利亚悉尼)
  • japan1.resonite.com - 亚太地区 (日本东京)
  • europe.resonite.com - 欧洲 (芬兰赫尔辛基)

您可以在 https://status.yellowdogman.com 查看这些中继的状态,或者在 https://api.resonite.com/networknodes 查看原始格式数据。

LNL 中继的工作原理

当需要中继时,客户端会向 https://api.resonite.com/networknodes 发送请求以获取当前可用的中继。随后,客户端根据多个因素(例如中继当前的可用容量和 Ping 值)决定使用哪个中继最好。中继的端口由中继服务器的操作系统和端口可用性决定。请不要假设中继具有任何一致性。

下图说明了中继连接流程:

+----------------+          1. 请求中继列表            +---------------------+
|                | ---------------------------------> |                     |
| 客户端 (你)    |                                    | api.resonite.com    |
|                | <--------------------------------- | (API 服务器)        |
+----------------+          2. 返回可用列表            +---------------------+
       |
       | 3. 客户端内部处理:
       |    - 测试各节点 Ping 值
       |    - 检查节点负载容量
       |    - 决定使用哪个中继 (例如 uswest1)
       v
+----------------+                                    +---------------------+
|                |          4. 建立 UDP 连接           |                     |
| 客户端 (你)    | <--------------------------------> | 选定的 LNL 中继     |
|                |                                    | (例如: japan1)      |
+----------------+                                    +---------------------+
                                                                 ^
                                                                 | 5. 转发流量
                                                                 v
                                                      +---------------------+
                                                      |                     |
                                                      | 目标房间主机        |
                                                      |                     |
                                                      +---------------------+

目前,我们不支持手动选择特定中继的功能。

Headless 服务器建议

为了更好地支持直接连接条件,建议服务器主机尝试推广直接 IP 连接和 IPv6 支持。

如果您有可用的公网 IPv4 地址,您可以对房间端口进行端口转发。为此,请在您的 Headless 配置文件中为世界设置 forcePort 选项,并通过路由器转发该端口。您可以通过搜索 “<路由器型号> port forward” 找到操作方法——对于大多数路由器,您都能在互联网上找到示例。

如果您支持 IPv6,请尽可能使用它。设置方法与 IPv4 示例相同(设置 forcePort),并在防火墙中放行房间端口及允许直接连接(参见 直接 IP 了解如何直接连接到房间)。

并非在所有情况下都能进行端口转发,例如如果您使用的路由器不支持端口转发,或者您处于 CGNAT 后面。

如果您处于 CGNAT(运营商级 NAT)后面,请看看能否脱离它——根据您的 ISP 和互联网连接类型,结果可能会有所不同。有些 ISP 在您要求时会将您移出 CGNAT,有些会要求您付费购买静态 IP 地址,有些则根本不允许脱离 CGNAT。

如果您的用户在使用 LNL 穿透连接时遇到问题,请引导他们直接连接到您的房间。制作一个连接对象——例如一个按钮,他们只需按下即可直接连接,这样会非常方便。

推荐的路由器配置

许多家用路由器默认配置为通过路由流量的方式为 Resonite 提供最佳连接,允许用户直接与其他互联网用户建立连接。然而,一些高级路由器采用一种 NAT(网络地址转换),在与互联网上的其他主机通信时不保留端口号。这种类型的 NAT 通常被称为严格型(Strict)或 “Type-3”。顾名思义,这种 NAT 的严格性质不允许与其他用户建立连接。

为了获得最佳的 Resonite 体验,建议将路由器配置为允许运行 Resonite 的计算机使用中等(Moderate)或 Type-2 NAT。每个制造商实现此配置的方式不同,品牌之间的术语也不尽相同。请参阅您特定路由器的文档,或在 Resonite Discord 服务器的 #questions-help 论坛中寻求帮助。

pfSense/OPNsense 配置

如果您使用 pfSenseOPNsense 路由器,其默认的出站 NAT 配置将阻止 Resonite 使用 LNL NAT 穿透 连接到房间。虽然在这种情况下 Resonite 会回退到使用 LNL 中继,但这会引入不必要的开销,您可以通过配置路由器允许这些连接来避免这种情况。

屏幕截图显示必须如何配置 pfSense 的出站 NAT 以允许 Resonite 的 LNL NAT 穿透工作。
配置为允许 Resonite 成功执行 LNL NAT 穿透的 pfSense 路由器

pfSense

  1. 登录到您的 pfSense 网页界面。
  2. 在导航栏中,点击 Firewall(防火墙),然后点击 NAT
  3. 点击 Outbound(出站)选项卡。
  4. Outbound NAT Mode(出站 NAT 模式)下,选择 Hybrid Outbound NAT rule generation(混合出站 NAT 规则生成),然后点击 Save(保存)。
  5. 接下来,点击 Mappings(映射)部分下方的第一个 Add(添加)按钮。
  6. Source(源)旁边,将 Type(类型)下拉菜单从 “Network” 更改为 “Any”。
  7. 向下滚动并选中标记为 Static Port(静态端口)的复选框。
  8. 点击页面底部的 Save(保存)。
  9. 点击页面顶部的 Apply Changes(应用更改)按钮。
屏幕截图显示必须如何配置 OPNsense 的出站 NAT 以允许 Resonite 的 LNL NAT 穿透工作。
配置为允许 Resonite 成功执行 LNL NAT 穿透的 OPNsense 路由器

OPNsense

  1. 登录到您的 OPNsense 网页界面。
  2. 在左侧边栏中,点击 Firewall(防火墙),NAT,然后点击 Outbound(出站)。
  3. Mode(模式)下,选择 Hybrid Outbound NAT rule generation(混合出站 NAT 规则生成),然后点击 Save(保存)。
  4. Manual rules(手动规则)部分将会出现。点击最右侧的 + 图标。
  5. 向下滚动并选中标记为 Static-port(静态端口)的复选框。
  6. 点击页面底部的 Save(保存)。
  7. 点击页面顶部的 Apply changes(应用更改)按钮。

针对严格 NAT 的 LNL 中继支持

Resonite 为使用严格 NAT 路由器的用户提供了一种通过称为 Resonite LNL 中继的中间服务器连接到其他用户的方法。虽然此解决方案适用于偶尔使用,但根据地理位置和网络负载/拥塞情况,它可能无法提供最佳性能。

您可以通过加入世界时 “Loading…” 消息下方是否出现 “LNL Relay” 文本来确定您是否正在通过 LNL 中继连接。出现 “LNL Relay” 文本意味着 Resonite 无法直接连接到主机用户,因此使用了 Resonite LNL 中继服务器。

出现 “LNL Relay” 文本通常表示您、主机用户或双方都可能处于严格 / Type-3 NAT 后面。如果您每次连接到世界时都看到此消息,那么很有可能您处于配置为严格 / Type-3 NAT 的路由器后面。

建议使用中等或 Type-2 NAT,以避免依赖 LNL 中继。有关更多信息,请参阅上面的 路由器配置 部分。

uPNP/NAT-PMP 和端口转发

Resonite 目前不提供对端口转发或 uPNP/NAT-PMP 的自动支持。