davidlin88 / blogs

个人博客中相对完整的篇目的集合。
5 stars 0 forks source link

外网访问华硕路由器和群晖NAS #3

Open davidlin88 opened 3 years ago

davidlin88 commented 3 years ago

外网访问华硕路由器和群晖NAS

[TOC]

一、前言

年关将至,趁着放假前的一段平静,折腾了一下群晖和路由器的外网访问。过程中对网络多了一些理解,又幸得一两日空闲,遂作文以总结与指路。

要实现家庭设备外网访问有两种方式: 公网DDNS内网穿透 。本文只讨论相对体验更好的公网DDNS方案。

扩展阅读:利用zerotier的内网穿透实现外网访问群晖的方法

公网DDNS指利用DDNS动态域名解析技术,在外网通过域名访问家庭宽带的公网IP,由路由器提供端口转发,与内网设备直接通讯。

二、准备

使用公网DDNS直连方式需要满足 公网IP桥接模式端口映射 三个前提,缺一不可,然后利用DDNS动态域名解析技术使用域名来访问。

我的路由器是刷了梅林固件的华硕AC-86U,nas设备是群晖DS716+。

1. 申请公网IP

电信宽带的同学可以向客服申请公网IP,要问理由的话可以是安装家庭监控;移动宽带可以考虑换成电信宽带🐶(移动没有公网IP)。

公网IP:全球唯一,互联网上的所有人都可以通过你的IP访问到你,像是你的门牌地址

2. 桥接模式

通常情况下,我们家庭设备是这么连接的:光纤-光猫-路由器-其他设备。光猫默认是路由模式,它会从运营商处分配到一个IP(公网IP)。光猫再承担一个路由的功能,给连接他的路由器分配一个内网IP(这个过程叫NAT,网络地址转换)。

可打10000,说需要路由器拨号,电信客服可远程下发配置。动手能力强的也可搜索光猫的型号+破解,自行破解光猫管理员账号改为桥接模式。将光猫改为桥接模式后,它就承担一个中转的作用,由连接光猫的路由器去拨号上网拿到公网IP。有了这个一手的公网IP,我们就可以实现一些个性化的功能。

路由器拨号成功后,可以访问一些显示IP地址的网站(如:https://www.ip138.com/ ),并将获取到的IP和路由器管理页面的WAN IP做比对,如果全部一致,则基本确定拿到了公网IP。

内网IP:就像你住在一个私人庄园,公网IP就是门牌号,但具体庄园内路线怎么走的,外人是不知道的。内网IP像是公网IP的下级,别人只能找到你的上级,无法找到内网的你(除非设置端口转发,这个在后面说)

3. 获取宽带账号密码

光猫桥接,路由器拨号上网,所以需要的账号和密码,可以在电信APP内获取/修改,或拨打10000来询问客服获取。

4. 购买域名

本来,此步骤非必须,因为华硕和群晖本身都提供了DDNS服务。但是,因为家庭宽带通常被屏蔽了80和443端口,所以 此类免费DDNS的常用默认SSL证书Let's Encrypt会无法验证,导致无法在外网通过https访问, 而http是明文传输的,域名、账户、密码都会暴露在传输链路中,因此并不安全。所以个人建议像我一样自己注册域名,手动做SSL证书的验证,就可以解决这个问题。

我的域名是在阿里云注册的,最便宜的域名几块钱可以买一年。购买域名之后,你就可以用自己喜欢的域名来访问路由器和群晖啦,而不需要服务商的冗长的后缀,像asuscomm.com、synology.me等。

下文会用 qaq.com 来代表我们购买的域名

5. 申请SSL证书

前文有说,走https协议需要ssl证书,而证书是和域名关联的。我使用的是zerossl证书(https://zerossl.com/ ),它是免费的,具有90天的时效,个人网站使用足够了。

扩展阅读:不同类型SSL证书的区别

按照网站的验证指引,配合阿里云的域名控制台操作,就可以获取域名的SSL证书了~

验证主要是为了保证你是域名的控制人,所以步骤也很简单,填写域名后,按照zerossl分配给你的验证方式,配置在域名控制台就行了。

证书验证完成之后,可以把认证下载下来,解压之后可以获取三个文件,分别是certificate.crt、.private.key、ca_bundle.crt,后面会用到。

这一步,我们将SSL证书和域名关联了起来。

三、外网访问路由器管理页

1. 配置SSL证书

原本,如果用华硕路由器自带的DDNS客户端、并配合第三方DDNS,是可以省去很多麻烦事的,比如买域名、配置证书,但由于家庭宽带80端口被封导致Let's Encrypt证书无法验证,而华硕路由器为了安全考虑,外网访问时仅支持HTTPS协议。所以我们需要自己申请、验证、配置证书。

在华硕路由器管理页面:

  1. 点击高级设置-系统管理 -> 系统设置 -> “远程访问设置”的“从互联网设置RT-AC86U”选择“是”;
  2. 点击高级设置-外部网络 -> DDNS;
  3. 启用DDNS客户端出选“否”;
  4. HTTPS/SSL 证书处选择“导入您自己的证书”;
  5. 点击“上传”;
  6. “私人密钥”选择前文下载 .private.key 文件,“SSL证书”选择 certificate.crt 文件,点击确认。
  7. 点击“应用本页面设置”

再在页面查看证书的状态,等到状态变为启用,而且证书核发对象正是我们之前购买的域名qaq.com,到此,SSL证书的配置就完成了。

这一步,我们将SSL证书配置到了服务器(路由器)内。当浏览器访问宽带的IP时时,路由器会返回给客户端SSL证书信息,只要证书有效,浏览器就认可这个连接,加密通信得以被浏览器允许。

2. 配置阿里DDNS

这一步的目的是让固定的域名qaq.com和动态的家庭宽带IP及时关联并更新,让我们在访问域名时可以连接到路由器。

2.1 获取域名控制的AccessKey

2.1.1 创建用户

登录阿里云域名控制台,点击右上角头像-AccessKey管理,开始使用子账户AccessKey。创建用户 -> 填写用户名称,如登录名为router,显示名称为路由器,勾选编程访问(因为后面需要通过自动化的脚本来更新DDNS来匹配家庭宽带的公网IP),确定,验证手机号,用户创建完成。

2.1.2 添加权限

勾选用户,点击“添加权限”,只是自己用的话图省事可以选系统策略的AdministratorAccess,即管理所有阿里云资源的权限。

2.1.3 创建AccessKey

点击刚刚创建的用户-点击创建AccessKey,记下生成的AccessKey ID和AccessKey Secret。

2.2 配置阿里DDNS

路由器管理页面,软件中心-安装阿里DDNS插件,进入插件,选择开启Aliddns。服务配置栏,填入2.1步骤获取的id和secret,域名处注意,如果我们希望配置的是2级域名,如qaq.com,那域名处的两个输入框,第一个填@,第二个填qaq.com,其他的都按默认的就好了,点击“提交”。

提交之后,如果更新日志内显示IP更新成功,就可以访问qaq.com:8443来在外网登录路由器的管理页面了~

但还有个小问题,因为前面用的SSL证书是免费的,它的时效性是90天,90天后过期后如果还要我们再手动去验证证书势必非常麻烦,而梅林固件的软件中心有款插件Let's Encrypt也是为了解决这个问题而存在的。

这一步,我们将域名和宽度的IP地址关联了起来,并保持自动更新。

3. 配置Let's Encrypt插件自动续期SSL证书

梅林固件的路由器软件中心安装Let's Encrypt,进入插件:

打开开关,输入域名qaq.com,选择阿里DNS(万网),填入2.1.3步骤获取的id和secret,提交。

这一步,保持SSL证书的更新,防止浏览器不认可SSL证书的合法性而无法访问HTTPS连接的页面。

四、外网访问群晖管理页

1. 配置端口转发

路由器管理页,外部网络-端口转发-开启端口转发-添加配置文件。

服务名称:dsm admin

通信协议TCP

外部端口5001

本地IP地址选择你的nas在路由器里显示的名称

确定。

同样的,可以在这里把一些群晖常用的服务端口转发到公网,如afp的548、smb的137:139,445,webdav的5005,5006等,尽量不要把ssh的22端口转发到外网,即使要转发也要替换成大数字的端口如58822,防止被他人扫描端口攻击(会收到群晖的邮件提醒)。

2. 配置群晖服务的ssl证书

登录群晖的管理页-控制面板-安全性-证书-设置,将各种服务的证书配置都为固定域名qaq.com的证书。

至此,如果一切顺利,你已可以访问qaq.com:5001来登录群晖的dsm页了,并可以使用ds video、ds audio等一系列服务。

后记

有任何问题欢迎留言交流,有问必回。

因为对新手来说全过程比较冗长,当初为了搞定整个流程查了很多资料。记录难免疏漏,有变动会更新在博客里,理解万岁~!

autumnlong commented 6 months ago

太棒了,好帖怎么没人顶~

autumnlong commented 6 months ago

辛苦楼主

autumnlong commented 6 months ago

image 第二步应该选择“是”吧,不然无法上传https证书呀

autumnlong commented 6 months ago

HTTP SERVER设置成功,谢谢大佬!