一、 安装 Mihomo 内核
Mihomo 是 Clash Meta 内核的继任者,原生支持多种代理协议。本文选用 AnyTLS 协议进行部署——它是一个基于 TLS 的轻量隧道,配置直观,非常适合搭配自签或受信证书使用。
1.1 检查系统架构
首先确认你的 Linux 机器架构,以便下载对应的二进制文件:
uname -m
通常 VPS 输出为 x86_64,对应 amd64。若为 aarch64 请选择 arm64 版本。本文以 amd64 为例。
1.2 下载并安装二进制
进入临时目录,下载最新版 Mihomo(此处以 v1.19.27 为例,请自行替换为最新版本):
cd /tmp
# 下载 amd64 v3 版本(性能最优)
wget https://github.com/MetaCubeX/mihomo/releases/download/v1.19.27/mihomo-linux-amd64-v1.19.27.gz
# 解压
gzip -d mihomo-linux-amd64-v1.19.27.gz
# 重命名并移动到系统路径
sudo mv mihomo-linux-amd64-v1.19.27 /usr/local/bin/mihomo
# 赋予可执行权限
sudo chmod +x /usr/local/bin/mihomo
随后创建配置目录:
sudo mkdir -p /etc/mihomo
如果你的 VPS 缺少
wget,先执行sudo apt install -y wget(Debian/Ubuntu)或sudo yum install -y wget(CentOS)。
二、 申请 TLS 证书
AnyTLS 需要一对有效的证书与私钥。这里使用 acme.sh 通过 Cloudflare DNS 自动申请 Let’s Encrypt 泛域名证书,并直接安装到 /etc/mihomo。
2.1 安装 acme.sh 并设置默认 CA
wget -O - https://get.acme.sh | sh
source ~/.bashrc
acme.sh --set-default-ca --server letsencrypt
2.2 使用 Cloudflare DNS 签发证书
先获取你的 Cloudflare API Token(需具备 Zone DNS Edit 权限),然后设置环境变量并签发:
export CF_Token="你的Cloudflare_API_Token"
acme.sh --issue -d example.com -d '*.example.com' --dns dns_cf --keylength ec-384 --force
这一步会在后台等待 DNS 验证,通常 30 秒内完成。泛域名证书会同时覆盖
example.com和*.example.com。
2.3 安装证书到指定目录
切换至 root 身份,将证书与私钥复制到 Mihomo 配置目录:
sudo -i
acme.sh --install-cert -d example.com -d '*.example.com' --ecc --fullchain-file /etc/mihomo/fullchain.pem --key-file /etc/mihomo/privkey.key --reloadcmd "systemctl reload mihomo"
acme.sh --upgrade # 可选:升级 acme.sh 到最新版
完成后,证书路径为(由于 mihomo 权限限制,这里的路径必须为/etc/mihomo或其下子文件夹内):
- 证书:
/etc/mihomo/fullchain.pem - 私钥:
/etc/mihomo/privkey.key - 自动续签证书:acme.sh 默认会添加 cron 任务自动续签,可使用
crontab -l查看。续签后已经设置了systemctl reload mihomo来加载新证书。
三、 编写 Mihomo 配置
3.1 基础配置文件
使用编辑器创建配置文件:
sudo nano /etc/mihomo/config.yaml
填入以下内容:
ipv6: true
log-level: warning
rules:
- MATCH,DIRECT
listeners:
- name: anytls-in-1
type: anytls
port: 65443
listen: "::"
users:
username1: password1
certificate: /etc/mihomo/fullchain.pem
private-key: /etc/mihomo/privkey.key
padding-scheme: |
stop=8
0=30-30
1=100-400
2=400-500,c,500-1000,c,500-1000,c,500-1000
3=9-9,500-1000
4=500-1000
5=500-1000
6=500-1000
7=500-1000
padding-scheme字段,可以灵活的设置填充几个数据包,每个数据包填充的字节范围,比如这里的意思是处理前 8 个数据包,给第 0 个数据包填充 30 字节,给第一个数据包填充 100-400 之间的随机字节大小,将第二个数据包进行策略拆分,先发送 400-500 字节,然后 check 检查该数据包是否还有数据,如果还有就继续发送 500-1000 字节,以此类推。
你可以做独一无二的配置,比如只填充 3 个,就可以把后面的填充规则删掉,或者模仿 vision 填充,更详细的规则可以查看官方文档。
如果你不配置padding-scheme字段的话,anytls 也有默认配置,就是上面的的 8 个填充方案,可以把这个字段整个删掉会更简洁。
3.2 注册 Systemd 服务
为了让 Mihomo 持久化运行,需要创建一个 systemd 单元文件:
sudo nano /etc/systemd/system/mihomo.service
粘贴以下配置:
[Unit]
Description=mihomo Daemon, Another Clash Kernel.
After=network.target NetworkManager.service systemd-networkd.service iwd.service
[Service]
Type=simple
LimitNPROC=500
LimitNOFILE=1000000
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SYS_TIME CAP_SYS_PTRACE CAP_DAC_READ_SEARCH CAP_DAC_OVERRIDE
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SYS_TIME CAP_SYS_PTRACE CAP_DAC_READ_SEARCH CAP_DAC_OVERRIDE
Restart=always
ExecStartPre=/usr/bin/sleep 1s
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
保存后重载配置并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable mihomo
sudo systemctl start mihomo
3.3 检查运行状态
确认服务正常运行:
sudo systemctl status mihomo
若看到 active (running) 且无报错,说明启动成功。查看最新日志可用:
journalctl -u mihomo -n 20 --no-pager
如需修改配置,只需 sudo systemctl reload mihomo 即可热重载。
四、 防火墙与客户端
4.1 防火墙放行端口
如果开启了 ufw,执行:
sudo ufw allow 65443/tcp
同时记得确保云服务商的安全组/防火墙也已放行该端口。
4.2 客户端连接示例
在支持 AnyTLS 的客户端(如 Mihomo 自身、FlClash、某些 Clash Meta 分支)中,节点配置格式如下:
anytls://你的密码@mihomo.example.com:65443#节点1
参数解释:
你的密码:必须与配置文件中users的密码一致。mihomo.example.com:替换为你的域名,必须与证书匹配,且 DNS 解析到服务器。65443:监听端口。skip-cert-verify=false:因为是受信 Let’s Encrypt 证书,建议保持为false以验证证书有效性。
4.3 优化小贴士
- 开启 BBR 加速:跨国连接时,BBR 能显著提升吞吐量:
# 添加参数配置文件并指定开启 BBR
sudo nano /etc/sysctl.d/99-bbr.conf
# 把下面的内容添加进去
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
# 读取配置,使 BBR 设置生效
sudo sysctl --system
# 确认BBR开启,此时应该返回这样的结果:net.ipv4.tcp_congestion_control = bbr
sysctl net.ipv4.tcp_congestion_control
# 如果你在疑惑这个 ipv4,无需在意,只是历史命名遗留,实际上对 ipv6 也是生效的。
# 如果你想确认 fq 算法是否正确开启,可以使用下面的命令,此时应该返回这样的结果:net.core.default_qdisc = fq
sysctl net.core.default_qdisc
4.4 停止服务并卸载
如果将来不再需要该节点,可以干净地移除所有相关文件:
- 停止并禁用服务
sudo systemctl stop mihomo sudo systemctl disable mihomo - 删除 systemd 单元文件并重载
sudo rm /etc/systemd/system/mihomo.service sudo systemctl daemon-reload - 移除二进制程序
sudo rm /usr/local/bin/mihomo - 删除配置与证书目录(若不再需要证书可一并清除)
sudo rm -rf /etc/mihomo - (可选)卸载 acme.sh
如果不再使用 acme.sh 管理其他证书,可彻底移除:
注意执行卸载后会提示删除相关 cron 任务。acme.sh --uninstall rm -rf ~/.acme.sh
安全建议:在执行删除前,建议备份
/etc/mihomo/config.yaml与证书,以备日后恢复或迁移。
4.5 自动更新内核脚本
自动识别机器内核并更新 mihomo 内核到 alpha 的最新分支~
ARCH=$(
case "$(uname -m)" in
x86_64) echo amd64-v3 ;;
aarch64|arm64) echo arm64 ;;
armv7l) echo armv7 ;;
*) echo "Unsupported architecture: $(uname -m)" >&2; exit 1 ;;
esac
) && \
URL=$(curl -fsSL https://api.github.com/repos/MetaCubeX/mihomo/releases/tags/Prerelease-Alpha \
| grep browser_download_url \
| grep "mihomo-linux-${ARCH}-alpha" \
| grep "\.gz\"" \
| cut -d '"' -f4) && \
cd /tmp && \
wget -O mihomo.gz "$URL" && \
gzip -df mihomo.gz && \
sudo systemctl stop mihomo && \
sudo mv -f mihomo /usr/local/bin/mihomo && \
sudo chmod +x /usr/local/bin/mihomo && \
sudo systemctl restart mihomo && \
/usr/local/bin/mihomo -v
希望这篇博文能帮到同样在折腾的小伙伴!欢迎在评论区交流。
喜欢的话,留下你的评论吧~