前提
- 宽带具有公网 IP
- 路由具有 DDNS 功能,比如软路由中就有 DDNS 服务
- 确保家中的网络只有一层 NAT,效果就是家中联网设备都在一个网段。要想实现这样的效果,光猫改成桥接模式(不拨号),主路由拨号并开启 DHCP,其他路由设备改成桥接。
步骤
购买域名
购买一个域名:
- namesilo
- namecheap
CloudFlare 管理域名的 DNS
在 CF 网站配置域名解析:
- 点击添加站点,输入购买的域名,比如
michael.com
- 选择免费的计划
- 添加记录:
- 类型选择:A
- 名称输入:www
- IPV4 地址:
1.1.1.1
类型的区别:
- A记录: 将域名指向一个IPv4地址(例如:100.100.100.100),需要增加A记录
- CNAME记录: 如果将域名指向一个域名,实现与被指向域名相同的访问效果,需要增加CNAME记录。这个域名一般是主机服务商提供的一个域名
- MX记录: 建立电子邮箱服务,将指向邮件服务器地址,需要设置MX记录。建立邮箱时,一般会根据邮箱服务商提供的MX记录填写此记录
- NS记录: 域名解析服务器记录,如果要将子域名指定某个域名服务器来解析,需要设置NS记录
- TXT记录: 可任意填写,可为空。一般做一些验证记录时会使用此项,如:做SPF(反垃圾邮件)记录
- AAAA记录: 将主机名(或域名)指向一个IPv6地址(例如:ff03:0:0:0:0:0:0:c1),需要添加AAAA记录
- SRV记录: 添加服务记录服务器服务记录时会添加此项,SRV记录了哪台计算机提供了哪个服务。格式为:服务的名字.协议的类型(例如:_example-server._tcp)。
- SOA记录: SOA叫做起始授权机构记录,NS用于标识多台域名解析服务器,SOA记录用于在众多NS记录中那一台是主服务器
保存以后点击继续,会看到如下截图:
更改名称服务器
这一步的过程主要就是将域名购买商那里的 nameservers 地址修改为 CF 提供的地址。
回到域名网站 namecheap,删除指定的名称服务器,添加 CloudFlare 名称服务器,保存更改。
如果是 namesilo 购买的域名,需要如下图方式进行修改 nameservers:
检查通过后,CF 网站上添加的那条记录的云朵点灭,保存:
获取 CF 密钥
点击 api token 获取Global API Key,注意别谢露,复制保存好。
设置 DDNS
动态DNS 允许为拥有动态 IP 的主机配置一个固定的可访问域名。
进入软路由中:服务》动态 DNS》》基本设置:
我的软路由在家庭网络里是旁路由,这里还做了一个高级设置:
启动:
这时候回到 CF 网站查看之前添加的记录,可以发现能够获取到公网 IP 了:
设置端口转发
网络》防火墙》端口转发
接下来就可以在外网使用 www.michael.com:8888
访问家里的 xxx.xxx.xxx.xxx:5000
端口了。
以上是互联网上大部分教程提供的设置指导,但是我使用以后,在家连上 WiFi 是可以的,但是关闭 WiFi 以后,域名访问的方式就是失效的。
这是为啥呢?
经过思考可以知道,网络调用是一个链路,我手机 WiFi 中的网关是设置的旁路由的 IP,经过域名进来主路由之后,会去经过旁路由,然后旁路由上配置了上面的端口转发,那么,就最终找到目标设备了。
而当关闭 WiFi 模拟在外场景时,经过域名进来主路由之后,由于我的旁路由模式是非侵入式的,在主路由的 DHCP 那边没有将网关指向旁路由,因此,通过域名:端口号的方式,这时候主路由并不知道去局域网内部的哪个 IP 找对应的什么端口。
分析到这里解决这个问题就迎刃而解了。在我主路由端设置一下端口转发即可实现目标,最终验证 OK!也就是说,我这种非侵入式的旁路由方式,在旁路由的 OpenWrt 系统里,就没必要设置端口转发了!
注意:前往记得设置好端口转发以后,点击下面的保存并生效。小米路由器的这里,你添加好规则以后,如果不点击保存并生效的话,你下次打开依然是有你之前填写的数据的,尽管未生效。
后来为了在 NAS 里面下载docker镜像,我将 NAS 中的网关地址改为软路由IP以后,发现外网是无法通过公网IP+端口号或者域名+端口号的方式来访问家里 NAS 里的服务的。这是因为网关指向软路由以后,好像会被软路由的防火墙规则拦截。具体没深入研究,多亏了v2ex的帖子里的回复想起来做了这个改动。
nas 设置反向代理
为了尽量避免对外的开放端口被特定扫描,并没有直接将部署的服务的端口映射为对外的端口,而是做了改变,借助了 nas 里的登录门户>高级>反向代理服务器,设置了域名和内网 IP 的映射:
URL 转发
如果想给常用的设备定义一个简单易记的域名,可以使用 CF 提供的 URL 转发功能。
创建页面规则:
DNS 解析新增一条记录:
URL 转发并不是立刻生效,需要等一段时间再尝试。
VPN Server
因为一些众所周知的原因,群辉套件中心里是搜不到 VPN Server 这个套件的,可以选择去及其他地区的群晖官网下载后,手动上传安装,这样就可以使用了。这次升级到 DSM7.2 版本以后,发现之前安装的版本因为不兼容,导致无法使用了, 因此用这个方法重新升级了一下。
开启该服务后,设置其实比较简单。它主要支持一下三种协议:
- PPTP
- OpenVPN:使用该协议登录
- nas 启动该协议,勾选“允许客户端访问服务器的 LAN”
- 动态 IP 可以选择一个网段
- 路由器中设置外部端口和内部端口的转发规则
- 保存后,可以导出配置文件,修改配置文件中的域名。注意端口,可能要改成你暴露给外部的端口。
- 手机上只需要安装好OpenVPN,导入配置文件。
- L2TP/IPSec:不推荐,因为安卓手机新版本上,已经没有 L2TP 的选项了。
- 如果要使用该方式,那么,需要暴露 500、1701、4500 三个端口。
总结
经过上面的设置和理解以后,基本上你已经可以通过域名+端口号的方式访问到家中 NAS 搭建的响应服务了,比如 Alist。但是,有一些服务比如 Bitwarden 搭建以后,需要开启 HTTPS 你才可以访问,这时候,又需要进一步折腾开启 HTTPS 了,可以阅读我另一篇总结:群晖 NAS 开启 HTTPS 访问协议,提升安全性
FAQ
怎么知道宽带是否是公网 IP 呢?
- 以小米路由器为例,我进入路由器后台查看:常用设置 > 上网设置,获取 IP 地址。此外,在小米 Wi-Fi app 里 > 工具箱 > 路由设置 > 网络设置 > 上网模式设置,也是可以看到家庭网络IP地址的。
访问 IP,查看我互联网 IP 地址
二者如果一致,则说明我此时宽带已经是公网 IP。
参考
文章:
- youtube/如何随时随地访问家中的软路由和其他设备?远程访问端口转发保姆级教程丨CloudFlare设置动态DNS 域名解析 URL转发