138 lines
9.1 KiB
Markdown
138 lines
9.1 KiB
Markdown
---
|
||
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 的东西吧。
|
||
|
||
不过反正我这人也没什么水平,笔记也不过抛砖引玉。菜逼有菜逼的天马行空,简单点写,懂的都懂。
|