Fadegentle WebSiteRSS

外网串流

当前方案

  • 串流发送端使用 Sunshine 基地版
  • 接收端使用 Moonlight
  • 使用 ZeroTier 组网
  • 使用 华硕路由器 APP 进行远程开机
  • 使用 威力加强版 Moonlight 发送睡眠指令(或者设置电源闲置自动睡眠)

小白方案

  • 手机下载安装 各厂商官方路由器 APP 远程开机 + 各端下载 UU 远程 即可

🚫 🚫 🚫

  • 路由器的远程连接可以使用厂商的 APP,方便快捷
  • 华硕路由器 APP
    • 在外网使用 APP 扫描内网设备时,最好使用流量,不然会先扫描当前 WIFI 下的设备
    • 即便网页显示固件不支持 DDNS,手机也能点开 DDNS,然后就可以在网页端修改
    • 公网连接网页设置端时,要使用 HTTPS
    • 官方固件嵌入式 Linux 基本不可操作,可以使用 官改固件,设置好 开机定时上报 IP 的邮箱脚本,参考 User-Scripts 运行

折腾方案

1)仅内网串流

  1. 电脑安装 Sunshine 基地版(配置注意事项)
  2. 手机安装 Moonlight,打开选择自动扫描到的电脑串流即可

2)公网串流

  1. 电脑安装 Sunshine 基地版(配置注意事项)
  2. 手机安装 Moonlight,打开填入穿透或者连接电脑对应的 IP/域名 串流即可

3)远程开机+公网串流

  1. 使用 路由器的 厂商APP 或者 IPv6 进行 WoL 或者 使用智能插座 APP,控制远程开机
  2. 同 2)公网串流

⚠️ ⚠️ ⚠️ 一定要保持电脑电源通电!!!


📝 ######

Sunshine 基地版

  1. 安装的时候,选 否 保留配置
  2. 自建快捷方式时,要用 "C:\Program Files\Sunshine\sunshine.exe" --shortcut
  3. 虚拟屏幕找不到的时候,确保删除干净文件夹 C:\IddSampleDriver,然后再重装 Sunshine 基地版
  4. Configuration 配置 大部分默认即可
    • Audio/Video 中,输出显示器指定 选择虚拟显示屏,串流时显示器组合状态设定 选择 禁用其他显示器,只启用指定显示器
    • Network 中,UPnP 选择 启用,IP 地址族 选择 IPv4+IPv6,公网加密模式 选择 禁用
  5. 未串流时,在 Win+P 选择 仅电脑屏幕,否则虚拟屏幕可能会干扰日常操作

📝 ######

公网连接设备

组网

  • 不管是从易用性,还是安全方面考虑,都建议使用 ZeroTier、TailScale 等组网工具

穿透连接

  • 皎月连(Moonlight 有皎月连版本)等
  • 云服务器自建

IP 连接

  • 不建议使用家用 IPv4 连接,网段小,容易被发现请喝茶
  • 关闭路由器 IPv6 防火墙,细致且自信的可以选用端口开放,但扫描成本逆天,也没什么好损失的,个人觉得无所屌谓
  • 可以使用脚本邮件或者 webhook 获取设备 IP
  • IPv6 要使用 [],如 [xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx]

域名连接

  • 可以用脚本或者 ddns-go 这类服务开机自启,配合 Dynv6 一类服务商进行 DDNS

远程开机

  • Windows&BIOS WoL Setting 网络唤醒系统设置
  • UU 远程如何设置远程开机?

参考链接:

  • Windows&BIOS WoL Setting 网络唤醒系统设置
  • Sunshine Github Releases 主机端基地版下载
  • Moonlight All Platforms 串流端下载
  • Moonlight Internet Hosting Tool 配置工具下载
  • Sunshine Foundation 基地版文档
  • Dynv6 提供子域名的 DDNS 带善人
  • 杂鱼串流工具箱
  • 摄影师云飞串流一站通
  • 茶叶蛋TEGG串流游戏百问百答

附录:相关学习

内网穿透

💡 💡 💡 一般建议使用 p2p 穿透,这样三方服务器只用于建立连接,不受限于其的 流量、带宽、网速

内网穿透的核心目标是 让两个位于 NAT(网络地址转换)后的设备能够直接通信。在 NAT 环境下,私有网络的设备(如家庭路由器后的设备)通常无法直接与外部互联网通信,因为它们有私有 IP 地址,而外部网络只知道公有 IP 地址。

为了克服这个问题,内网穿透使用了一些技巧来“打破” NAT 限制:

  1. STUN(Session Traversal Utilities for NAT):

    • STUN 是一种协议,用于帮助设备发现自己的公有 IP 地址和 NAT 后的端口。通过 STUN,设备能够确定自己在 NAT 设备后面的外部 IP 和端口。
    • 但是,STUN 并不适用于所有类型的 NAT。尤其是 对称 NAT 类型,STUN 就无法穿透。
  2. TURN(Traversal Using Relays around NAT):

    • 如果 STUN 无法穿透 NAT,使用 TURN 协议的 中继服务器就可以帮助设备建立连接。TURN 服务器充当了中转站,所有的通信流量都通过 TURN 服务器进行转发。
    • TURN 是一种端口转发技术,数据通过服务器中转。虽然 TURN 能够确保通信的成功,但它的性能较低,因为所有的流量都要通过第三方服务器中转。
  3. ICE(Interactive Connectivity Establishment):

    • ICE 协议是一种更全面的 NAT 穿透机制,它结合了 STUN 和 TURN。在尝试建立 P2P 连接时,ICE 会首先尝试通过 STUN 直接建立连接,如果不行,再使用 TURN 服务器进行中继。
    • ICE 采用了 候选地址 的方式,首先尝试 STUN 连接,若失败则回退到 TURN。

P2P 内网穿透过程

  1. 客户端通过 STUN 服务器 获取自己的公网地址,尝试建立直连。
  2. 如果直连失败,使用 TURN 服务器 中转数据(即通过端口转发)。
  3. 如果连接成功,通信就通过 P2P 直接进行,之后的流量不会再经过 TURN 服务器。
  4. 如果连接仍然失败(如 NAT 类型不支持任何穿透),可能需要使用更多的中继技术或者人工干预。

非 P2P 内网穿透过程

  1. 客户端通过端口转发(Port Forwarding):设备上的应用程序通过端口转发,将公网 IP 地址与局域网内设备的端口进行映射,从而使外部设备能够通过该映射连接内网设备。
  2. VPN连接:通过在内网和公网之间建立 VPN 隧道,设备可以在 VPN 内部直接通信。所有流量都通过 VPN 服务器进行转发。
  3. 反向代理:例如,在 Web 服务中,内网设备将流量通过反向代理服务器转发到公网,通过该服务器提供服务。外部客户端只需连接到代理服务器即可。

与P2P的区别:

  • 中心化:非P2P内网穿透通常依赖一个中介服务器来转发数据。所有通信流量都通过该服务器处理,这样确保了通信的可用性,但会增加延迟和流量消耗。
  • 无直接连接:非P2P方式并不会直接在两个设备之间建立连接,而是通过一个服务器或网关转发流量。客户端和服务器之间建立连接,客户端与客户端之间的数据并不直接交换。
  • 常见应用:常用于需要公网访问内网服务的场景,如公司内部服务访问、远程桌面、Web 应用程序的访问等。

比较:

特性P2P内网穿透非P2P内网穿透
数据流动方式点对点(直接通信)通过中继服务器或代理转发数据
依赖的技术STUN、TURN、ICE、NAT穿透端口转发、VPN、反向代理
连接方式客户端与客户端直接连接客户端与服务器连接,服务器转发数据
服务器负担初期连接建立时可能使用 TURN 中继服务器数据全程通过中继服务器,负载较大
适用场景音视频聊天、文件共享、游戏等需要低延迟的应用需要稳定访问内网服务的场景,如远程办公、远程管理等

非P2P内网穿透的具体技术:

  1. VPN(虚拟私人网络):

    • VPN 是一种广泛使用的非P2P穿透技术,它通过在设备和公网之间建立一个加密的隧道,来使得内网设备能够安全地与外部网络通信。VPN 允许客户端通过 VPN 服务器连接,并且所有的通信流量都通过 VPN 服务器进行转发。
  2. 反向代理:

    • 在 Web 服务中,反向代理可以用来将外部请求转发到内网的服务。例如,内网的 HTTP 服务器可以通过 Nginx 或 Apache 配置反向代理,将外部请求转发到内部服务器,外部用户无法直接访问内网服务器,只能通过代理进行访问。
  3. 端口映射(Port Forwarding):

    • 通过配置路由器或防火墙的端口转发规则,外部设备可以访问内网设备。端口转发是一种常见的非P2P内网穿透方式,通常用于游戏主机、Web 服务和其他需要将内网服务暴露给公网的场景。
  4. 中继服务器(Relay Server):

    • 中继服务器是一种依赖于服务器的内网穿透方法,数据流通过一个公网服务器转发,确保内网设备能够接收到外部设备的数据。与 P2P 的直接连接不同,所有的数据都通过中继服务器进行转发,可能带来较高的延迟和带宽消耗。

在 GitHub 上查看原文