网络还能怎么玩(五):DNS解析与反向代理

这个章节我们将实现通过形如 https://ocer.cc 的域名访问我们的局域网设备/服务。

什么是DNS?

当你想要访问这个网站的时候,只需要在浏览器的地址栏里输入 https://world.ocer.cc,回车就可以到达这里。
但实际上这个网站在互联网上的地址是形如192.168.127.126的数字ip。
相信前者会更容易让你记住,甚至你只需要在浏览器输入ocer.cc这7个字符就可以被重定向到这里。
我们之所以能通过这么多条路到达这个地方,全靠有DNS为我们指路。

[!文心一言] 什么是DNS?
DNS,全称为域名系统(Domain Name System),是一个用于将域名转换为IP地址的分布式数据库。它是由域名解析器和域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。用户通过在应用程序中输入DNS名称,DNS服务可以将此名称解析为与之相关的其他信息,如IP地址。这样,用户就可以通过易于记忆的域名来访问互联网上的计算机和服务,而无需记住复杂的IP地址。

简单理解:
DNS.png

将域名解析至公网主机

那么DNS是如何知道那些域名指向哪些地址呢?
很简单,就是提前告诉它。
我们首先在阿里云购买一个自己喜欢的域名。
然后在云解析DNS中进行配置。

  1. 点此进行配置:cf65a1019deed4e3ba985c7e640dbbf2.png
  2. 先添加一条@记录,这告诉DNS你刚才购买的主域名(比如ocer.cc)应该被解析到我们的公网主机:a4daeec6fb50d24bad2ce4a365b4f0d7.png
  3. 再添加一条泛解析记录,这告诉DNS主域名下的子域名(比如world.ocer.cc)应该被解析到我们的公网主机:8605c2a016052f39b35807f4c20d4a63.png
    上一篇中,我们配置的Nas面板需要通过公网ip:8080访问,现在使用域名:8080也可以了。

反向代理

我相信,你一定对:8080端口这个小尾巴不是很满意,想要以一个简洁的域名进行访问。

https、http和端口

当我们访问 http://a.com 时,实际访问的是 http://a.com:80
当我们访问 https://a.com 时,实际访问的是 https://a.com:443
80和443分别是http和https访问时的默认端口,有这样的约定后就可以省略掉它们,更方便也更好看。

那这样的话,直接把80/443端口转发到我们的主机不就好了吗?
当然是可以的,但我们是通过frp进行内网穿透访问我们的内网主机的,而frp是端口连接,也就是说只有一个服务可以使用80/443端口,其他服务还是得有一条小尾巴。

那如果我们放一个像DNS一样的指路人在80/443端口,告诉通过不同的域名而来连接(如img.ocer.cc、world.ocer.cc)分别应该访问哪个服务的话不就可以了吗?

Nginx Proxy Manager

一图解释它的用处:
npmUsage.png

  1. 安装,Unraid可直接在应用里搜索Nginx找到:unraidNpm.png
  2. 重要的配置如下:npmConfig.png
  3. 打开软路由的frp配置,将公网主机的80端口和443端口转发给步骤2中分配给NPM的80端口和443端口的Unraid主机端口。frpNginx.png
  4. 访问NPM面板,点击代理配置:npmClickProxy.png
  5. 先配置一个Nas面板的代理吧,记得先给你的面板设置一个访问密码再进行,不然只要有你的面板地址就都可以操控你的Nas主机了!:npmNasConfig.png
  6. 访问刚才设置的Domain Names,就可以看到你的Nas面板了。但细心的你应该注意到了,在浏览器地址栏前面会有一把未上锁的锁,或者直接告诉你说“不安全”。这是因为我们此时使用了https进行访问,但是却没有配置证书(不考虑使用http进行访问,http本身就是不够安全的,某些服务如nextcloud移动客户端甚至拒绝连接http服务端)。2bcb1bb7cadef6b41b69492f1d34fc03.png

    [!文心一言] 什么是https证书?
    HTTPS证书,也称为SSL(Secure Sockets Layer)证书或TLS(Transport Layer Security)证书,是一种数字证书,用于在网络上建立安全的加密连接。它的主要目的是确保在互联网上进行的数据传输的安全性和私密性。

    HTTPS证书是颁发给标识互联网域名的数字证书,证书作用为建立SSL加密通道。当使用HTTPS协议进行通信时,服务器和客户端之间会通过SSL/TLS协议进行双向认证,并使用该证书来加密通信内容。这种加密通信可以防止数据在传输过程中被窃取或篡改。

    HTTPS证书的主要作用是为敏感数据和交易(如账单明细、信用卡交易和用户登录等)提供不安全HTTP协议之上的增强安全层。HTTPS使用SSL或TLS加密技术加密转换中的每个数据包,以避免中间黑客和攻击者提取数据;即使连接被破坏,也能保证数据的完整性和安全性。

    此外,HTTPS证书还有助于建立客户信任、提升SEO优势、实现数据加密协议传输等。在网站、微信小程序、APP、API、视频等网络场景中,都可以使用HTTPS证书来保证数据的安全传输。

  7. NPM可以方便地帮我们解决,编辑刚才配置的代理:npmProxyEdit.pngssl.png

再次访问(可能需要清理浏览器缓存,或者换个浏览器,又或者过段时间后再访问),就会是一个安全的连接了。
接下来,每增加一个想要特定域名访问的内网服务,只需要在NPM面板中添加一条代理就可以了。

现在我们的网络拓扑:d0465da53b64d6a28a504eaf329a540c.png