为什么我无法从我的公共 IP 访问 SSH,但随机黑客机器人可以?

为什么我无法从我的公共 IP 访问 SSH,但随机黑客机器人可以?

我有一台装有 Raspbian Stretch 的 Raspberry Pi3,位于家用路由器后面。

RPi 中的 /var/log/auth.log 持续显示使用通用用户名(root、operator、webmaster 等)在随机端口(数字较大)上登录失败,大约每 10 秒尝试 3 次,来自中国地址。我知道这并不奇怪。

我不明白的是,当我尝试通过我的公共 IP 联系它时,P​​uTTY 为什么无法到达同一个服务器?

我在这个领域还是个新手,但以我的知识来看,这完全是一个悖论。

一些额外的技术说明:

  • iptables 未受影响

  • 使用 nmap 对我的公共 IP 地址进行扫描,结果显示“扫描的所有 1000 个端口均已被过滤”

  • 一个功能齐全的 LAMP 服务器托管着一个可以工作的 Owncloud,但只能从 LAN 运行,因为任何联系我的公共 IP 地址的尝试都失败了。
  • 我尝试从与 RPi 相同的 LAN 连接到我的公共 IP。
  • 端口 22 被重定向到路由器中的 RPi,并且为了进行我目前的测试,路由器的防火墙完全关闭。
  • 在路由器中,我的 RPi 被设置为 DMZ。据我所知,关闭此设置后结果相同。

我的数据包被丢到哪里了?为什么?

我可以在哪里搜索可以向我显示的日志?

提前致谢

答案1

这是由于无法执行 Hairpin NAT 而导致的常见问题。大多数廉价家用路由器只需打开端口转发即可解决此问题。然而,高端路由器实际上需要单独的规则来解决这个问题。

常规 NAT 规则仅在网络外部有效。如果您尝试从网络内部进行连接,则存在 NAT 问题。

考虑一下这个...

  • Server A在本地网络上拥有 IP 10.10.10.10
  • Computer A在本地网络上拥有 IP 10.10.10.20
  • 您拥有Router A的 IPLAN10.10.10.1,以及WAN的 IP 为11.11.11.11
  • Computer B的网络外部有 IP 12.12.12.12
  • 您已从port 22WAN IP 转发至Server A

从你的网络外部来看,流量如下所示:

计算机 B 尝试连接服务器 A:

Source IP: 12.12.12.12   Src Port: 12345
Destination IP: 11.11.11.11    Dest Port: 22

路由器 A 对数据包进行 NAT 并将其发送到服务器 A:

Source IP: 12.12.12.12   Src Port: 12345
Destination IP: 10.10.10.10   Dest Port: 22

服务器A响应计算机B:

Source IP: 10.10.10.10    Src Port: 22
Destination IP: 12.12.12.12   Dest Port: 12345

路由器 A 对数据包进行 NAT 并将其发送到计算机 B:

Source IP: 11.11.11.11   Src Port: 22
Destination IP: 12.12.12.12   Dest Port: 12345

一切按预期运行。现在,考虑同样的场景,但从网络内部来看:

计算机 A 尝试连接服务器 A:

Source IP: 10.10.10.20   Src Port: 12345
Destination IP: 11.11.11.11   Dest Port: 22

路由器 A 对数据包进行 NAT 并将其发送到服务器 A:

Source IP: 10.10.10.20   Src Port: 12345
Destination IP: 10.10.10.10   Dest Port: 22

服务器A响应计算机A:

Source IP: 10.10.10.10   Src Port: 22
Destination IP: 10.10.10.20   Dest Port: 12345

源 IP 与目标 IP 位于同一子网。Server A不会将数据包发送回路由器,而是直接将其发送到Computer AComputer A丢弃数据包,因为它来自10.10.10.10,并且它将原始数据包发送到11.11.11.11。 它期望数据包从 返回11.11.11.11

要解决此问题,您必须创建第二条更具体的 NAT 规则来匹配来自网络内部的流量。它将位于原始 NAT 规则之后。您需要执行如下所示的源 NAT:

srcnat src-address=10.10.10.0/24 dst-address=10.10.10.10 dst-port=22 out-interface=LAN action=masquerade

现在,让我们再看一下:

计算机 A 尝试连接服务器 A:

Source IP: 10.10.10.20   Src Port: 12345
Destination IP: 11.11.11.11   Dest Port: 22

路由器 A 对数据包进行 NAT 并将其发送到服务器 A:

Source IP: 10.10.10.1   Src Port: 12345
Destination IP: 10.10.10.10   Dest Port: 22

服务器A响应计算机A:

Source IP: 10.10.10.10   Src Port: 22
Destination IP: 10.10.10.1   Dest Port: 12345

路由器 A 对数据包进行 NAT 并将其发送到计算机 A:

Source IP: 11.11.11.11   Src Port: 22
Destination IP: 10.10.10.20   Dest Port: 12345

一切按预期进行。

如何实施第二条 NAT 规则取决于路由器硬件和软件。您的情况可能会有所不同。

相关内容