网络信息 (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.com和skyfrost-archive.resonite.com/variants - 资产(Assets)存储在
assets.resonite.com和skyfrost-archive.resonite.com/assets - 缩略图(Thumbnails)存储在
thumbnails.resonite.com和skyfrost-archive.resonite.com/thumbnails
- 资产变体(Asset variants)存储在
房间流量 (Session traffic)
当您连接到一个 Resonite 房间时,您正在启动与房间主机的连接。这通常是另一个用户的计算机,但有时也可以是 Headless(无头)房间,这些房间可能托管在很多地方——最常见的两个地方是某人的备用计算机或数据中心租用的服务器。
根据您的设置和房间主机的设置,您将使用以下协议之一进行连接:
- LNL (LiteNetLib)
- Steam Sockets。有时被称为 "Steam Networking Sockets", "Steam Network", "SNS" 等。
LNL
- LNL 使用 UDP 进行连接。
- 端口会有所不同,可以是任何端口,因为它允许主机选择一个空闲端口。
- 在其他情况下,将使用中继(Relay)。
- 在 打洞(Punch-through) 或中继之后,与用户的实际连接可以是任何 IP 或端口。
Steam Networking Sockets
Steam Networking Sockets 是 Valve 创建的网络协议。您可以在 这里 找到相关信息。
建立连接
Resonite 利用多种方法尝试将用户连接到远程机器上的房间。这可以用下面的流程图来说明。
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>/
- 对于 IPv6,请将地址用方括号括起来:
- 目前 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 配置
如果您使用 pfSense 或 OPNsense 路由器,其默认的出站 NAT 配置将阻止 Resonite 使用 LNL NAT 穿透 连接到房间。虽然在这种情况下 Resonite 会回退到使用 LNL 中继,但这会引入不必要的开销,您可以通过配置路由器允许这些连接来避免这种情况。
pfSense
- 登录到您的 pfSense 网页界面。
- 在导航栏中,点击 Firewall(防火墙),然后点击 NAT。
- 点击 Outbound(出站)选项卡。
- 在 Outbound NAT Mode(出站 NAT 模式)下,选择 Hybrid Outbound NAT rule generation(混合出站 NAT 规则生成),然后点击 Save(保存)。
- 接下来,点击 Mappings(映射)部分下方的第一个 Add(添加)按钮。
- 在 Source(源)旁边,将 Type(类型)下拉菜单从 “Network” 更改为 “Any”。
- 向下滚动并选中标记为 Static Port(静态端口)的复选框。
- 点击页面底部的 Save(保存)。
- 点击页面顶部的 Apply Changes(应用更改)按钮。
OPNsense
- 登录到您的 OPNsense 网页界面。
- 在左侧边栏中,点击 Firewall(防火墙),NAT,然后点击 Outbound(出站)。
- 在 Mode(模式)下,选择 Hybrid Outbound NAT rule generation(混合出站 NAT 规则生成),然后点击 Save(保存)。
- Manual rules(手动规则)部分将会出现。点击最右侧的 + 图标。
- 向下滚动并选中标记为 Static-port(静态端口)的复选框。
- 点击页面底部的 Save(保存)。
- 点击页面顶部的 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 的自动支持。
No comments to display
No comments to display