项目概况

公网探索计划:没有服务器,我用 NAS 也能遨游互联网!

2026-01-293 min read后端技术
服务器运维

!!! info 🛰️ 穷人的公网探索计划:没有服务器,我用 NAS 也能遨游互联网!

在预算有限的情况下,如何不购买云服务器,也能将本地 NAS 打造成“对外服务”的强大平台?本文记录了我用 本地设备 + 内网穿透 + 开源面板 实现公网可访问服务的完整方案。 !!!

✅ 方案一览

  • 零刻小电脑 小巧静音、性能足够、功耗低,是我用来充当“伪服务器”的利器。

  • 部署飞牛云 NAS 系统 飞牛云基于国产 openNAS 系统,界面友好、功能丰富,适合折腾。

  • 安装 1Panel 面板 用于部署和管理服务(如网站、数据库等),一个面板搞定一切。

  • 网络环境设置

使用 PassNat 内网穿透 无需公网服务器,通过选择稳定、价格合适的 PassNat 节点实现对外服务。(如果你家里网络有公网ip 就可以忽略这一步了)

  • 使用 Certd 管理 HTTPS 证书 一键申请 Let's Encrypt 证书,支持自动续期,让公网访问更安全、更专业。

  • cloudflare域名解析

部署过程

mini电脑、pve、飞牛nas这些硬件环境直接就跳过了

PassNat 内网穿透

PassNat

服务端配置

控制台配置

这里先配置控制台,选择内网穿透的端口和 ip。这里配置完成后会给这个隧道生成一个公网 ip。

自定义域名时候要使用。

客户端配置

docker 直接搜索这个镜像 uhub.service.ucloud.cn/ucpublic/frpc

cloudflare域名解析

在这里填写passnat 这个隧道分配的公网 ip,如果你本来就有公网 ip那么就可以跳过前面哪一步,直接填你的公网 ip即可。

certd 证书管理平台

docker部署

使用介绍

你可以直接使用 docker 命令部署。也可以使用 docker-compose 文件部署。

我这边在文件夹中下载 docker-compose 并指定了使用本地的 mysql 作为数据库。 注意下面的 mysql 是我本地的数据库,如果你也要用,要换成你自己的地址和账户信息。 如果你不想用 mysql 或者不想配置数据库,可以到官网找默认的配置。

yml
1version: '3.3' # 兼容旧版docker-compose 2services: 3 certd: 4 # 镜像 # ↓↓↓↓↓ ---- 镜像版本号,建议改成固定版本号,例如:certd:1.29.0 5 image: registry.cn-shenzhen.aliyuncs.com/handsfree/certd:latest 6 # image: ghcr.io/certd/certd:latest # --------- 如果 报镜像not found,可以尝试其他镜像源 7 # image: greper/certd:latest 8 container_name: certd # 容器名 9 restart: unless-stopped # 自动重启 10 volumes: 11 # ↓↓↓↓↓ -------------------------------------------------------- 数据库以及证书存储路径,默认存在宿主机的/data/certd/目录下,【您需要定时备份此目录,以保障数据容灾】 12 # 只要修改冒号前面的,冒号后面的/app/data不要动 13 - /data/certd:/app/data 14 ports: # 端口映射 15 # ↓↓↓↓ ---------------------------------------------------------- 如果端口有冲突,可以修改第一个7001为其他不冲突的端口号,第二个7001不要动 16 - "7001:7001" 17 # ↓↓↓↓ ---------------------------------------------------------- https端口,可以根据实际情况,是否暴露该端口 18 - "7002:7002" 19 #↓↓↓↓ -------------------------------------------------------------- 如果出现getaddrinfo EAI_AGAIN 或 getaddrinfo ENOTFOUND 错误,可以尝试设置dns 20# dns: 21# - 223.5.5.5 # 阿里云公共dns 22# - 223.6.6.6 23# # ↓↓↓↓ --------------------------------------------------------- 如果你服务器在腾讯云,可以用这个替换上面阿里云的公共dns 24# - 119.29.29.29 # 腾讯云公共dns 25# - 182.254.116.116 26# # ↓↓↓↓ --------------------------------------------------------- 如果你服务器部署在国外,可以用这个替换上面阿里云的公共dns 27# - 8.8.8.8 # 谷歌公共dns 28# - 8.8.4.4 29# extra_hosts: 30# # ↓↓↓↓ -------------------------------------------------------- 这里可以配置自定义hosts,外网域名可以指向本地局域网ip地址 31# - "localdomain.com:192.168.1.3" 32# # ↓↓↓↓ ------------------------------------------------ 直接使用主机的网络,如果网络问题实在找不到原因,可以尝试打开此参数 33# network_mode: host 34 labels: 35 com.centurylinklabs.watchtower.enable: "true" 36# ↓↓↓↓ -------------------------------------------------------------- 启用ipv6网络,还需要把下面networks的注释放开 37# networks: 38# - ip6net 39 environment: 40# ↓↓↓↓ ----------------------------------------------------- 使用上海东八时区 41# - TZ=Asia/Shanghai 42# 设置环境变量即可自定义certd配置 43# 配置项见: packages/ui/certd-server/src/config/config.default.ts 44# 配置规则: certd_ + 配置项, 点号用_代替 45# #↓↓↓↓ ----------------------------- 如果忘记管理员密码,可以设置为true,重启之后,管理员密码将改成123456,然后请及时修改回false 46 - certd_system_resetAdminPasswd=false 47 48# 默认使用sqlite文件数据库,如果需要使用其他数据库,请设置以下环境变量 49# 注意: 选定使用一种数据库之后,不支持更换数据库。 50# 数据库迁移方法:1、使用新数据库重新部署一套,然后将旧数据同步过去,注意flyway_history表的数据不要同步 51# #↓↓↓↓ ----------------------------- 使用postgresql数据库,需要提前创建数据库 52# - certd_flyway_scriptDir=./db/migration-pg # 升级脚本目录 53# - certd_typeorm_dataSource_default_type=postgres # 数据库类型 54# - certd_typeorm_dataSource_default_host=localhost # 数据库地址 55# - certd_typeorm_dataSource_default_port=5433 # 数据库端口 56# - certd_typeorm_dataSource_default_username=postgres # 用户名 57# - certd_typeorm_dataSource_default_password=yourpasswd # 密码 58# - certd_typeorm_dataSource_default_database=certd # 数据库名 59 60# #↓↓↓↓ ----------------------------- 使用mysql数据库,需要提前创建数据库 charset=utf8mb4, collation=utf8mb4_bin 61 - certd_flyway_scriptDir=./db/migration-mysql # 升级脚本目录 62 - certd_typeorm_dataSource_default_type=mysql # 数据库类型, 或者 mariadb 63 - certd_typeorm_dataSource_default_host=192.168.1.18 # 数据库地址 64 - certd_typeorm_dataSource_default_port=3306 # 数据库端口 65 - certd_typeorm_dataSource_default_username=certd2 # 用户名 66 - certd_typeorm_dataSource_default_password=dMrwtH4ZAzM # 密码 67 - certd_typeorm_dataSource_default_database=certd # 数据库名 68 69# ↓↓↓↓ --------------------------------------------------------- 自动升级,上面certd的版本号要保持为latest 70# certd-updater: # 添加 Watchtower 服务 71# image: containrrr/watchtower:latest 72# container_name: certd-updater 73# restart: unless-stopped 74# volumes: 75# - /var/run/docker.sock:/var/run/docker.sock 76# # 配置 自动更新 77# environment: 78# - WATCHTOWER_CLEANUP=true # 自动清理旧版本容器 79# - WATCHTOWER_INCLUDE_STOPPED=false # 不更新已停止的容器 80# - WATCHTOWER_LABEL_ENABLE=true # 根据容器标签进行更新 81# - WATCHTOWER_POLL_INTERVAL=600 # 每 10 分钟检查一次更新 82 83 84# ↓↓↓↓ -------------------------------------------------------------- 启用ipv6网络,还需要把上面networks的注释放开 85#networks: 86# ip6net: 87# enable_ipv6: true 88# ipam: 89# config: 90# - subnet: 2001:db8::/64 91

基础配置

默认的用户名是 admin/123456,第一次登录会让你改密码。

邮箱配置

工作流配置

配置好就长这样,会向着 cloudflare 申请证书并将证书放到你宿主机指定的位置。

申请证书配置

放到指定位置

这里小编要放到我的宿主机,然后供 passnat 客户端使用。

到这里证书已经会自动下载到你的宿主机了。然后把你证书映射到 frpc 的路径中。

然后在passnat 服务端配置下证书地址。

然后将这个配置复制到这里,然后重启容器就好了