前言
前几天看到Vedio Talk
更新了一篇文章和 Vlog ,标题为利用群晖反向代理服务器实现外网访问内网无需端口号
,这可是所有国内群晖用户最基础最刚性的需求.出于好奇看了下文章和 Vlog ,原来教程是基于用户家庭宽带拥有443端口的前提,而国内几乎95%以上的家庭宽带都被封了80/443
端口,所以此方法对于大部分用户来说没并没有参考价值.
不过文章和 Vlog 中提到的群晖反向代理
确实是解决此需求的重要服务,本站也有多篇文章提到反向代理的使用.基于国内大部分80/443
端口被封的用户,想实现无端口访问,即使宽带拥有公网IP,也必须结合内网穿透服务
来使用.这是一种妥协的解决方案,牺牲访问速度来提升域名无端口访问的体验.
授人以渔
本文大量 干货 + 原理 + 图文教程 ,希望以讲解原理来使新手用户能够自己学会配置.如果能完全理解本文,那么群晖所有的外网访问配置都能够轻松解决.
原理解释
端口
几乎任何设备的通讯都是基于IP+端口
的方式才能交互.IP通过域名解析替代了,方便记忆和输入.而端口是通过http/https协议标准
来省略输入.
当你访问http://www.ioiox.com
时,实际上是访问http://服务器IP:80
当你访问https://www.ioiox.com
时,实际上时访问https://服务器IP:443
所谓的无端口访问
其实是各浏览器遵循http/https协议标准
帮你省去输入80/443
端口的步骤,这也是为什么运营商不允许家庭宽带架设个人网站从而封闭 80/443 端口
的原因.当然你可以使用其他端口来架设网站,但是浏览器却无法帮你省去端口号,必须使用例如http://www.ioiox.com:1234
的方式来访问.
http 80 和 https 443
http
协议标准端口为80
,https
协议标准端口为443
.一个网站或者 web 服务是同时支持
http 和 https 两种协议,目前已经慢慢普及 https 的加密协议,本文不再详细介绍,请自行搜索研究.
反向代理
一台设备或者服务器拥有65535个
端口号,而80/443
端口只有一个,当你设备中部署了一个网站使用了80/443
端口后,那么其他服务和网站是无法在使用80/443
端口的.这时就需要反向代理服务器
来解决.
群晖反向代理服务器 首先占用群晖NAS的80/443
端口,使用任何域名无端口访问(上面提到过无端口即是用 80/443 端口),都会访问到反向代理服务器,由它根据来访域名再次转发给本机或者内网其他的服务.
内网穿透
前言已经明确家庭宽带是没有80/443
端口的,那么上文提到反向代理服务器是使用80/443
端口,外网是无法访问到的,那么就需要配合内网穿透服务来使外网能够访问到群晖的反向代理服务器的80/443
端口.
内网穿透需要一台拥有公网IP
和80/443
端口的服务器,一般云服务商提供的VPS服务都可以满足需求,并部署 frps 服务器端.下文简称为frp服务器
.所以当你想访问内网的网站,实际上是先访问到frp服务器的80/443端口
,在由frp 服务器
转发到内网的群晖反向代理服务器
的80/443
端口,在由群晖反向代理服务器
转发给5000/5001/3001/80
等端口.
小结
由此可见,其实内网穿透frp 服务器
本身也是一个反向代理服务器,高级用户完全可以无需使用群晖的反向代理服务器,直接在frpc.ini
中配置各个域名和内网端口即可实现.
但是我发现很多新手用户对frpc
的使用并不熟悉,而且部分服务例如本文提到的人人影视
以及本站推荐的Bitwarden
密码管理服务都没有原生提供https
支持,虽然frpc
是可以配置证书的,但对于新手来说更加复杂,所以才有了本文这种以群晖反向代理为核心的方案:
- 内网穿透
frp服务器
提供80/443
端口穿透. - 群晖反向代理服务器提供
https
及SSL 证书
支持,并提供反向代理到内网各设备和服务.
配置教程
前期准备
frp服务器
准备frp 服务器信息
,本站已提供免费服务.详情参考:FRP内网穿透专栏.
获取服务器地址
,端口
,Token
.
- 服务器地址:free.frp.ioiox.com
- 端口:7007
- Token:www.ioiox.com
配置域名
配置例如*.ioiox.com
的泛域名,CNAME
指向frp 服务器地址
.其含义是指访问任何二级域名都是访问到frp 服务器
,由frp 服务器
转发到内网群晖反向代理服务器.
配置内网穿透
内网穿透客户端frpc
的安装参考FRP内网穿透专栏一文中的客户端 frpc 安装教程汇总,推荐使用docker
方式安装.
配置frpc.ini
如下:
[common]
server_addr = free.frp.ioiox.com
server_port = 7007
token = www.ioiox.com
[http_xxxxxxx]
type = http
local_ip = 192.168.1.4
local_port = 80
custom_domains = *.ioiox.com
[https_xxxxxxx]
type = https
local_ip = 192.168.1.4
local_port = 443
custom_domains = *.ioiox.com
第一段表示frp 服务器信息
,填写本站免费 frp 服务器信息.
第二段表示使用http
的80
端口访问任意*.ioiox.com
的二级域名,都转发给内网群晖的反向代理服务器的80
端口,此处192.168.1.4
为群晖内网IP.
第三段表示使用https
的443
端口访问任意*.ioiox.com
的二级域名,都转发给内网群晖的反向代理服务器的443
端口,此处192.168.1.4
为群晖内网IP.
配置群晖反向代理
控制面板 - 应用程序门户 - 反向代理服务器
新增 nas.ioiox.com
参考下图分别配置http
和https的
反向代理,表示当群晖反向代理服务器收到http://nas.ioiox.com
的请求时,转发到群晖 DSM 的http
内网地址192.168.1.4:5000
.
收到https://nas.ioiox.com
的请求时,转发到群晖 DSM 的https
内网地址192.168.1.4:5001
新增 rrshare.ioiox.com
参考下图分别配置http
和https的
反向代理,表示当群晖反向代理服务器收到http://rrshare.ioiox.com
的请求时,转发到人人影视的http
内网地址192.168.1.4:3001
.
收到https://rrshare.ioiox.com
的请求时,由于人人影视的 docker 没有提供https
端口,同样可以使用反向代理转发到人人影视的http
端口192.168.1.4:3001
新增 openwrt.ioiox.com
参考下图分别配置http
和https的
反向代理,表示当群晖反向代理服务器收到http://openwrt.ioiox.com
的请求时,转发到路由器的http
内网地址192.168.1.1:80
.
收到https://openwrt.ioiox.com
的请求时,同样可以使用反向代理转发到路由器的http
端口192.168.1.1:80
完成配置
你可以根据需求自行在此配置更多反向代理设置,可以代理内网的任何设备,例如群晖NAS,路由器,虚拟机,树莓派等等.同时反向代理服务器还可以为不提供 https 支持的服务提供https
及SSL 证书
.
配置证书
配置完成后在 安全性 - 证书 中把新增的反向代理配置相应的证书.
结语
本站关于内网穿透
和反向代理
相关教程已经覆盖的比较全面,更多相关信息请参考:
82 条评论
博主大佬好!从你的博客学习到了很多东西,感谢!在配置群晖frp内网穿透时遇到了一些问题,希望能不吝赐教!
1、家庭网络环境:移动宽带,无公网ip。光猫——TP路由器(IP192.168.0.1)桥接光猫,DHCP——NAS(IP192.168.0.8,网关192.168.0.1),NAS内虚拟机OPENWRT旁路由(IP192.168.0.9)。内网机器均可科学上网。
2、新加坡阿里云VPS,已配置frps;域名nas.mydomain.com,HTTPS穿透NAS DSM端口5001;域名photo.mydomain.com,HTTPS穿透NAS PHOTOSTATION。NAS门户设置主机.mydomain.com,端口443;PHOTOSTATION设置主机photo.mydomain.com,端口443,可实现外网分享文件、共享相册等功能。
3、系统默认SSL证书:阿里云申请的nas、photo单域名各一张;https://nas.mydomain.com使用正常;但应该是群晖系统的设置,无法配置photo域名证书,https://photo.mydomain.com提示不安全。
4、从Lets Encrypt申请了mydomain.com泛域名证书一张,但因为OCSP的问题,外网访问缓慢无比。群晖的Nginx配置重启后会失效,我这里找不到在群晖服务器端OCSP验证的办法。
尝试过以下方法:
1、群晖Nginx配置服务器端OCSP。如能实现,就可以使用Lets Encrypt的泛域名证书。你博客关于OCSP的文章我已拜读,但群晖的Nginx配置重启会失效。是否有相应的办法,或者有其他变通方法实现OCSP验证?
2、群晖反代。因为群晖的PHOTOSTATION默认也是使用的80,443端口,穿透到Nginx443端口后反代会出现死循环的问题。提示Request Header Or Cookie Too Large。或者是我的设置不对?
谢谢博主!
1,群辉反向代理的域名conf文件在
/etc/nginx/sites-enabled 的 server.ReverseProxy.conf 中,里面也有证书路径,按照OCSP教程尝试添加下试试.
2,有PhotoStation没办法,你可以在反向代理里使用其他端口,比如4443,在内网穿透4443出去也是可以的.
谢谢大佬指教!
1、是指在server.ReverseProxy.conf内配置 ssl_stapling on;ssl_stapling_verify on等命令吗?
2、这个我没懂:是指将PHOTOSTATION的外网端口设置成4443?这个我试过,这样设置之后域名证书好像只对photo.mydomain.com:4443起作用,但我用HTTPS穿透NAS PHOTOSTATION之后,外网必须得用photo.mydomain.com/photo才能访问共享相册。
1,是的你尝试下.我没测试过,但试着设置一下,在执行 nginx -t 测试下配置文件没问题在 nginx -s reload 重新加载就可以了.
2,参考下图把443改为4443,是将反向代理的端口改为4443.设置好了后在证书里启用新添加的反向代理就可以了 ,最后frpc里也把这个站点的端口从443改为4443
https://static.ioiox.com/usr/uploads/2020/02/2220020157.jpg
谢谢大佬,按第二种方法配置成功了!
看来我是还没真正搞懂反向带来到底是啥意思-_-!
我在群晖里没有发现 server.ReverseProxy.conf文件
https://pic.ioiox.com/images/2021/04/20/74359c6069a4442c9655d7398eceeb57.png
大佬你的证书是泛域名证书吗,是在哪里申请的
Let's Encrypt
你搜索下博客,很多证书申请教程.
老哥,请教2个问题。
一个是,这样的配置组合,流量应该都要通过 frp Server 吧?
另外,我理解 DDNS 应该只是做 动态变化的家庭IP 的翻译工作,实际流量应该还是直连 NAS 的吧?
所以如果上面两点我理解无误的话,frp+反向代理 这种组合,在获取了不加端口号的便利的同时,对速度影响应该不是一星半点儿吧,尤其是老哥还提供了 free.frp server 服务,如果用的人多,那 frp server 是个挺大的瓶颈。
所以如果在外想下载家里NAS里面的文件,走端口直连,而其他的一些小数据流量的服务走这种路径,这样应该综合体验较优OωO
理解的没错,无论是否有公网IP,只要走frp,流量都会经过服务器。
所以 frp 适合简单web穿透来管理下NAS,无需端口方便直接手动输入域名。需要文件传输还是用 DDNS+端口 最快。
也准备开个博,好好记录分析一下了,这些折腾的东西,网上解析清楚的内容还是少,老哥这儿质量很不错
多谢多谢 ,最近入手了 HPE Microserver gen10 plus 还有 腾讯云服务器,加上之前的 QNAP 453Bmini,又可以好好折腾好一阵了
gen10plus可玩性很高,可以装个esxi来折腾
是的,入手之前已经看了不少东西,整体架构准备基于 ProXmoX VE hypervisor 了,这个昨儿已经装好了,再就是后面把几个虚拟机和各种服务逐步搭起来了
我有动态公网地址和阿里云的域名 我在阿里云的域名泛域名指向了frp服务器,然后frpc.ini文件配置中[common]
server_addr = free.frp.ioiox.com
server_port = 7007
token = www.ioiox.com
[https_xxxxxxx]
type = https
local_ip = 192.168.12.252 这是我的群晖ip
local_port = 443
custom_domains = *.ipopc.cn 这里填写我阿里云的泛域名
然后我在
群晖的反向代理服务器中填写
协议https
端口 443
主机名 nas.ipopc.cn
目的地址指向192.168.12.252的5001端口
最后使用https://nas.ipopc.cn访问时给我反馈The page you requested was not found.
我哪里有配置错了吗 谢谢
机型是arm架构还是x86,我提供的是x86的,arm的要自己下客户端
我的是X86架构的 frpc也是本站连一个博客说的那个 ,我想确认下 frpc.ini的域名和群晖反向代理的域名都是写我公网上的域名吧
frpc启动不了 启动就自动停止了 不知道什么原因
login to server failed: dial tcp 127.0.0.1:7000: connect: connection refused[0m
提示登录服务器错误 用的是博客提供的frp服务器