Ubuntu 20.04 Server 安装教程¶
在 VMware 虚拟机上安装 Ubuntu 20.04 Server Version
如何安装系统¶
选择 ubuntu server iso¶
选择 ubuntu-20.04.6-live-server-amd64.iso
Danger
注意,一定是 Server 版本,而不是 Desktop 版
因为 Server 更加轻量化
虚拟机配额¶
新建虚拟机,选 recommended

将刚才下载好的镜像文件导入

设置虚拟机名(在vmware中的显示名,而不是主机名 host name)

设置主机名, host name

disk分配,保持默认不变

配置 CPU/Memory/Network Adaptor: 点击 Customize Hardware

2' CPU2048 MemoryNetwork Adaptor: 保持默认,是NATNetwork Adaptor 2: 点击Add新建一个,选择模式host-only

结束配置,点击finish

系统安装¶
现在进入系统安装阶段,选择语言为English

跟图示一样即可

跟图示一样即可

跟图示一样即可, 不用动

跟图示一样即可, 不用动

跟图示一样即可, 不用动

跟图示一样, 取消勾选 Set up this disk as an LVM group

跟图示一样即可, 不用动

跟图示一样即可, continue

设置你的用户名(username)和密码

理论上现在你就是 username@hostname(hostname 在上面设置中提到过了)
勾选 Install OpenSSH Server: 自动配置SSH相关的内容,便于远程操控

啥也不选,直接 Done

现在就是系统安装的阶段了, 显示 Installing System

显示 Installing Complete! 后, 选择 Reboot Now!

现在输入完login的username和passwd, 就顺利进来了 :))

如何实现服务器端的“翻墙”¶
在 Server 端 “翻墙” 可没那么容易
- Server端 没有 Desktop端 的图形化界面
- Desktop端 如何“翻墙”? 传送门
- 需要打破翻墙的“自环” (传送门提到过👆)
- 需要深刻理解“配置文件”是什么?
具体的原理我在这里就忽略了,我们只讲解如何做
Note
我们的默认是, 你的 物理机(宿主机) 已经成功翻墙
现在 VMware 上的 Ubuntu20.04 还没翻墙
打开 linux 命令行,依次执行下列命令
| Bash | |
|---|---|
1 2 3 | |
在宿主机上下载 clash-linux / Country.mmdb / GeoSite.dat
| Bash | |
|---|---|
1 2 3 4 5 | |
选择 GeoSite.dat的任一链接 下载
在CLI中开设两个窗口
- Win1: 远程连接上 ubuntu server
Bash 1ssh ubuntu@172.16.122.129 - Win2: 本机传送scp指令
Bash 1 2 3 4
cd ~/Downloads scp ./clash-linux.gz ubuntu@172.16.122.129:~/.config/mihomo/ scp ./Country.mmdb ubuntu@172.16.122.129:~/.config/mihomo/ scp ./geosite.dat ubuntu@172.16.122.129:~/.config/mihomo/
如何使用SSH连接到Ubuntu VM
| Bash | |
|---|---|
1 2 | |
找对应的端口IP即可
比如笔者的是, 下面的172.16.122.129:
| Bash | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | |
- 找
inet对应的 - 找
host-only的 interface 对应的 IP - 笔者处:
ens34是host-only;ens33是NAT
从梯子下载配置文件
参考 这里

做法: 点击 Clash 的订阅链接
这是一个URL,将这个URL复制到浏览器搜索栏,就会自动下载一份文件
这个文件本质上是一个 .yaml 配置文件, 类似于:

在本机保存好,待会要复制并覆盖 config.yaml
现在本机的使命达成,后面我们聚焦于ubuntu server窗口:
ubuntu server clash 运行配置
现在你的~/.config/mihomo应该包含以下成分:
| Bash | |
|---|---|
1 2 | |
解压到当前文件夹:
| Bash | |
|---|---|
1 | |
授权可执行权限:
| Bash | |
|---|---|
1 | |
初始化执行 clash:
| Bash | |
|---|---|
1 | |
发生了点笔误,我们要修复下 :-(
跟刚才一样,我们回到Win2上,进行如下操作:
| Bash | |
|---|---|
1 2 3 | |
现在来修改配置文件~/.config/mihomo/config.yaml:
| Bash | |
|---|---|
1 2 3 | |
将之前拉到本地的配置文件(上面展示的那种,从梯子下载的)中的文本复制粘贴到config.yaml
然后,再次启动clash
| Bash | |
|---|---|
1 | |

看见这样的结果,就知道已经稳了 :)
基于上述,日常开发如何使用梯子
- 在本机开两个CLI窗口连接ubuntu server
- 其中一个窗口进入
~/.config/mihomo运行:./clash-linux - 相当于后台进程
- 另一个窗口做开发
服务器的VPN如何可视化配置¶
YACD 是一个专门为 Clash / Mihomo 提供GUI的"网页版控制面板"
我们目前在 Ubuntu 服务器上运行的 ./clash-linux 是一个纯命令行的核心程序, 它本身没有任何界面, 只能通过修改配置文件或者发 API 请求来控制
为了让大家能像使用手机或电脑上的客户端一样直观地操作, 开发者们就做出了这类网页
(1) 通过 SSH 把服务器上的 9090 端口"映射"到你本地电脑
本地转发
| Bash | |
|---|---|
1 | |
登录成功后, 保持这个终端窗口开着不要关
(2) 打开本地电脑的浏览器, 访问在线面板: https://yacd.metacubex.one/
在 API 基础地址里填入: http://127.0.0.1:9090, 点击"添加"并连接


服务器的VPN如何进行节点分流¶
这部分写于 2026-07-01, 近期由于 claude 封号太严重
笔者需要日常维护 "多设备 IP" 的一致性. 如何"养号"脱离本文讲解范围, 这里只聚焦:
"如何在 headless server 上将VPN流量全部采用 Global, 并全部从
🇸🇬 新加坡 12 家宽节点走"
(1) 开启 mihomo 代理工具进程
| Bash | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
(2) 基于 Clash RESTful API 从外部改变
仔细检查自己的配置文件 config.yaml
比如对于笔者的配置文件, 里面已经开启了 API 控制, 参数如下:
- API 地址:
127.0.0.1:9097(external-controller) - 访问密钥:
set-your-secret(secret)
[1] 设置 Global 节点:
| Bash | |
|---|---|
1 2 3 4 | |
如果执行成功,通常不会返回任何报错信息。或返回一个空的 HTTP 204 No Content 状态
[2] 进行检查:
检查, 确认目前 Global 到底走的是哪个节点
| Bash | |
|---|---|
1 2 | |
这个命令会返回一串 JSON 数据! 找到里面 "now": 对应的值, 那就是当前正在使用的节点!!!
| Bash | |
|---|---|
1 2 3 4 | |
看笔者这里, "now":"🇸🇬 新加坡 12 家宽", 从而确定已经成功!
[3] 上述效果已持久化, 进程关闭再重启不影响"已完成的节点配置"
这个更改是持久化的, 未来再次启动进程时, 不需要重新执行这条 curl 命令
因为在笔者的配置文件中,包含了一项非常关键的设置:
| Bash | |
|---|---|
1 2 | |
通过 API(或图形界面)切换节点后,Mihomo(Clash)会把我们的这个选择状态写入到工作目录下的一个缓存文件里(通常名为 cache.db)
当按下 ctrl+c 正常结束进程时,Mihomo 会优雅退出,并确保状态安全保存
下次再运行 ./mihomo-linux-amd64-v1.19.22 -d . 时,它会读取这个缓存文件,自动恢复上次在 GLOBAL 模式下选中的 "🇸🇬 新加坡 12 家宽"
什么时候会失效
- 删除了缓存文件: 如果我们手动删除了当前目录下的
cache.db文件... - 异常强制退出: 如果进程被异常杀死(例如使用 kill -9 强杀,或者服务器直接断电),导致 Mihomo 没来得及将内存中的选择状态写入硬盘
- 更换了工作目录: 如果下次启动时换了一个目录(例如没有加
-d .,导致它去读~/.config/mihomo里的默认空缓存)