EasyTier+Cloudflare Tunnel 优雅20r成本个人自托管方案
背景与缘起
起因是在 Trilium 交流群中分享自己的作品,意外结识了一位朋友,对方也是个热衷于捣鼓电脑的人。更令人惊奇的是,他竟然是艺术生,而且年龄还比我小。在服务器的很多领域,我确实不如他。于是我们交流了蛮多这些关于网络的有趣知识,并互相交换了笔记。打算抽空重温一下他曾经踩过的坑。
在他的推荐下,我也买到了比较便宜的服务器:https://host.idcfx.net/
遇到的痛点:便宜是有代价的
入手服务器后,我发现了这台“廉价”服务器(01-NAT VPS)的致命短板:
- 没有独立公网 IP:
- 服务器 IP 信息:
103.xx.xx.85:6xx55。 - 真相:这就像几百人合租一套房,大家共用一个大门(公网 IP
103.xx.xx.85)。
- 服务器 IP 信息:
- 端口极度受限:
- 我没有
80(HTTP)、443(HTTPS) 甚至标准的22(SSH) 端口的使用权。 - 服务商只分给了我一个偏僻的
6xx55端口(映射到内网 22 用于管理)。
- 我没有
- 困局:
- 想建站?没 80 端口,无法直接访问。
- 想远程访问家里 NAS?需要复杂的转发。
- 朋友的原始方案:用 EasyTier 组网,但需要买一台更昂贵的独立 IP 服务器做出口 —— 这违背了我“穷折腾”的初衷,让这台便宜 VPS 变得鸡肋。
破局思路:Cloudflare Tunnel + EasyTier
为了不买昂贵的服务器,我找到了一套**“白嫖”公网入口**的终极方案。
核心逻辑: 不再寻求“购买”公网 IP,而是利用 03-Cloudflare Tunnel的反向隧道能力,配合 02-EasyTier的内网穿透能力,让流量“主动”找上门。
- Cloudflare:提供免费的全球公网入口(解决无 IP、无端口问题),作为公网大门,通过 Tunnel 将流量安全转发进 VPS,再由 VPS 转发给 Windows。
- VPS:作为 24 小时在线的稳定中转站 & EasyTier 组网核心(Signal Server),通过 NAT 端口映射暴露,供 Windows 直连。
- 家庭设备:通过 EasyTier 接入 VPS 的虚拟局域网,实际运行业务服务。
(只能说 非常非常非常强大 本地windows跑的项目可以安全的用一个优雅的自定义域名被公网访问 且具有极度方便的可拓展性 而成本只需要9.9一个月的服务器 + 12r一年的域名)
核心架构图解 (重点知识补全)
这套方案的精髓在于**“全链路主动出站,无视入站防火墙”**。
角色分工详解
| 角色 | 组件/环境 | 职责描述 | 网络特征 |
|---|---|---|---|
| 用户 | 浏览器 | 发起访问请求 (如 https://nas.example.com) |
只需能上网 |
| Cloudflare | Edge Network | 1. 提供 DNS 解析与 HTTPS 证书 2. 识别 Tunnel 流量并清洗攻击 (DDoS) 3. 将请求塞入隧道 | 公网入口 |
| VPS | cloudflared EasyTier | 作为中转跳板。 1. 运行 Tunnel 接收来自 Cloudflare 的流量。 2. 组网核心:作为 EasyTier 的公共节点(Planet),保证家庭设备即使 IP 变动也能互联。 | NAT/端口受限 只需能出网 |
| 家庭电脑 | EasyTier Nginx/宝塔 业务服务 | 作为业务落地。 运行实际的 Web 服务、NAS、Docker 等。 通过 EasyTier 虚拟 IP 接收来自 VPS 的请求。 | 无公网 IP 防火墙全闭 |
第一步:VPS 环境准备与端口映射
查看vps配置:
cat /etc/os-release
uname -m
free -h
ip addr
Ubuntu 22.04 + 4GB 内存,完全够用。
设置 NAT 端口转发
由于 VPS 只有内网 IP,我们需要在服务商后台“打个洞”供 EasyTier 通信。
- 登录服务商后台 (host.idcfx.net)。
- 找到买的那台nat vps

- 进入 NAT 转发 / 端口映射。
- 添加规则:
- 名称:随便填,比如
easytier - 协议:TCP+UDP
- 内部端口:11010 (EasyTier 默认端口)
- 外部端口:记下系统分配的端口 (例如 22020)
- 名称:随便填,比如
- 记录:VPS 公网 IP (103.xx.xx.85) 和 外部端口 (22020)。
第二步:部署 EasyTier (组建虚拟内网)
1. VPS 端 (作为核心服务器)
(1)下载 EasyTier
cd /root
wget https://github.com/EasyTier/EasyTier/releases/download/v2.2.3/easytier-linux-x86_64-v2.2.3.zip
若失败 使用代理:
wget https://ghproxy.net/https://github.com/EasyTier/EasyTier/releases/download/v2.2.3/easytier-linux-x86_64-v2.2.3.zip
(2)解压安装
apt update && apt install -y unzip
unzip easytier-linux-x86_64-v2.2.3.zip
mv easytier-linux-x86_64 /opt/easytier
chmod +x /opt/easytier/*
(3) 验证安装
/opt/easytier/easytier-core --version
(4)配置 Systemd 服务
下载并安装 EasyTier 后,配置 Systemd 服务使其开机自启。
复制下面的命令(整段复制),粘贴到 VPS 终端执行:
⚠️ 注意:下面的命令中
root123456是组网密码
cat > /etc/systemd/system/easytier.service <<EOF
[Unit]
Description=EasyTier Service
After=network.target
[Service]
# --ipv4 指定这台机器在虚拟网络里的IP (10.10.10.1)
# --network-secret 是你的组网密码,家里电脑也要填这个
# 注意:这里不需要 --peers,也不需要改端口,默认它就会监听 11010
ExecStart=/opt/easytier/easytier-core --ipv4 10.10.10.1 --network-secret root123456
Restart=always
User=root
[Install]
WantedBy=multi-user.target
EOF
# 启动服务并设置开机自启
systemctl daemon-reload
systemctl enable easytier
systemctl start easytier
# 查看状态
systemctl status easytier
如果看到绿色的active (running),说明 EasyTier 启动成功!
2. Windows 端 (加入局域网)
(1)下载EasyTier
github下载:EasyTier Windows GUI
(2)配置
配置重点:
- Virtual IPv4:
10.10.10.2(本机虚拟IP) - Network Secret:
root123456(必须与 VPS 一致) - Network Name:
default(必须与 VPS 默认值一致) - Peers (核心):
udp://103.xx.xx.85:22020(填 VPS 公网IP + 映射端口)- 原理:让 Windows 通过 VPS 的公网 IP 和映射端口,直连 VPS。
- 启动连接:
- 点击 Connect。
- 验证成功:Peer List 中出现
10.10.10.1,且 Latency 显示数值(如 74ms)。
或者直接改左下角配置文件:
instance_name = "default"
instance_id = "64f3ab07-6cc3-4b3f-9ee2-d4f3c1270492"
ipv4 = "10.10.10.2"
dhcp = false
listeners = [
"tcp://0.0.0.0:11010",
"udp://0.0.0.0:11010",
"wg://0.0.0.0:11011",
]
rpc_portal = "127.0.0.1:15888"
# 关键点1:这里指向你的 NAT VPS 公网入口
[[peer]]
uri = "udp://103.xx.xx.85:22020"
[network_identity]
# 关键点2:必须是 default,因为你 VPS 上没设置名字,默认就是 default
network_name = "default"
network_secret = "root123456" # 关键点3:你的密码
[flags]
# 关键点4:这里配置代理,解决你的网络环境问题 如果开了代理的话
socks5 = "127.0.0.1:7890"
点击运行 等待三秒左右 出现10.10.10.1 说明连上了vps
第三步:配置 Cloudflare Tunnel (公网暴露)
1. 域名准备
- 在 NameSilo 购买域名:https://www.namesilo.com/ (或者任意地方都可)
- 买个top后缀的大概10来块钱一年,买完就行,不用着急解析
- 修改 DNS 服务器 (NameServers) 指向 Cloudflare 提供的地址。(Cloudflare 添加域名)
-
打开 https://dash.cloudflare.com/ (需要先注册 用谷歌即可)
-
点击「添加站点」(Add a site)
-
输入: (你自己买的域名)
-
选择 Free(免费) 计划
-
点继续,Cloudflare 会给你 两个 NS 服务器:
-
- 去 Namesilo 修改 DNS
-
点击 你的域名 进入管理
-
找到 「NameServers」 或 「DNS 服务器」
-
点击 Change(修改)
-
删除原来的 NS,填入 Cloudflare 给的那两个
-
-
保存
2. VPS连接 Cloudflare
(1)下载并安装 cloudflared
这是连接 Cloudflare 的核心组件。由于是NAT VPS,同样使用国内加速链接下载。
依次执行:
# 1. 下载安装包 (使用加速镜像)
wget -O cloudflared-linux-amd64.deb https://gh-proxy.com/https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
# 2. 安装
dpkg -i cloudflared-linux-amd64.deb
# 3. 验证安装
cloudflared --version
(2)获取授权令牌,建立隧道
这一步需要回到电脑浏览器操作:
-
左侧菜单找到 Networks -> Tunnels。
-
点击蓝色按钮 Create a tunnel。
-
Select connector 选
Cloudflared,点 Next。
-
Name your tunnel 随便填(比如
vps-bridge),点 Save。
-
关键一步: 在 "Install and run a connector" 页面,确保选中 Debian (64-bit)。 Ubuntu 是基于 Debian 开发的,所以在 Linux 世界里,Ubuntu 和 Debian 是“一家人”。
下面有一个黑色的代码框,里面有一行以 `sudo cloudflared service install ...` 开头的长命令。这是连接 Cloudflare 的“钥匙”
-
执行:
systemctl status cloudflared
从日志里这句
ERR Failed to dial a quic connection看出,你的 VPS 网络环境对 QUIC协议 (UDP) 支持不好,导致连接超时。解决方法很简单:强制让它走 HTTP2 协议 (TCP)。
依次执行下面的命令来修复:
停止当前卡住的服务:
systemctl stop cloudflared修改配置文件(强制使用 http2)
sed -i 's/tunnel run/tunnel run --protocol http2/g' /etc/systemd/system/cloudflared.service重载配置并重启
systemctl daemon-reload systemctl start cloudflared再次查看状态
systemctl status cloudflared
3. 配置公网访问规则 (Public Hostname)
组网成功后,VPS 和 Windows 互通。现在需要 Cloudflare 把公网请求转发给内网的 Windows。
-
登录 Cloudflare Dash -> Zero Trust -> Networks -> Tunnels。
https://dash.cloudflare.com/f9f6bb732c788123a0654e0b8f23873f/home/domains
搜索Tunnels:
https://one.dash.cloudflare.com/f9f6bb732c788123a0654e0b8f23873f/networks/connectors
-
配置 Tunnel (
vps-bridge) -> Public Hostname。
-
添加规则 (Add a public hostname):
-
Subdomain:
note(笔记访问前缀) -
Domain: (我们一开始注册 并让Cloudeflare解析的域名)
-
Path: 空
-
Service Type: HTTP
-
URL:
10.10.10.2:37840 -
解析:Cloudflare 收到请求 -> 发给 VPS -> VPS 通过虚拟局域网 -> 找到 Windows (10.10.10.2) 的 37840 端口。
-
-
保存。
最终效果:
手机可以正常访问Windows 上的 Trilium 笔记,且全程加密,无需公网 IP。
思考:
1、再看看做了什么?
利用 NAT VPS 作为中转跳板,结合 Cloudflare 的边缘防护,实现零公网 IP 环境下的安全服务发布。
- VPS (核心枢纽):
- 角色: EasyTier 组网核心 + 流量中转站。
- 职责: 运行
cloudflared接收公网流量,同时运行 EasyTier 将流量转发至内网虚拟 IP。
- Windows (业务节点):
- 角色: 纯粹的业务提供者(Payload)。
- 职责: 运行具体服务(如 Trilium、Alist),通过 EasyTier 接入虚拟网,无需暴露任何公网端口。
- Cloudflare (安全网关):
- 角色: 门卫与保安。
- 职责: 处理 DNS 解析、自动 HTTPS 证书、WAF 防火墙过滤、Access 鉴权。
2、数据流向
从用户访问到服务响应的完整路径:
用户 (浏览器)
⬇(公网 HTTPS) Cloudflare 边缘节点 (CDN/WAF 清洗)⬇(加密隧道) VPS (由 cloudflared 接收)⬇(转发至内网 IP) EasyTier 虚拟网卡⬇(P2P 或中转 VPN 流量) Windows (EasyTier 接收 -> 本地端口)⬇具体服务 (如 Trilium)
3、安全性评估 (Security Analysis)
结论: 远高于传统直接穿透(FRP/端口映射),属于“企业级”零信任安全模型。
-
🛡️ 核心防御机制:
- 隐身术: 攻击者无法通过扫描 IP 找到你的真实位置,因为所有入口都在 Cloudflare。
- 闭门谢客: Windows 和 VPS 不需要开放 80/443 等高危入站端口。
- Access 绝杀: 可在 CF 后台设置“仅特定邮箱验证码”通过。黑客连 Trilium 的登录框都看不到。
4、扩展性指南 (SOP)
场景: 在 Windows 上新增一个服务(如 Alist,端口 5244)。
原则: 架构搭建完毕后,新增服务无需改动网络层(VPS/路由器)。
- Windows 端操作:
- 启动新服务(Alist)。
- 防火墙设置: 在 Windows 高级防火墙中,添加入站规则允许
5244端口(仅限内网/本机)。
- Cloudflare 端操作:
-
进入
Zero Trust->Tunnels->Configure。 -
Public Hostname 页签 ->
Add Public Hostname。 -
设置域名(如
pan.yourdomain.com)。 -
设置 Service:
Type: HTTP,URL: [Windows的EasyTier IP]:5244。
-
- 完成:
-
直接访问域名即可。
-
5、 瓶颈与局限 (Limitations)
- 带宽瓶颈: 取决于 NAT VPS 的上行带宽。若 VPS 只有 10Mbps,公网访问速度上限即为 1.2MB/s 左右。
- 延迟叠加: 流量经过 CF 节点和 VPS 转发,物理路径变长,延迟会比直连稍高(对网页服务无感,对游戏有影响)。
6、总结
这是一套低成本、高安全、易维护的完美个人自托管方案。
- 成本: 闲置/廉价 VPS 即可利用。
- 安全: Cloudflare 护盾 + 隧道隔离。
- 维护: “一次铺路,终身受益”,新增服务仅需 10 秒配置。
💬 评论