SakuraFrp 服务简介

SakuraFrp 服务官网地址:https://www.natfrp.com/

一句话简单概括一下 SakuraFrp 服务的目标定位:

Tip

SakuraFrp 是一个基于 frp 的内网穿透服务,它主要解决没有公网 IP 的用户无法从外部网络访问内网服务的问题,让你可以通过互联网远程访问家庭或局域网中的设备和服务。

如果你是个好奇宝宝,想深入了解网穿透概念和frp的工作原理,请参考下面这两篇高质量的文档,我觉得肯定比我描述地清楚:

内网设备和Web服务简介

  • 内网设备:极空间 Z4 Pro NAS 设备(Intel 芯片)
  • 待穿透服务简介Memos 灵感捕捉速记服务(对标flomo笔记的开源版本)

Frp 内网穿透工作示意图

Gemini_Generated_Image_4262r24262r24262

安装配置流程

1. 安装 frpc 客户端应用

在需要穿透内网机器上(支持在Linux/Windows/macOS/Docker容器中)安装frpc客户端应用程序,这里推荐使用Docker方式安装部署,方便快捷,升级更新方便。具体的安装部署方式直接查看文章:frpc 基本使用指南

例如在我的NAS设备上用容器部署完成之后,我们可以通过容器日志查看到 frpc 客户的Web UI访问地址和密码,如下所示:

image

frpc 客户端配置界面如下:
image

2. 子域名绑定和SSL 证书配置

Important

  • 我们费劲巴拉地配置SSL证书和添加HTTPS访问,核心就是为了安全,毕竟你也不想你家的NAS设备成为别人的”肉鸡”
  • 大家可以阅读一下SakuraFrp官方关于安全的最佳实践:https://doc.natfrp.com/bestpractice/security.html

Tip

虽然Sakura官方也提供了HTTP服务直接穿透的方法,那就是使用国外的节点,但是这样一来你在国内访问国外节点的时延就大大增加了,整体Web访问体验就会严重降低。 传统通过国内节点的访问Web服务是需要有域名和ICP备案,但是SakuraFrp还给我们留了一个可行路径,就是下面这段话,仔细读!多读几遍!我看了文档两三遍才体会到这句话的精髓!然后才有了这篇教程。 image

SakuraFrp 还提供了子域名绑定服务,这样用户就可以通过一个专属于你的统一的域名来访问你所有穿透的服务,避免要记住不同隧道绑定到不同节点时生成访问的域名各不相同的问题

详细的配置流程参考: 配置 SSL 证书

Tip

您需要拥有一个属于自己的域名才能申请、部署 SSL 证书。 如果您还没有域名,推荐直接使用 子域绑定 功能

我自己没有在国内备案过的域名,所以直接使用了SakuraFrp提供的子域名绑定功能。

  1. 子域名绑定:通过链接进入子域名绑定流程,然后会自动生成一个SSL证书,等生成完成之后,点击”下载证书”按钮就可以将证书和密钥文件下载到本地

    image

  2. 替换frpc客户端侧的SSL证书:我这里frpc是通过docker容器方式部署在NAS设备上,所以只需要将frpc挂载工作目录下的证书和key文件替换掉即可

image

3. 在NAS设备上部署运行Caddy反向代理服务

  1. 容器镜像下载:下载最新版本的 caddy:2.11.2-alphine​ 即可,如果存在镜像网络下载问题,可以使用加了镜像加速器地址前缀的容器名称docker.1ms.run/caddy:2.11.2-alphine
  2. 创建Caddy服务的docker-compose.yaml文件,内容如下:

    version: '1.0'
    
    services:
      caddy:
        image: docker.1ms.run/caddy:2.11.2-alpine
        container_name: caddy-https-proxy
        restart: unless-stopped
        ports:
          - "8443:8443" # 检查一下是否端口冲突
        volumes:
          # 1. Caddyfile 配置文件
          # 格式:宿主机路径:容器内路径
          # 建议直接使用当前目录下的文件,也可以改为绝对路径如 /home/user/caddy/Caddyfile
          - /tmp/zfsv3/sata11/xxxx/data/docker-share-data/Caddy/Caddyfile:/etc/caddy/Caddyfile
    
          # 2. 数据目录 (存放自动生成的证书等重要数据)
          # 请将 /path/to/your/data 替换为你宿主机上的实际绝对路径
          - caddy_data:/data
    
          # 3. 配置目录 (存放 Caddy 的自动配置)
          # 请将 /path/to/your/config 替换为你宿主机上的实际绝对路径
          - caddy_config:/config
    
    	  # 4. 从 SakuraFrp 子域名配置服务界面中下载下来的SSL证书和密钥配置
          - /tmp/zfsv3/sata11/xxxx/data/docker-share-data/Caddy/natfrp-cert:/etc/caddy/certs
    
        extra_hosts:
          - "host.docker.internal:host-gateway"
    
    volumes:
      caddy_data:
      caddy_config:
    
  3. 配置Caddyfile配置文件

    Caddyfile 中主要配置内容就是子域名对应的本地后端服务端口信息。

Important

  • 域名需要配置为natfrp服务中绑定的子域名
  • 如果需要有多个不同前缀子域名服务需要绑定,可以创建多个block块,将流量转发到后端不同的Web服务 下面就是我NAS配置的Caddyfile内容
  1. 通过NAS设备自带的Docker Compose服务启动上面配置的Caddy反向代理服务即可,等待容器成功运行起来即可。

4. 在 SakuraFrp 网站上创建穿透隧道

Tip

  • 建议买个会员,价格也很实惠,可以优选好一点的VIP节点线路

参考下面的图片配置即可,注意点:

  • 隧道类型选择为TCP 隧道
  • 本地端口选择前面在Caddyfile中配置的8443
  • 自动HTTPS选项==一定要选“禁用”== (因为我们通过Caddy已经配置了HTTPS访问能力)

image

5. 将创建的隧道绑定到自己SakuraFrp分配子域名下

  1. 下拉前缀域名选择自己想要的前缀域名
  2. “绑定隧道”下拉选择刚刚创建的隧道

image

6. 在NAS设备上frpc客户端启用隧道服务

在SakuraFrp服务端创建好的隧道信息会立即同步到frpc客户端侧(如果没有看到,就点击一下左上角的刷新圆圈按钮,刷新一下即可看到)。

然后直接在frpc客户端界面将刚才创建的隧道模块拖到分隔线上方,等待模块变为浅绿色,并且右上角弹出提示消息成功之后,就成功启用了frp穿透隧道。

image

7. 通过 SakuraFrp 服务分配的子域名访问内网Web服务

通过浏览器使用https://<xxx.nyat.app>:<端口号>的方式访问内网中的NAS服务了。

https://<xxx.nyat.app>:<端口号>​ 可以通过natfrp“服务” -> “子域名绑定” 界面中找到对应隧道获取。

image

在浏览器中通过https协议访问,你看到你的链接有个小锁说明就成功啦!

image