为什么在同一网络中使用动态 dns 进行端口转发时连接失败

Why is connection failing when port-forwarding with dynamic dns in same network

我的 raspberry pi 上有一个 MySQL 数据库 运行。 要访问它,当我在我的网络之外时,我使用动态 DNS (duckdns),但是当我在我的网络中时,我想使用相同的动态域名访问它。但是它不起作用,我总是被拒绝连接。

我想以某种方式启用它,这样当我在我的本地网络中时,我不必将 app.config MySQL 服务器地址从我的动态域更改为本地主机。

您需要一个支持 NAT 发夹的网关路由器。许多消费级设备(以及一些所谓的商业级设备)不支持这一点。要么你的没有,要么你需要找到一个选项来启用它。

当您尝试从网络内部连接到 public IP 地址时,路由器可能会假设您想要连接到路由器本身。

我家里的电缆调制解调器的内置路由器知道如何执行此操作。当我从笔记本电脑访问我的服务器,并从内部连接到 public IP 时,路由器(在电缆调制解调器内部)对数据包进行转换,以便我的服务器看到我的连接来自路由器的 IP 地址,不是我笔记本电脑的 IP 地址。

这是必须发生的事情,因为当服务器响应时,它会响应连接到它的机器。如果它响应笔记本电脑的地址,笔记本电脑将拒绝流量,因为它来自服务器的内部 IP,而不是我连接的 IP 地址。因此,它响应路由器,对数据包地址进行第二次转换,用外部 IP 替换服务器的内部 IP。记住先前流量的会话,然后路由器将数据包发送回笔记本电脑。

最终,如果没有路由器的配合,此设置可能无法为您工作,路由器可能不具备该功能。

但是,某些路由器具有允许您创建静态条目的 DNS 代理。我以前的 DSL 调制解调器不能发夹 NAT 连接,但它有一种创建 DNS 条目的方法,该条目将用于响应特定主机的内部 DNS 查询……具有与 DNS 以其他方式提供的 IP 不同的 IP。如果路由器支持,这是另一种解决方法。