群晖可以这么玩 - 我不想记端口
太长不看先总结
使用条件:
家宽有公网IP(IPV6也可)
有个可以修改NS服务器的域名,因为需要将域名托管到Cloudflare。
优劣分析:
实现的方法是Cloudflare设置Origin规则,配合群晖的反向代理功能。
起docker时无须指定端口,再也不用担心启动时端口冲突了
路由器只需映射一个端口,不需要80或443。
防火墙设置只允许Cloudflare源地址,减小暴露面增强安全性。
Cloudflare自动会生成ssl证书,同时解决了https的证书问题。
使用子域名记忆服务,访问默认443端口,不用记忆端口号。
唯一的缺点可能就是对访问速度稍有影响,不在外面看视频的我也没什么影响。当然你也可以优选IP。
原有方式
因为众说周知的原因,当使用公网访问家宽的NAS服务时在没有特殊处理的情况下是需要带上服务的端口号的。并且为了使用上的方便有些服务是要开到公网上的,比如Bitwarden,TTRss。虽然可以通过访问不同的端口去区分这些服务,但是服务开多了难免记不住,始终没有域名记忆来的方便。
常见的处理方式是将内网的NAS服务使用frp服务穿透到拥有公网IP的服务器,然后将域名绑定到对应的公网IP上。既可以解决部分家宽用户没有公网IP的问题,也可以解决需要使用非默认端口访问服务的问题。缺点就是需要一台拥有公网IP的服务器会产生额外的服务器租用费用。因为中间增加了一台服务器,所以上下行的链路也会受服务器链路速度的影响。
为啥还要用新方式呢。因为我的服务器在海外,为了安全还套了Cloudflare,相当于套了两层减速。
申请域名 - 教程太多不详细介绍
首先,当然你需要有一个域名,没有的话就申请一个。唯一需要注意的是要能修改NS服务器地址,这样才能把域名正常托管到Cloudflare。不想麻烦的话建议你可以买一个,本身域名也不是很贵,能用钱解决的问题就不要太浪费自己的实际。网上教程太多这里就不详细介绍了
托管域名 - 已托管的可跳过
有了域名之后注册一个Cloudflare账号,登录后点击添加站点,根据向导提示完成域名的托管。大致操作步骤如下:
登录你的 Cloudflare 账号,点击 "添加站点" 按钮。
然后输入你的域名,点击 "添加站点" 按钮。
选择免费套餐,点击 "继续" 按钮。
Cloudflare 会自动扫描你的 DNS 记录,并自动导入到 Cloudflare 的配置中。扫描完成后点击 "继续" 按钮。
回到你的域名注册商,修改域名的 NS 服务器为 Cloudflare 的 NS 服务器。
回到 Cloudflare ,点击 "检查名称服务器" ,激活你的网站。
创建令牌 - 已生成的可跳过,用于DDNS
接下来需要准备Cloudflare的token用于更新域名的解析,Cloudflare 页面点击右上角 我的个人资料——API 令牌(或直接访问 https://dash.cloudflare.com/profile/api-tokens),开始申请
点击创建令牌
选择API令牌模板中的编辑区域DNS模板
填写令牌名称,选择域名后点击继续
点击创建令牌
保存令牌
动态域名解析
这里需要将你域名解析到家宽的公网地址上,因为家宽的公网地址会动态变化,因此叫做动态域名。推荐使用ddns-go,图形化界面,操作简单方便。
安装就不详细介绍了,可以使用docker安装,也可以使用第三方套件进行安装。安装完成后打开管理页面,选择Cloudflare,填写之前记录的token,勾选启用IPv4,在Domains中填写需要解析的域名,保存即可。如果需要使用IPv6,勾选启用IPv6,同样填写需要解析的域名保存。点击右上角日志可以查看日志。如果是docker方式启动的话,网络需要选择host,否则无法获取到IPv6地址。
设置Origin规则 - 重点,这里去除端口号
完成上述步骤后应该就可以用域名+端口的方式访问你的NAS了,下面重点来了。因为要使用Cloudflare的规则,所以在解析记录里面需要把代理状态打开
编辑添加的解析记录,把代理状态打开,即是 已代理,云朵图标为点亮状态,然后保存
进入所需修改域名【规则】-> 【Origin Rules】,创建规则。规则名称任意,选择自定义筛选表达式。字段选择主机名,运算符等于,值填写你nas的域名。目标端口填写nas的端口号,保存
规则创建完成后点击左侧菜单的SSL/TLS -> 概述,如果你的NAS已经开启了https,那么这里加密模式可以选择完全,如果你的NAS仅开启了http,那么你需要选择灵活。因为我后端是https的,这里设置了完全,http方式我并没有进行测试。如果设置完访问时有问题,可以调整一下SSL/TLS 加密模式。
设置完成后正常情况下你就可以直接通过域名访问你的NAS了,如下图所示。当然,这只是示范,并不是很建议直接将NAS的登录页不加端口号挂出来。这将大大提高受攻击的风险。
Cloudflare会自动申请SSL边缘证书,访问时直接使用https即可。
设置反向代理规则 - 重点,非群晖用户可以跳过
本来文章到这里就结束了,但是下面还有个重点。就是如何利用好群晖的反向代理功能。
正常情况下,你可以在控制面板->登陆门户->高级->反向代理服务器中找到这个功能。其界面如下图所示:
下面我来说说有几个大家可能不知道的设置:
设置反向代理时来源的端口是可以复用的。一般的情况下来源这里我们会设置相同的主机名和不同的端口来区分我们的应用。知道了端口可以复用的情况下我们完全可以通过不同的域名相同的端口来区分应用,也就是说我们完全可以填写两条规则,a.test.com和b.test.com都使用端口5000端口。这样我们所有的应用都可以通过同一个端口出去,也就是说路由器上只需要配置一条端口映射规则即可,这样一是可以减少路由器上的相关配置工作,二是减少了暴露在公网的端口降低安全风险。
目的地的主机名这里我们除了可以填写nas自己的地址外,也可以填写docker容器的地址。对于开放到公网的服务,我们可以使用docker-compose在启动时指定容器的IP地址,而不映射任何端口。这样的好处是不需要占用群晖的端口号,我们完全不需要担心启动时的端口占用问题。当我们需要使用该服务时可以在反向代理的目的地主机名处填写docker容器的地址,端口处直接填写应用在docker容器内的端口。
为了提高安全性,可以在设置反向代理时设置访问控制配置文件。在使用Cloudflare托管域名后可以设置域名只允许Cloudflare的服务器ip访问,这也将提高系统的安全性。相关的服务器ip列表在这里。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
Woodrow
校验提示文案
五独散人
校验提示文案
bearcloney
我的域名是直接托管在cf上的,
ip指向我的nas(unraid)可以通过域名正常访问nas
但nas 域名 加端口号(docker服务)就无法访问,该如何解决
现在用的是大吉lucky 之前用ddns go也是这个问题
校验提示文案
值友7181542381
校验提示文案
爱上虾的鱼
校验提示文案
值友7068453795
校验提示文案
Mkiing
校验提示文案
阳光爸
校验提示文案
隈研吾
校验提示文案
不合格的买家
校验提示文案
嘉语
校验提示文案
可爱的排骨
校验提示文案
fun特稀
校验提示文案
oklilei
校验提示文案
值友6403050529
校验提示文案
yzcx
校验提示文案
Hoooo
校验提示文案
dkess
Error
校验提示文案
设为主页
校验提示文案
一天六顿饭
校验提示文案
YuFa
校验提示文案
爱上虾的鱼
校验提示文案
值友7181542381
校验提示文案
bearcloney
我的域名是直接托管在cf上的,
ip指向我的nas(unraid)可以通过域名正常访问nas
但nas 域名 加端口号(docker服务)就无法访问,该如何解决
现在用的是大吉lucky 之前用ddns go也是这个问题
校验提示文案
一天六顿饭
校验提示文案
设为主页
校验提示文案
dkess
Error
校验提示文案
Hoooo
校验提示文案
yzcx
校验提示文案
不合格的买家
校验提示文案
值友6403050529
校验提示文案
oklilei
校验提示文案
fun特稀
校验提示文案
隈研吾
校验提示文案
阳光爸
校验提示文案
Mkiing
校验提示文案
值友7068453795
校验提示文案
可爱的排骨
校验提示文案
五独散人
校验提示文案
Woodrow
校验提示文案