--- title: "01-再次出发" created: 2025-12-29 tags: - 项目筑基 --- # 再次出发 ## 背景与缘起 起因是在 Trilium 交流群中分享自己的作品,意外结识了一位朋友,对方也是个热衷于捣鼓电脑的人。更令人惊奇的是,他竟然是艺术生,而且年龄还比我小。在服务器的很多领域,我确实不如他。于是我们交流了一整夜关于这些有趣的网络知识,并互相交换了笔记。打算抽空重温一下他曾经踩过的坑。 在他的推荐下,我也买到了比较便宜的服务器: ![[2-Learning/03-项目筑基/05-网络与项目/03-再次出发/assets/image-2c010cbd.png]] ### 遇到的痛点:便宜是有代价的 入手服务器后,我发现了这台“廉价”服务器([[02-NAT VPS|NAT VPS]])的致命短板: 1. **没有独立公网 IP**: - 服务器 IP 信息:`103.40.14.85:61855`。 - **真相**:这就像几百人合租一套房,大家共用一个大门(公网 IP `103.40.14.85`)。 2. **端口极度受限**: - 我没有 `80` (HTTP)、`443` (HTTPS) 甚至标准的 `22` (SSH) 端口的使用权。 - 服务商只分给了我一个偏僻的 `61855` 端口(映射到内网 22 用于管理)。 3. **困局**: - 想建站?没 80 端口,无法直接访问。 - 想远程访问家里 NAS?需要复杂的转发。 - **朋友的原始方案**:用 EasyTier 组网,但需要买一台**更昂贵的独立 IP 服务器**做出口 —— 这违背了我“穷折腾”的初衷,让这台便宜 VPS 变得鸡肋。 ### 破局思路:Cloudflare Tunnel + EasyTier 为了不买昂贵的服务器,我找到了一套**“白嫖”公网入口**的终极方案。 **核心逻辑:** 不再寻求“购买”公网 IP,而是利用 [[03-Cloudflare Tunnel|Cloudflare Tunnel]]的反向隧道能力,配合 [[04-EasyTier|EasyTier]]的内网穿透能力,让流量“主动”找上门。 - **Cloudflare**:提供免费的全球公网入口(解决无 IP、无端口问题),作为公网大门,通过 Tunnel 将流量安全转发进 VPS,再由 VPS 转发给 Windows。 - **VPS**:作为 24 小时在线的稳定中转站 & EasyTier 组网核心(Signal Server),通过 NAT 端口映射暴露,供 Windows 直连。 - **家庭设备**:通过 EasyTier 接入 VPS 的虚拟局域网,实际运行业务服务。 ### 核心架构图解 (重点知识补全) 这套方案的精髓在于**“全链路主动出站,无视入站防火墙”**。 ![[2-Learning/03-项目筑基/05-网络与项目/03-再次出发/assets/12c4722c40ceb5ea07785afa5fba5755-12c4722c.png]] #### 角色分工详解 | **角色** | **组件/环境** | **职责描述** | **网络特征** | | --- | --- | --- | --- | | **用户** | 浏览器 | 发起访问请求 (如 `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** 防火墙全闭 | ![[2-Learning/03-项目筑基/05-网络与项目/03-再次出发/assets/image-f82a8698.png]] ## **第一步:VPS 环境准备与端口映射** ### 查看vps配置: ``` cat /etc/os-release uname -m free -h ip addr ``` ![[2-Learning/03-项目筑基/05-网络与项目/03-再次出发/assets/image-0aeb981b.png]] Ubuntu 22.04 + 4GB 内存,完全够用。 ### 设置 NAT 端口转发 由于 VPS 只有内网 IP,我们需要在服务商后台“打个洞”供 EasyTier 通信。 - 登录服务商后台 ([host.idcfx.net](https://host.idcfx.net/))。 - 找到买的那台nat vps ![[2-Learning/03-项目筑基/05-网络与项目/03-再次出发/assets/image-417e3571.png]] - 进入 **NAT 转发** / **端口映射**。 - **添加规则**: - 名称:随便填,比如 `easytier` - 协议:**TCP+UDP** - 内部端口:**11010** (EasyTier 默认端口) - 外部端口:记下系统分配的端口 (例如 **22020**) - **记录**:VPS 公网 IP (103.40.14.85) 和 外部端口 (22020)。 ![[image-42f64fca.png]] ## **第二步:部署 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-Learning/03-项目筑基/05-网络与项目/03-再次出发/assets/image-51cab3ba.png]] #### (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/* ``` ![[2-Learning/03-项目筑基/05-网络与项目/03-再次出发/assets/image-196bd545.png]] #### (3) 验证安装 ``` /opt/easytier/easytier-core --version ``` ![[2-Learning/03-项目筑基/05-网络与项目/03-再次出发/assets/image-25d9521d.png]] #### (4)配置 Systemd 服务 下载并安装 EasyTier 后,配置 Systemd 服务使其开机自启。 **复制下面的命令(整段复制),粘贴到 VPS 终端执行:** > *⚠️ **注意**:下面的命令中* `zw200495` *是组网密码* ``` cat > /etc/systemd/system/easytier.service < (或者任意地方都可) - 买个top后缀的大概10来块钱一年,买完就行,不用着急解析 - 修改 DNS 服务器 (NameServers) 指向 Cloudflare 提供的地址。**(Cloudflare 添加域名)** - 打开 (需要先注册 用谷歌即可) - 点击「**添加站点**」(Add a site) - 输入:`hxnppll.top` (你自己买的域名) - 选择 **Free(免费)** 计划 ![[image-4dc4fc17.png]] - 点继续,Cloudflare 会给你 **两个 NS 服务器**:![[image-da92739b.png]] ``` jacqueline.ns.cloudflare.com nash.ns.cloudflare.com ``` - **去 Namesilo 修改 DNS** - 打开 - 点击 `hxnppll.top` 进入管理 ![[image-f052c09f.png]] - 找到 「**NameServers**」 或 「**DNS 服务器**」 - 点击 **Change**(修改) - 删除原来的 NS,填入 Cloudflare 给的那两个![[image-546edc31.png]] - 保存 ### 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-Learning/03-项目筑基/05-网络与项目/03-再次出发/assets/image-b924bf72.png]] #### **(2)获取授权令牌,建立隧道** **这一步需要回到电脑浏览器操作:** 1. 进入 [**Cloudflare Zero Trust 面板**](https://one.dash.cloudflare.com/)。 2. 左侧菜单找到 **Networks** -> **Tunnels**。 3. 点击蓝色按钮 **Create a tunnel**。 ![[2-Learning/03-项目筑基/05-网络与项目/03-再次出发/assets/image-7fdfd39b.png]] 4. **Select connector** 选 `Cloudflared`,点 Next。 ![[2-Learning/03-项目筑基/05-网络与项目/03-再次出发/assets/image-1347bc97.png]] 5. **Name your tunnel** 随便填(比如 `vps-bridge`),点 Save。 ![[2-Learning/03-项目筑基/05-网络与项目/03-再次出发/assets/image-86bac0f3.png]] 6. **关键一步**: 在 "Install and run a connector" 页面,确保选中 **Debian** (64-bit)。 Ubuntu 是基于 Debian 开发的,所以在 Linux 世界里,Ubuntu 和 Debian 是“一家人”。 ![[2-Learning/03-项目筑基/05-网络与项目/03-再次出发/assets/image-7c5ece57.png]] 下面有一个黑色的代码框,里面有一行以 `sudo cloudflared service install ...` 开头的长命令。这是连接 Cloudflare 的“钥匙” ``` sudo cloudflared service install eyJhIjoiZjlmNmJiNzMyYzc4ODEyM2EwNjU0ZTBiOGYyMzg3M2YiLCJ0IjoiYjMzMDA4ZGItN2Q1Yi00NmQ5LWFhMzEtNTNlYmJjZTVhZjBhIiwicyI6IllUUmtPV015T1RVdE9EVTRNeTAwTXpFMUxXRmxZMk10TkdVeFl6WXdOelZqTm1WaSJ9 ``` ![[image-8e3417e1.png]] 7. **执行:** ``` systemctl status cloudflared ``` ![[image-83b7e867.png]] 从日志里这句 `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 ``` ![[2-Learning/03-项目筑基/05-网络与项目/03-再次出发/assets/image-4515e99e.png]] ### **3. 配置公网访问规则 (Public Hostname)** 组网成功后,VPS 和 Windows 互通。现在需要 Cloudflare 把公网请求转发给内网的 Windows。 1. 登录 Cloudflare Dash -> Zero Trust -> Networks -> Tunnels。 ![[image-86ea3a0c.png]] 搜索Tunnels: ![[2-Learning/03-项目筑基/05-网络与项目/03-再次出发/assets/image-6c66f358.png]] ![[image-0d22905e.png]] 2. 配置 Tunnel (`vps-bridge`) -> **Public Hostname**。 ![[image-b4973a7d.png]] ![[image-7a33ad25.png]] 3. **添加规则 (Add a public hostname)**: - **Subdomain**: `note` (笔记访问前缀) - **Domain**: `hxnppll.top` (我们一开始注册 并让Cloudeflare解析的域名) - **Path**: 空 - **Service Type**: **HTTP** - **URL**: `10.10.10.2:37840` - *解析:Cloudflare 收到请求 -> 发给 VPS -> VPS 通过虚拟局域网 -> 找到 Windows (10.10.10.2) 的 37840 端口。* ![[image-e8b96c96.png]] 4. 保存。 ## 最终效果: 手机可以正常访问Windows 上的 Trilium 笔记,且全程加密,无需公网 IP。 ![[6ba2abacbb63d910525a0dd6a2f96b55_720-8734e83f.png]] ## 思考: ### 1、再看看做了什么? 利用 NAT VPS 作为中转跳板,结合 Cloudflare 的边缘防护,实现零公网 IP 环境下的安全服务发布。 - **VPS (核心枢纽):** - **角色:** EasyTier 组网核心 + 流量中转站。 - **职责:** 运行 `cloudflared` 接收公网流量,同时运行 EasyTier 将流量转发至内网虚拟 IP。 - **Windows (业务节点):** - **角色:** 纯粹的业务提供者(Payload)。 - **职责:** 运行具体服务(如 Trilium、Alist),通过 EasyTier 接入虚拟网,**无需暴露任何公网端口**。 - **Cloudflare (安全网关):** - **角色:** 门卫与保安。 - **职责:** 处理 DNS 解析、自动 HTTPS 证书、WAF 防火墙过滤、Access 鉴权。 ![[2-Learning/03-项目筑基/05-网络与项目/03-再次出发/assets/image-c897c216.png]] ### 2、数据流向 从用户访问到服务响应的完整路径: > **用户** (浏览器) `⬇` (公网 HTTPS) **Cloudflare 边缘节点** (CDN/WAF 清洗) `⬇` (加密隧道) **VPS** (由 cloudflared 接收) `⬇` (转发至内网 IP) **EasyTier 虚拟网卡** `⬇` (P2P 或中转 VPN 流量) **Windows** (EasyTier 接收 -> 本地端口) `⬇` **具体服务** (如 Trilium) ![[2-Learning/03-项目筑基/05-网络与项目/03-再次出发/assets/image-f9805493.png]] ### 3、安全性评估 (Security Analysis) **结论:** 远高于传统直接穿透(FRP/端口映射),属于“企业级”零信任安全模型。 - **🛡️ 核心防御机制:** 1. **隐身术:** 攻击者无法通过扫描 IP 找到你的真实位置,因为所有入口都在 Cloudflare。 2. **闭门谢客:** Windows 和 VPS 不需要开放 80/443 等高危入站端口。 3. **Access 绝杀:** 可在 CF 后台设置“仅特定邮箱验证码”通过。黑客连 Trilium 的登录框都看不到。 ![[2-Learning/03-项目筑基/05-网络与项目/03-再次出发/assets/image-272cb00c.png]] ### 4、扩展性指南 (SOP) **场景:** 在 Windows 上新增一个服务(如 Alist,端口 5244)。 **原则:** 架构搭建完毕后,新增服务**无需**改动网络层(VPS/路由器)。 1. **Windows 端操作:** - 启动新服务(Alist)。 - **防火墙设置:** 在 Windows 高级防火墙中,添加入站规则允许 `5244` 端口(仅限内网/本机)。 2. **Cloudflare 端操作:** - 进入 `Zero Trust` -> `Tunnels` -> `Configure`。 - [here](https://one.dash.cloudflare.com/f9f6bb732c788123a0654e0b8f23873f/networks/connectors/cloudflare-tunnels/cfd_tunnel/b33008db-7d5b-46d9-aa31-53ebbce5af0a/edit?tab=publicHostname) - **Public Hostname** 页签 -> `Add Public Hostname`。 - 设置域名(如 `pan.yourdomain.com`)。 - 设置 Service:`Type: HTTP`,`URL: [Windows的EasyTier IP]:5244`。 3. **完成:** - 直接访问域名即可。 ![[2-Learning/03-项目筑基/05-网络与项目/03-再次出发/assets/image-a99ec660.png]] ### 5、 瓶颈与局限 (Limitations) - **带宽瓶颈:** 取决于 NAT VPS 的上行带宽。若 VPS 只有 10Mbps,公网访问速度上限即为 1.2MB/s 左右。 - **延迟叠加:** 流量经过 CF 节点和 VPS 转发,物理路径变长,延迟会比直连稍高(对网页服务无感,对游戏有影响)。 ### 6、总结 这是一套**低成本、高安全、易维护**的完美个人自托管方案。 - **成本:** 闲置/廉价 VPS 即可利用。 - **安全:** Cloudflare 护盾 + 隧道隔离。 - **维护:** “一次铺路,终身受益”,新增服务仅需 10 秒配置。 既然网搭起来了,现在考虑怎么织大,[[11-拓展局域网思路|拓展局域网思路]]。 最终版: [[10-VPS Docker 部署完整指南|VPS Docker 部署完整指南]] --- ⬅️ [[04-内网穿透 ngork|内网穿透 ngork]] 🏠 [[00-网络与项目|00-网络与项目]] ➡️ [[02-NAT VPS|NAT VPS]]