云服务器+FRP+Nginx,无需添加端口,直接使用域名访问家里的任何设备

2032 字
10 分钟
云服务器+FRP+Nginx,无需添加端口,直接使用域名访问家里的任何设备

之前写过ipv6+ddns访问nas服务的文章,这种方法有许多不足 一是必须在支持ipv6的环境下访问,许多公共场所的wifi一般就不支持ipv6,无法访问网站,像腾讯轻量云服务器也不支持访问纯ipv6服务,好像要云服务器才支持。这样轻量云上搭建的alist就无法访问nas中的nextcloud服务。 二是家庭宽带都封禁了80 443等端口,虽然使用域名加ddns可以正常访问,但无法省略掉端口,这样看起来网站就不是特别正式。接下来介绍一种方法,可以实现无端口访问nas中的服务,在ipv4环境下也可以访问nas。通过云服务器实现流量中转,使用nginx进行反向代理,实现无端口访问内网服务,而且还可以申请SSL证书,支持https。

FRP安装#

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

frp 主要由 客户端(frpc)服务端(frps) 组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上,内网服务由于没有公网 IP,不能被非局域网内的其他用户访问。用户通过访问服务端的 frps,由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。

architecture.png
architecture.png

服务端#

下载

网址:GitHub - fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.

在 Github 的 Release 页面中下载到最新版本的客户端和服务端二进制文件,所有文件被打包在一个压缩包中。其中的 frpc 拷贝到内网服务所在的机器上,将 frps 拷贝到具有公网 IP 的机器上,放置在任意目录。

部署

将运行文件拷贝到云服务中,编写配置文件frps.ini

Terminal window
[common]
#frp 监听端口,与客户端绑定端口
bind_port= 4000
kcp_bind_port = 4000
#dashboard用户名
dashboard_user= user
#dashboard密码
dashboard_pwd= passwd
#dashboard端口,启动成功后可通过浏览器访问如http://ip:1234
dashboard_port= 1234
#设置客户端token,对应客户端有页需要配置一定要记住,如果客户端不填写你连不上服务端
token = 123456789

先通过 ./frps -c ./frps.ini 启动服务端,如果需要在后台长期运行,建议结合其他工具使用,例如 systemdsupervisor

宝塔面板商店中可以安装进程守护管理器,如果将运行文件frps放在/opt/frp文件夹中,则启动命令改写为/opt/frp/frps -c /opt/frp/frps.ini,进程目录为/opt/frp

完成设置后,进程会自动启动在后台运行,每次服务器重启都会自动运行,这样就完成了服务端的设置。

image-20230806154055360
image-20230806154055360

客户端#

群晖安装

群晖下安装FRP比较简单,可以使用矿神源,第三方套件安装。

image-20230806170548201
image-20230806170548201

1.打开群辉套件中心

2.在设置中新增套件来源

3.添加矿神群晖SPK套件源输入如图链接

image-20230806165826522
image-20230806165826522

在套件中心的社群套件中搜索frpc,点击安装即可一键安装。打开frpc,在窗口中可对frpc.ini配置文件进行设置。设置的ip地址和端口要与frps配置设文件中一致。

在具体的内网穿透服务配置中,local_ip为要暴露到外网的本地服务部署的IP地址,local_port为本地服务监听的端口,remote_port为暴露到云服务器的端口。

image-20230806170843759
image-20230806170843759

点击保存,即完成了frpc的部署。

frp除了用直接二进制文件进行部署,还可以采用docker的方式来安装frp的服务端和客户端,用@snowdreamtech 的docker镜像,这样后台运行,重启和配置会稍微简单一些。docker-compose.yml文件如下,将frpc.ini配置文件映射到了本地的/opt/frp/docker/frpc.ini文件。

version: '3'
services:
frpc:
image: snowdreamtech/frpc
network_mode: host
volumes:
- /opt/frp/docker/frpc.ini:/etc/frp/frpc.ini
container_name: frpc
restart: always

还是和往常一样,使用docker-compose进行部署。

Terminal window
docker-compose up -d

如果需要增加穿透服务,对frpc.ini配置文件进行修改,然后重启容器即可。

通过查看容器日志,可以了解穿透是否成功。

image-20230806172501701
image-20230806172501701

如frpc.ini配置文件所示,本地端口的5000服务被暴露到了云服务公网IP的5000端口,通过云服务器ip地址+5000端口,即可实现对本地服务的访问,但是这样通过ip地址加端口的访问让人感觉不是特别正式,可以进一步通过反向代理,消除掉端口。

反向代理#

接下来进行反向代理,将指定的域名反代到内网服务暴露到公网的端口,这样就可以实现域名直接访问内网服务。

在进行反向代理前,要保证域名指向了部署frps的主机。首先需要申请一个域名,并将子域名指定到frps部署的云服务器ip地址。

image-20230806172907766
image-20230806172907766

反向代理有几种方法,一种是使用宝塔安装好的nginx环境进行反代。另一种是通过docker安装的nginxproxymanager进行反代。两者的操作都非常简单,而且都可以申请ssl证书。

在之前介绍了利用NPM进行反代,这里就介绍使用宝塔面板进行反向代理。

image-20230806173147761
image-20230806173147761

完成网站创建后,点击网站即可对站点信息进行配置,在左边菜单中选择反向代理,点击添加反向代理,在界面中,目标URL填写代理到的地址,在本文中,则为将本地服务暴露到制定公网端口地址,即在http://blog.leihub.cn + fprc中设置的remote_port,点击提交即完成了域名反代到本地服务的设置。

image-20230806173412923
image-20230806173412923

SSL证书申请#

上一次介绍了如何使用NPM进行证书申请,宝塔面板也可以进行证书申请。

反向代理的域名只支持使用DNS验证进行SSL证书申请,我的域名在腾讯云上进行解析,选择DnsPod设置,在弹窗中填入腾讯云DnsPod的ID以及Token,选择需要申请证书的域名,点击申请即可。

image-20230806175009099
image-20230806175009099

完成设置后,申请的证书会自动进行部署,推荐打开强制HTTPS,这样更安全可靠。

image-20230806175314670
image-20230806175314670

小结#

具体的原理就是,假设本地服务部署在4025端口,通过FRP将本地内网指定端口4025的服务暴露到云服务的指定端口5025上,通过云服务ip地址+端口5025即可实现对本地部署在4025服务的访问。

进一步,在云服务中通过反向代理,将域名sample.leiting2020.top反代到云服务的指定端口,将域名的流量都转发的云服务的端口5025,而本地端口4025的服务又通过FRP暴露在云服务器的端口5025上,这样通过域名就可以实现对本地4025端口服务的访问。

通过上述方法,就可以在无ipv6环境下,实现无端口访问nas的服务。但这种方法也收到云服务器性能的影响,比如服务器的带宽,流量总数,我的云服务器带宽8M,实在是小水管,卡起来真烦人。一个月1200g,做网站还够用,如果做下载的中转,可能流量就不够用了。

如果说上传一些文件到nas中,或者做下载服务,最好还是使用ipv6+ddns,网速不会受到服务器带宽的影响。

参考#

FRP:GitHub - fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.

群晖矿神源:https://spk7.imnks.com/

FRP的docker镜像:https://hub.docker.com/r/snowdreamtech/frpc

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
云服务器+FRP+Nginx,无需添加端口,直接使用域名访问家里的任何设备
https://blog.leihub.cn/archives/623/
作者
阿雷
发布于
2023-08-06
许可协议
CC BY-NC-SA 4.0
相关文章智能推荐
1
nginx将域名反代到端口后css、js、图片等样式不加载的问题
博客搭建 & 运维2024.06.13 更新WordPress反代后CSS、JS和PNG报mixed content错误 当遇到WordPress反代后CSS、JS和PNG等资源无法加载,报mixed content错误时,这通常意味着网站中同时存在HTTP
2
2025最新版:基于腾讯云EdgeOne 的 IPv6 内网穿透指南(无公网 IPv4 也能实现博客 + 图床公网访问)
内网穿透 & 组网2025最新版:基于腾讯云EdgeOne 的 IPv6 内网穿透指南(无公网 IPv4 也能实现博客 + 图床公网访问) 作为一个喜欢折腾的宅,在本地搭建了 WordPress 博客和 Chevereto 图床等服务,想在外随时访问需要进行
3
内网访问:使用Zerotier进行打洞
内网穿透 & 组网家里没有公网ipv4,只有ipv6,而许多公共场所的网络都是没有开启ipv6,无法直接访问内网服务。 之前一直使用FRP做内网穿透,将内网服务暴露到外网上,但是简单的tcp转发访问速度依靠公网服务器的带宽,我的腾讯云是8M的小水管,有点不太
4
群晖FRP内网穿透教程:公网随时访问你的NAS
内网穿透 & 组网2025.11.12 更新 增加docker compose安装 前言:为什么需要FRP穿透? 很多朋友入手NAS后都会遇到一个问题:家里没有公网IPv4,NAS只能在WiFi下访问,出门想传个文件、看个相册都没辙。 FRP(Fast Re
5
群晖照片异地备份到 Unraid + Immich 相册搭建详细教程:rsync 同步与踩坑全记录
NAS & 云服务搭建我家里同时有白群晖和 unRAID 两台 NAS ,准备把群晖里攒了几年的照片进行异地备份,单盘 NAS 一旦坏了,照片可就全没了。 我自己折腾了两天,踩了一堆坑,终于跑通了一套「unRAID 定时拉取群晖 + Immich 相册」的方案。
随机文章随机推荐

评论区

Profile Image of the Author
阿雷
一个小趴菜
公告
本站已从 WordPress 迁移到 Astro,访问更快、更清爽。文章链接保持原样(/archives/文章ID/),评论数据正在陆续恢复中。
分类
标签
最新动态
站点统计
文章
76
分类
15
标签
99
总字数
318,421
运行时长
0
最后活动
0 天前
站点信息
构建平台
EdgeOne Pages
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录