🛣️新手教程:拥有公网 IP 下的外网访问 NAS 的过程(原理介绍)
00 分钟
2024-8-26
2024-9-7
type
status
date
slug
summary
tags
category
icon
password
如需技术支持,请点击 👉 联系方式
先前,有位朋友付费让我协助配置 NAS 外网访问。在与这位朋友沟通和搭建过程中,我发现他对一些网络基础概念和应用原理不太清楚,例如“端口映射”、“域名”、“DDNS”、“反向代理”和“SSL”等。这种现象不仅限于他,很多新手在实现外网访问时也存在类似的知识盲点,导致操作偏差,最终无法正确实现外网访问。
因此,本篇文章将向大家介绍一些相关基础知识,帮助大家更好地理解并实现外网访问。
注意:本文不涉及 IPv6,所有内容基于 IPv4。

1. 网络服务地址:公网 IP + 端口号

网络服务指的是通过互联网提供的各种应用或功能,如网页浏览、电子邮件、视频流等。NAS 上运行的影音服务器(如 Plex、Emby)和下载工具(如 QB、Transmission)也属于其中。每个服务都运行在一台设备上,通过公网 IP 地址(设备在互联网上的唯一标识)和端口号(标识特定服务的编号)来访问。举例来说,当你在浏览器中访问某网站时,实际上是通过该网站的公网 IP 地址和特定端口号(通常是 80 或 443)连接到服务器。

1.1 公网IP:设备在互联网上的唯一地址

在互联网的世界里,每一台设备都需要一个唯一的地址才能与其他设备通信,这就是 IP 地址。公网 IP(Public IP)是互联网服务提供商(ISP)分配给设备的唯一地址,可以在全球范围内被识别和访问。形象地说,公网 IP 就像你住在大城市的独特住址。
想象你住在一栋大楼里,这栋大楼的地址是独一无二的(相当于公网 IP )。如果你的朋友想来找你,他们需要知道你的具体地址。互联网中的其他设备也是如此,它们通过你的公网 IP 找到你,并与你的设备进行交互。
但由于全球 IPv4 地址已几乎枯竭,国内的宽带运营商通常采用 NAT(网络地址转换)技术,通过一个公网 IP 供多个用户共享,以节省资源。分配独立公网 IP 的成本较高,因此大多数家庭宽带用户并不会获得独立的公网 IP。用回上面大楼的例子,在这种情况下,就相当于很多人都住在同一个大楼里面,大家共用一个进出口,这个进出口由大楼的门卫(运营商)把控着,即使你的朋友知道了大楼的地址(IP),他也只能跟门卫沟通,无法和你直接一对一联系。
而且就我了解,某些省份也已经开始回收公网 IPv4,先前拥有公网 IPv4 的宽带用户也被强制回收,或者要求你升级为更贵的宽带套餐才可以提供公网 IP;有些省份的宽带运营商干脆就直接把所有公网 IP 给关停了,不再给到个人宽带用户。

1.2 端口号:指引数据流向正确应用的关键

知道 IP 地址还不够,还需要知道端口号。端口号相当于楼内的房间号,通过它可以区分设备中的不同服务。例如,网页浏览使用端口 80 或 443 ,邮件服务使用其他端口。没有端口号,设备无法识别要把数据发送到哪个应用,导致通信失败。
你可以把端口号想象成一座大楼里的房间号。我们知道,每一栋大楼都有一个地址,比如某个街道的 123 号。而每个房间都有自己的房间号,用来区分不同的房间。大楼的地址就像是电脑或服务器的 IP 地址,而房间号就像是端口号。
假设你家有一个快递地址(相当于 IP 地址),但你家有很多房间。快递员需要知道哪个房间要接收包裹(相当于端口号)。如果快递员送错了房间,可能会导致包裹无法正确送达。同样,网络中的数据也是这样,它们通过 IP 地址找到目标设备,然后通过端口号找到正确的应用程序进行处理。没有端口号,设备就无法知道要把数据发给哪个应用程序,从而导致通信失败。
在某些情况下,例如在浏览器中访问一个网站时,我们不需要手动输入端口号。这是因为浏览器会自动使用“默认端口”。对于 HTTP 协议(不加密的网页),默认端口是 80 ;对于 HTTPS 协议(加密的网页),默认端口是 443 。当我们在浏览器中输入域名时,浏览器自动附加这些默认端口并与对应的服务器进行通信。
例如,浏览器中输入 https://www.jackiewu.tophttps://www.jackiewu.top:443 的效果是一样的,因为浏览器会自动帮你添加上默认端口号(443),不需要你手动输入(如果使用的是 HTTP 协议,那么会自动加上 80 端口号)。但如果说你要访问的网站服务器并不使用 443 或 80 端口号作为网页服务的监听端口,那么这时候你就需要手动去添加上对应的端口号了,否而你将无法访问对应服务器的网页服务。

2. 域名与 DDNS:简化与保障 NAS 的远程访问

在 NAS 的远程访问中,公网 IP 和端口号扮演着关键角色。公网 IP 是你在互联网上的“地址”,使得外部设备可以找到并连接到你的家庭网络。而端口号则像“房间号”,确保数据能够准确地到达 NAS 上的特定服务。然而,公网 IP 和端口号在实际使用中也带来了几个困难。特别是对于拥有公网 IP 的家庭用户,公网 IP 通常是动态分配的,时常变化,加之端口号的复杂性,直接使用 IP 和端口号访问 NAS 是不现实的办法。

2.1 域名的作用:简化 NAS 的远程访问

虽然公网 IP 和端口号可以让设备和应用在互联网上相互通信,但它们通常是由一串难以记忆的数字组成(例如 112.21.54.87:443 )。对于大多数用户来说,记住这些数字并不现实。
域名的出现就是为了解决这个问题。域名是一种易于记忆的互联网地址,通过它,用户不再需要记住复杂的数字 IP 地址。通常,域名由简单易记的文字组成(如 www.jackiewu.com ),而不是复杂的数字(如 IP 地址 112.21.54.87 ),这样用户可以方便地输入和记忆。
域名通过 DNS 服务器解析,得到对应的 IP 地址。通过 Windows 上的 nslookup 命令可以查询域名背后的 IP 地址。例如,查询百度服务器的 IP:
Addresses 就是经过解析之后得到的 IPv4 地址和 IPv6 地址。
Addresses 就是经过解析之后得到的 IPv4 地址和 IPv6 地址。
在 NAS 外网访问场景中,域名尤为重要,不仅让访问更加直观,还提供了一个稳定的入口,无论网络环境如何变化,只需记住一个域名即可轻松访问家中的 NAS 。所以,几乎所有拥有公网 IP 的用户,都会去购买一个域名来配合外网访问使用。
例如,当你购买了一个域名之后,你可以在域名托管商的后台去配置域名的 DNS 记录。例如下图所示,博主添加了一条 test.jackiewu.top 域名的解析记录,当访问这个域名时,会返回 114.114.114.114 的 IP 地址:
Cloudflare 域名后台
Cloudflare 域名后台
读者可以在阿里云、腾讯云或者国外的 namesilio 或者 GoDaddy 上面购买自己喜欢的域名,价格在第一年往往是比较便宜的,后续续费的话就比较贵一些了。如果只是个人使用的话,不建议购买 .com 结尾的域名,因为这一类域名的价格往往比较贵。我更推荐购买 .xyz 结尾的域名,这一类域名价格相对便宜,而且如果你不介意的话,购买纯数字的 .xyz 域名会更加白菜价(例如 778899.xyz ),一年的费用往往只有几块钱,一次性购买十年也花不了几个钱。

2.2 动态 IP 与 DDNS 的必要性

由于许多家庭宽带用户的公网 IP 是动态的,宽带运营商会定期更改公网 IP 地址。当 IP 地址发生变化时,若域名没有更新,你将无法通过原来的域名访问 NAS 。这时,动态域名系统(DDNS)派上了用场。
DDNS 能够自动更新域名与其对应的公网 IP 地址。当 IP 变化时,DDNS 会自动更新域名解析记录,确保用户仍能通过原来的域名访问 NAS,从而大大提高了远程访问的稳定性和便利性。
常见的 DDNS 工具有许多,如 DDNS-GO ,可以通过 Docker 部署在不同系统中,并支持多家域名托管商,如 Cloudflare、阿里云和腾讯 DnsPod 。
DDNS-GO 应用界面截图
DDNS-GO 应用界面截图
域名和 DDNS 的结合提供了一种强大的解决方案。域名让用户不必再记忆复杂的IP地址,而 DDNS 则确保了即使在 IP 地址频繁变化的情况下,域名也能保持有效。这种协同作用为 NAS 用户提供了一个既简便又稳定的远程访问方式。
先前有朋友问 DDNS 应用应该部署在什么设备或系统上(例如应该部署在 Unraid 还是部署在旁路由),其实部署在哪里都是可以的,因为 DDNS 不会因为系统或设备的不同而导致实现的结果有所偏差。考虑到稳定性,一般是建议部署在负责拨号的那个设备上,因为负责拨号上网的设备往往不会经常去折腾它,可以让 DDNS 稳定工作。

3. 端口映射:确保数据准确抵达 NAS 的关键

端口映射有时候也叫做端口转发,它们实现的作用类似,但又不完全一样,这里不做讨论。
在前面的讨论中,我们介绍了如何通过域名和 DDNS 来简化 NAS 的远程访问。域名帮助我们用易记的方式替代了复杂的公网 IP 地址,而 DDNS 则确保了即使公网 IP 发生变化,域名依然能够指向正确的设备。这些技术共同解决了外网访问家庭 NAS 时的稳定性和便利性问题,让我们可以随时随地通过固定的域名来连接家中的 NAS 设备。

3.1 如何引导数据流向正确的设备和服务

然而,即便有了域名和 DDNS,我们仍需解决一个关键问题:如何确保外部访问的数据准确到达家庭 NAS 的特定服务?在一个家庭网络中,往往有多台设备共用同一个公网 IP ,如何让外部请求准确地找到 NAS 并与 NAS 上的服务通信,就成为了新的难题。
在这里,端口号再次发挥了作用。前面我们已经提到,端口号用于区分同一设备上的不同服务,比如 Web 服务通常使用端口 80 或 443 ,而文件共享服务可能使用其他端口。但是,如何确保外部访问的数据包能够准确进入家庭网络,并被转发到正确的设备和端口呢?

3.2 端口映射的概念

这时,端口映射(Port Mapping)就派上了用场。端口映射是一种网络配置技术,用于将来自外部互联网的数据请求,通过路由器转发到家庭网络中的特定设备和端口上。简而言之,它就是在家庭网络的“门口”(路由器)设置的一条规则:当某个外部请求到达指定的端口时,路由器会自动将其重定向到网络内部的 NAS 设备上。

3.3 端口映射在 NAS 外网访问中的作用

设想一下,当你在外面通过域名访问 NAS 时,请求首先会到达你的家庭路由器。此时,路由器根据预设的端口映射规则,将该请求引导到 NAS 设备上指定的端口。这就好比路由器充当了一个门卫,按照预定的路线,将访客(数据包)引导到正确的房间( NAS 的服务端口)。
没有端口映射,即使域名和 DDNS 能够让外部设备找到你的家庭网络,数据包也可能无法进入正确的 NAS 服务,从而导致访问失败。
这里,博主以 iKuai 上的端口映射为例,介绍如何通过端口映射来实现外网访问 NAS 上面的 Emby 。如下图所示,在 iKuai 的端口映射上面新建一条规则,在外网访问公网 IP 的 8899 端口号时,iKuai 就会将这个端口接收到的数据转发给 NAS 上的 8096 端口,也就是 Emby 的网页服务监听端口,这样我们就可以在外网访问都 Emby 的网页页面。
notion image
用简单的示意图来表的话,那么大概就是这样的:
notion image
除了上面提到的 Emby 之外,如果你还需要向外网提供其他的服务,例如将 qBittorrent ,那么就需要再添加一条端口映射规则,来方便外网能够通过相应的端口号来访问 qBittorrent 服务。
可以看到,如果你需要将很多的服务放到外网中进行访问,那么意味着你需要在路由器上面暴露很多个端口。这么做主要存在两种缺点:
  • 不便捷:有 10 个服务需要暴露,就需要 10 个不同的端口号进行映射,每一次访问不同的服务就需要使用不同的端口号,既不便捷也不好维护。
  • 不安全:暴露到外网的端口号越多,风险也越大,因为容易被不怀好意的人恶意扫描端口,而后进行入侵。所以我经常向那些让我协助搭建外网访问的朋友说,尽可能不要将重要的服务暴露到公网上(例如路由器管理界面,unraid 后台界面等),也不要添加过多的端口映射规则。
因此,为了解决上述问题,我往往会建议那些拥有公网 IP 的朋友去使用反向代理。

4. 反向代理:简化 NAS 访问,提升安全性

在没有引入反向代理之前,我们通过域名 + 端口号的形式来访问不同的服务,例如 mydomain.com:8096 来访问 Emby、mydomain.com:8080 来访问 QB 。可以看到,这种方式十分的不便捷,因为本质上我们是通过端口号来区分需要访问的服务,如果我们要访问的服务很多,那么就得修改域名后面的端口号来访问不同的服务。
为了解决多端口暴露带来的不便与安全隐患,反向代理应运而生。

4.1 反向代理的概念与工作原理

反向代理是一种网络服务器,它位于客户端和服务器之间,接收来自客户端的请求并将其转发到相应的内部服务器。与传统的端口转发不同,反向代理能够通过一个公共入口(通常是一个域名或单一端口),将多个内部服务统一起来。
简单来说,反向代理就像一个智能的“中转站”,它隐藏了内部服务的复杂性,对外只暴露一个简洁的接口。当你访问反向代理时,它会根据请求的特征(如 URL 路径或者特定的域名),将请求转发到不同的内部服务,而无需用户手动输入不同的端口号。

4.2 反向代理如何解决多端口暴露的问题

反向代理的一个核心优势在于它能够统一入口。通过将多个服务统一到一个入口点,用户只需记住一个域名或端口,就能访问不同的服务。也就是说,当我们部署了反向代理服务,我们只需要在路由器上面暴露一个端口将请求导向反向代理服务器,就可以实现通过域名访问 NAS 的所有服务
在安全性方面,反向代理通过减少暴露的端口数量,有效地降低了被攻击的风险。它通过隐藏内部网络的复杂性,只暴露一个公共接口,从而减少了攻击面。用户可以通过单一的入口访问不同的服务,而这些服务的实际端口不会暴露在外部互联网中。

4.3 反向代理在 NAS 外网访问中的应用

通过反向代理,你可以将所有需要外网访问的服务统一到一个域名下,无需再为每个服务设置单独的端口映射。用户在外网访问时,只需输入域名,反向代理会自动引导他们到相应的服务。这种方式不仅减少了操作复杂性,还降低了出错的可能性。
比如说使用 emby.myhome.com:18443 可以访问 emby,使用 qb.myhome.com:18443 可以访问 qBittorrent,我们只需要通过不同的域名并加上一个固定的端口号就可以实现外网访问不同的服务,这不仅符合用户的使用习惯,而且更具安全性。
我们还可以通过不同的 URL 路径来实现同样的效果。例如 jackiewu.top/emby 来访问 Emby 服务、使用 jackiewu.top/qb 来访问 qBittorrent、使用 jackiewu.top/home/unraid 来访问 Unraid 等。不过在使用习惯上,我更推荐采用二级域名的方式来实现效果。
上面例子中的 emby.myhome.comqb.myhome.com 叫做二级域名,而 unraid.emby.myhome.com 叫做三级域名,四级域名以此类推。而 18443 就是我们在路由器上面为反向代理服务器所配置的端口映射端口号,这个端口号是可以自行设置的,原则上建议使用 5 位数的端口号,这样会更安全一些。

4.4 域名与 SSL :为 NAS 提供安全和便利

前面说过,反向代理可以减少暴露到外网的端口数,可以提高安全性。除了这一点之外,反向代理还会通过 SSL 证书加密通信过程,进一步提升外部访问的安全性。
SSL 证书是用来加密用户与服务器之间数据传输的重要工具。在反向代理中,我们可以通过访问不同的域名来访问不同的应用服务。而 SSL 证书与域名的关系在于,SSL 证书通过域名进行申请,并会绑定到一个具体的域名或多个域名上,确保该域名下的通信是加密的。当用户通过浏览器访问该域名时,SSL 证书会验证服务器的真实性,并确保所有传输的数据都是安全的、不会被篡改或窃取。
当你访问一个带有 SSL 证书的网站(通常以 https:// 开头),浏览器会检查该网站的 SSL 证书,确保其合法并且可以加密通信。这种方式在浏览器的地址栏会显示一个 🔒 图标,表示该连接是安全的:
最新版的 Chrome 浏览器已经不再显示地址栏的 🔒 小图标了
最新版的 Chrome 浏览器已经不再显示地址栏的 🔒 小图标了
当你访问一个带有 SSL 证书域名的时候,可以通过浏览器去查看这个域名的 SSL 证书信息,例如百度的 SSL 域名证书:
notion image
notion image
查看百度的 baidu.com SSL 证书信息
查看百度的 baidu.com SSL 证书信息

5. 总结

在本文中,我们系统地介绍了实现 NAS 外网访问的核心概念和技术。首先,明确了公网 IP 和端口号是网络服务地址的基本组成,通过它们可以将数据准确地传递到设备上特定的服务。接着,我们讨论了域名和 DDNS 的重要性,域名简化了复杂的 IP 地址,DDNS 则在动态 IP 的情况下确保了稳定的访问。
我们还详细阐述了端口映射在网络中的作用,它帮助数据从外部网络准确流向家庭网络中的特定设备和服务。虽然端口映射能够实现外网访问,但多个服务的端口暴露带来了不便和安全隐患,因此反向代理成为了一个更好的选择。反向代理通过统一的入口,隐藏了内部服务的复杂性,减少了暴露的端口数量,提升了安全性和易用性。
最后,SSL 证书的引入进一步增强了通信的安全性。通过 SSL 证书加密,用户和服务器之间的数据传输得到了保护,避免了数据被篡改或窃取。
通过理解这些基础知识,你不仅可以更好地实现 NAS 的外网访问,还可以保障访问过程中的稳定性与安全性。在实际操作中,掌握这些概念和技术有助于你根据自身需求选择合适的方案,无论是基本的端口映射,还是更为复杂和安全的反向代理,都能帮助你顺利实现外网访问目标。
 

评论