我在用 Raspberry Pi 托管网站时遇到了一些问题。我遵循本教程。
我做了以下事情:
- 购买了.dev使用 Google Domains 的域名。
- 在我的 Raspberry Pi 上安装了 Apache2。这似乎有效,因为当我连接到网络并访问 Pi 的本地 IP 时,我得到了 Apache 默认页面
- 设置端口转发。我有一个 Xfinity 路由器,所以我转到 10.0.0.1(配置 Comcast 设备的默认本地地址),并使用 TCP/UDP 将 Raspberry Pi 的端口转发设置为 80 端口。显然这是有效的,因为当我访问我的 WAN IP 地址(这是正确的术语吗?)时,我的浏览器会将我发送到 Pi 上的 Apache 默认页面。
- 使用 Google Domains 创建动态 DNS,并创建了一个脚本,当我的 WAN IP 发生变化时,该脚本会使用API由 Google 提供。此操作有效,并且 Google Domains 网站会显示与域名关联的正确 IP 地址(与我在上一步中用于访问我的网站的 IP 地址相同)。
- 等待了一会儿,然后使用一些 DNS 传播检查器检查是否发生了变化。
现在,当我尝试访问我的网站时,首先会出现一个 Chrome 警告屏幕,上面写着Your connection is not private
错误代码NET::ERR_CERT_COMMON_NAME_INVALID
。我设法通过thisisunsafe
在浏览器中输入来绕过它。当我这样做时,我被发送到我的路由器配置而不是我的网站。在我看来,好像端口转发不起作用,所以我被卡在路由器上,它永远不会把我发送到我的 Raspberry Pi。然而,我是网络方面的初学者,所以我只是猜测。
如何让我的域名指向我的 Raspberry Pi?
答案1
从您的互联网服务的外部 IP 地址访问您本地网络上的任何内容时,将始终显示您的路由器配置页面,除非路由器根据 NAT 的工作方式设置了 NAT Hairpinning/Reflection。
这张图说明了目前发生的情况
+--------------ROUTER-----------------------+ +------DNS-----------+
| | | |
| | | Domain.dev |
Your PC | Router Internal IP Router External IP | | 1.2.3.4 |
10.0.0.2+ | 10.0.0.1 1.2.3.4 ^ | | |
+^+ | | | | |
||>>>>>>>>>>>>>>>>>>>>>> 3) PC Navigates to IP Address| | |
||<<<<<<<<<<<<<<<<<<<<<< 2) DNS Server returns External IP<<<<<+ |
+->>>>>>>>>>>>>>>>>>>>>> 1) DNS Lookup for Domain Name>>>>>>>> +--------------------+
| |
+-------------------------------------------+
如果没有 NAT 反射,PC 就会被定向到路由器的外部 IP 地址,并且路由器会使用路由器登录页面响应对内部或外部接口的任何请求。
NAT 反射的作用是让路由器识别出上图中第 3 步来自与内部 IP 地址通信的主机
然后,路由器在进行端口转发时将在内部和外部接口上应用相同的规则,这样,即使您正在与内部 IP 地址通信,也可以从外部 IP 地址访问内部资源