!!! info 🛰️ 穷人的公网探索计划:没有服务器,我用 NAS 也能遨游互联网!
在预算有限的情况下,如何不购买云服务器,也能将本地 NAS 打造成“对外服务”的强大平台?本文记录了我用 本地设备 + 内网穿透 + 开源面板 实现公网可访问服务的完整方案。 !!!
✅ 方案一览
-
零刻小电脑 小巧静音、性能足够、功耗低,是我用来充当“伪服务器”的利器。
-
部署飞牛云 NAS 系统 飞牛云基于国产 openNAS 系统,界面友好、功能丰富,适合折腾。
-
安装 1Panel 面板 用于部署和管理服务(如网站、数据库等),一个面板搞定一切。
-
网络环境设置
使用 PassNat 内网穿透 无需公网服务器,通过选择稳定、价格合适的 PassNat 节点实现对外服务。(如果你家里网络有公网ip 就可以忽略这一步了)
-
使用 Certd 管理 HTTPS 证书 一键申请 Let's Encrypt 证书,支持自动续期,让公网访问更安全、更专业。
-
cloudflare域名解析

部署过程
mini电脑、pve、飞牛nas这些硬件环境直接就跳过了
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 或者不想配置数据库,可以到官网找默认的配置。

version: '3.3' # 兼容旧版docker-compose
services:
certd:
# 镜像 # ↓↓↓↓↓ ---- 镜像版本号,建议改成固定版本号,例如:certd:1.29.0
image: registry.cn-shenzhen.aliyuncs.com/handsfree/certd:latest
# image: ghcr.io/certd/certd:latest # --------- 如果 报镜像not found,可以尝试其他镜像源
# image: greper/certd:latest
container_name: certd # 容器名
restart: unless-stopped # 自动重启
volumes:
# ↓↓↓↓↓ -------------------------------------------------------- 数据库以及证书存储路径,默认存在宿主机的/data/certd/目录下,【您需要定时备份此目录,以保障数据容灾】
# 只要修改冒号前面的,冒号后面的/app/data不要动
- /data/certd:/app/data
ports: # 端口映射
# ↓↓↓↓ ---------------------------------------------------------- 如果端口有冲突,可以修改第一个7001为其他不冲突的端口号,第二个7001不要动
- "7001:7001"
# ↓↓↓↓ ---------------------------------------------------------- https端口,可以根据实际情况,是否暴露该端口
- "7002:7002"
#↓↓↓↓ -------------------------------------------------------------- 如果出现getaddrinfo EAI_AGAIN 或 getaddrinfo ENOTFOUND 错误,可以尝试设置dns
# dns:
# - 223.5.5.5 # 阿里云公共dns
# - 223.6.6.6
# # ↓↓↓↓ --------------------------------------------------------- 如果你服务器在腾讯云,可以用这个替换上面阿里云的公共dns
# - 119.29.29.29 # 腾讯云公共dns
# - 182.254.116.116
# # ↓↓↓↓ --------------------------------------------------------- 如果你服务器部署在国外,可以用这个替换上面阿里云的公共dns
# - 8.8.8.8 # 谷歌公共dns
# - 8.8.4.4
# extra_hosts:
# # ↓↓↓↓ -------------------------------------------------------- 这里可以配置自定义hosts,外网域名可以指向本地局域网ip地址
# - "localdomain.com:192.168.1.3"
# # ↓↓↓↓ ------------------------------------------------ 直接使用主机的网络,如果网络问题实在找不到原因,可以尝试打开此参数
# network_mode: host
labels:
com.centurylinklabs.watchtower.enable: "true"
# ↓↓↓↓ -------------------------------------------------------------- 启用ipv6网络,还需要把下面networks的注释放开
# networks:
# - ip6net
environment:
# ↓↓↓↓ ----------------------------------------------------- 使用上海东八时区
# - TZ=Asia/Shanghai
# 设置环境变量即可自定义certd配置
# 配置项见: packages/ui/certd-server/src/config/config.default.ts
# 配置规则: certd_ + 配置项, 点号用_代替
# #↓↓↓↓ ----------------------------- 如果忘记管理员密码,可以设置为true,重启之后,管理员密码将改成123456,然后请及时修改回false
- certd_system_resetAdminPasswd=false
# 默认使用sqlite文件数据库,如果需要使用其他数据库,请设置以下环境变量
# 注意: 选定使用一种数据库之后,不支持更换数据库。
# 数据库迁移方法:1、使用新数据库重新部署一套,然后将旧数据同步过去,注意flyway_history表的数据不要同步
# #↓↓↓↓ ----------------------------- 使用postgresql数据库,需要提前创建数据库
# - certd_flyway_scriptDir=./db/migration-pg # 升级脚本目录
# - certd_typeorm_dataSource_default_type=postgres # 数据库类型
# - certd_typeorm_dataSource_default_host=localhost # 数据库地址
# - certd_typeorm_dataSource_default_port=5433 # 数据库端口
# - certd_typeorm_dataSource_default_username=postgres # 用户名
# - certd_typeorm_dataSource_default_password=yourpasswd # 密码
# - certd_typeorm_dataSource_default_database=certd # 数据库名
# #↓↓↓↓ ----------------------------- 使用mysql数据库,需要提前创建数据库 charset=utf8mb4, collation=utf8mb4_bin
- certd_flyway_scriptDir=./db/migration-mysql # 升级脚本目录
- certd_typeorm_dataSource_default_type=mysql # 数据库类型, 或者 mariadb
- certd_typeorm_dataSource_default_host=192.168.1.18 # 数据库地址
- certd_typeorm_dataSource_default_port=3306 # 数据库端口
- certd_typeorm_dataSource_default_username=certd2 # 用户名
- certd_typeorm_dataSource_default_password=dMrwtH4ZAzM # 密码
- certd_typeorm_dataSource_default_database=certd # 数据库名
# ↓↓↓↓ --------------------------------------------------------- 自动升级,上面certd的版本号要保持为latest
# certd-updater: # 添加 Watchtower 服务
# image: containrrr/watchtower:latest
# container_name: certd-updater
# restart: unless-stopped
# volumes:
# - /var/run/docker.sock:/var/run/docker.sock
# # 配置 自动更新
# environment:
# - WATCHTOWER_CLEANUP=true # 自动清理旧版本容器
# - WATCHTOWER_INCLUDE_STOPPED=false # 不更新已停止的容器
# - WATCHTOWER_LABEL_ENABLE=true # 根据容器标签进行更新
# - WATCHTOWER_POLL_INTERVAL=600 # 每 10 分钟检查一次更新
# ↓↓↓↓ -------------------------------------------------------------- 启用ipv6网络,还需要把上面networks的注释放开
#networks:
# ip6net:
# enable_ipv6: true
# ipam:
# config:
# - subnet: 2001:db8::/64
基础配置
默认的用户名是 admin/123456,第一次登录会让你改密码。
邮箱配置


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

申请证书配置

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


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

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

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