--- category: 灵机一动 tag: - RDP - 串流 - SSH --- # 自组服务:让老机器“物尽其用” 这问题最初还真是为了分担《原神》这种重负载。毕竟 2.8 版本的海岛成功把我的轻薄本干烧了。~~虽然轻薄本拿去直播《原神》讲真也挺抽象的。~~ 然后次年下旬,我折腾 Hyper-V 时发现它似乎是通过远程提供的虚拟机界面,于是便走上了“自组服务”的不归路。 说白了,“把重负载分摊出去”的做法,某种意义上也顺应如今的各种“云”服务——把重活脏活甩给有能力负担的机器(对于绝大多数用户而言当然就是企业的云服务器),并提供轻量的终端接口给用户。何尝不是一种 C/S 模式呢? --- 话虽如此,自组服务也并非是自己买台服务器——那功耗和噪音注定不是家庭可承受的。所以让老机器“物尽其用”,也就成了我的首选。 > [!important] > - 量力而行。这里的“力”指**老机器的配置、性能**。你毕竟不能强求赛扬 CPU 去跑《原神》PC 客户端。 > - 下面无论何种部署方式,均要求**在能够建立远程连接之前,首先有块屏幕**。 > - 本文只提供大概流程(或者说思路),**恕不详述具体操作流程**。信息检索能力很重要喔,哪怕是问 AI 呢? ## 前置准备 首先,需要固定机器在内网的 IP。你可以在路由器或是在 Windows 的控制面板或者设置里操作。具体的教程还请百度,恕不展开。 ::: details Linux 如何固定 必应了一下,有介绍`/etc/sysconfig/network-scripts`的,有介绍最新版 Ubuntu 使用的`netplan`工具的,五花八门。 Arch Linux 安装时可以用`systemd-networkd`配置。 首先`ip link`(有的教程用`ip a`)查看网络设备号,然后编辑`/etc/systemd/network/网络设备号.network`,之后重启`systemd-networkd`服务。 ::: 然后有条件的话可以尝试异地互联,比如出门可以用手机连回家里的老主机,用 Emby 看电影之类的。家里**有公网 IP 最好,但建议认真配置防火墙**;没有公网的也可以尝试 Zerotier 等工具**组虚拟内网**。 :::: details 配置 Zerotier One 首先当然得有那么个内网。在 [Zerotier](https://my.zerotier.com/login) 上注册/登录账号(可能比较卡,毕竟国外平台),`Create A Network`创建虚拟内网。免费版(截至目前)至多允许同一网络 25 个设备,但对于我来说足够了。 接下来图省事的朋友点进新建的网络,记一下`Network ID`就可以直接安装 Zerotier 客户端了。 Windows 有挂在任务栏里的 GUI 客户端,右键图标直接`Join Network`,粘贴刚刚的`Network ID`回车,进账号里同意加入、给它分配固定 IP 即可; Linux 可以通过 Docker、官网提供的命令行、部分包管理器等方式安装 Zerotier One。 ::: details 或者,进一步配置虚拟内网 主要关注以下项: - `Basics` 网络基础设置 - `Name` 给你的内网重新起个拟人的名字。 - `Access Control`一般来说保持默认的`Private`(也就是必须你在账号上同意设备加入)即可。 - `Advanced` 高级设置 - `Manage Routes`相当于路由表了(左边是被访的内网网段,右边是 Zerotier 虚拟 IP)。 可以看看[这篇博客](https://stray.love/jiao-cheng/zerotier-zhong-jie-jiao-cheng)了解一下。 - `IPv4 Auto-Assign`里挑一个容易记的 IP 池。比如我就选`10.147.17.*`。 - `IPv6 Auto-Assign`就随意了。说来 IPv6 现阶段不就是公网吗( - `DNS`参见[英文文档](https://docs.zerotier.com/dns/)。 然后在设备加入虚拟内网之后,可以在`Members`里找到这个设备,手工给它分配个静态 IP。 ::: 安装之后记得确认一下 Zerotier 服务是否开启,Docker 容器还请额外注意端口映射。 ```bash sudo systemctl status zerotier-one.service ``` 如`systemctl`显示该服务`disabled`、`inactive (dead)`,说明没有启动,启用并立即启动它: ```bash sudo systemctl enable --now zerotier-one.service ``` 于是就可以使用 Zerotier CLI 了。我的场景比较简单,不考虑自建 moon 的情况下直接`sudo zerotier-cli join Network_ID`,然后也是在账号上给它放行、分配固定 IP 就可以了。 :::: ## Windows——远程、串流、文件共享 Windows 想必大家都很熟。但既然把老主机当作“服务”来看待,便没有必要守在它旁边操作。也就是说,我们可以通过远程、串流等方式连上这台电脑,就好像云原神一样:游戏是在电脑上跑的,玩家是在手机上玩的。 Windows 开启 RDP 远程可以通过“高级系统设置”的“远程”选项卡(Win7、8.1 可在**控制面板—系统**信息页跳转)、**设置—系统—远程桌面**(Win10、11)启用。 而如需像云原神般串流,则需要 Sunshine(被控服务端)和 Moonlight(控制终端)两个软件。~~当然也有别的串流方案,但 Moonlight 我折腾成了。~~ 由于间隔比较久远,相关的教程可以去 B 站搜索“自制云原神”词条,或者搜“阿西西”这个 UP 主,我也就不多展开了。 至于文件共享,最简单的方式是 Samba,也就是右键文件(夹)属性里的“共享”选项卡。记得遵照指引去“网络和共享中心”先“启用文件和打印机共享”喵。 ### 可部署的服务 我个人倒是有过这些实践: - 开着 BiliBili 直播姬做推流机,从内网接收 OBS 流,并推上 B 站; - 挂着各种网盘(尤其百度网盘)下载; - RDP 玩剑三(Moonlight 实测会屏蔽键盘输入)、串流玩崩原铁; - 远程过去 P 图,开 After Effect 2018 做视频; - …… 总的来说,你平时怎么用那台牢机器的?那就怎么对待它就是了。3 代 i3?老老实实办公、文件共享,玩些老游戏差不多就得了。10 代 i5?那可以试试串流玩点新游戏,After Effects 2020 做点视频特效,之类的。要是还有 AMD/NVIDIA 显卡,嚯,那甚至可以试试大模型。 **还是那句话,有什么样的性能办什么样的事**,不要学我一下子把负载全都倒到老 ASUS 上,VSCode Remote+WSL+网易云+百度云+……,一下子给 7 代 i5、4GB 物理内存、32GB 虚拟内存(甚至才吃了 14GB)整不会了。 ### 常驻开机 作为自组服务器,肯定不兴像平日的 Windows 那般被自动更新、启动修复等扰得无法远程。 自动更新可以在**组策略`gpedit.msc`—计算机配置—管理模板—Windows 组件—Windows 更新—配置自动更新**一项中配置“已禁用”;若需禁止进 WinRE 启动修复,可以考虑以下两行批处理: ```batch bcdedit /set {default} bootstatuspolicy ignoreallfailures bcdedit /set {current} recoveryenabled No ``` 当然我已经换用 Ubuntu Server 了,这两行有没有用我也没有底( ## Linux——开发、常驻服务、文件存取 不得不说,Linux 能作为日用的服务确实不多(特别是无图形界面的服务器端),绝大多数部署起来可能还并不轻松。~~但部署好了之后是真好用啊(~~ 那么既然不需要日用,为了节省图形资源,干脆就把老主机当作服务器,装个无图形界面的 Linux 吧。可以百度“Ubuntu Server 家庭云服务器”,有不少教程。 Linux 的主要远程手段是 SSH。在此之前需要安装`openssh`,并启用(和启动)`sshd`服务。 控制端则可以装一些便捷的工具去维护 SSH 连接,比如 [Xshell](https://www.xshell.com/zh/xshell/) 和 [Xftp](https://www.xshell.com/zh/xftp/)。 ### 可部署的服务 1. 代理服务器(不光是服务器本机,在内网范围内其他电脑都可以过这台机的代理) > 为什么是代理优先呢?因为像`docker`、`npm`等很多服务都需要代理。这或许也是一种“分层结构”吧。 2. `docker`容器服务(这种就基本上是服务器在跑,也是作为下层服务去提供别的服务) 3. `aria2`下载服务(BT/PT,乃至直链[^direct_http]),配合`ariaNg`等 WebUI [^direct_http]: 有些浏览器下载比较慢的,借助`aria2`和代理或许能明显改善速度。!!比如已似的 Pandownload。!! 4. `emby` `jellyfin`影音服务(但总的来说和国内的手机 APP 一样,资源管理比较单一,莫得音、视、图同时管理,可能大多数人对这些资源分类比较门清吧) 5. 跨平台前、后端开发(`nodejs` `python` ...,搭配 VSCode Remote-SSH) 6. 文件存取服务(Xftp) 7. 其他定时服务、脚本…… ## 后记 通篇看下来,我的服务场景也挺简单的,不是吗?说实话……我并不熟悉寄网(哪怕为了跨考自学过 408),平时也没有太多 Web 编程的实践和需求。能简单搭这么一个自用的服务便已经方便我不少了。若是真正的大佬,或许还会利用反代、软路由等种种轮子实现更加 NB 的东西吧。 不过反正我这人也没什么水平,笔记也不过抛砖引玉。菜逼有菜逼的天马行空,简单点写,懂的都懂。