为什么我无法通过互联网 [SSH 甚至尝试过 RDP] 远程访问路由器上的计算机?

为什么我无法通过互联网 [SSH 甚至尝试过 RDP] 远程访问路由器上的计算机?

这是我在这里发表的第一篇文章,因此欢迎提出建设性的批评。

目标机器uname -a(NAS本身):

Linux nas 4.19.0-9-amd64 #1 SMP Debian 4.19.118-2+deb10u1 (2020-06-07) x86_64 GNU/Linux

远程计算机uname -a(我尝试访问 NAS 的计算机):

Linux tilly 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

整篇文章中使用了以下别名:

本地IPv4- 路由器分配的 NAS 本地 ipv4 地址 (192.168.XX)。

本地IPv4- 连接到同一路由器的 Windows 计算机(接受远程桌面连接)的本地 ipv4 地址;这是我用来测试 RDP 的机器(也是 192.168.XX)。

公共IPv4- 路由器的公共 ipv4 地址

我正在设置 NAS 文件服务器,但在通过互联网向机器进行 shell 操作时遇到了问题。这不是我第一次使用 ssh 进行竞技表演。我花了很多时间尝试自己修复它,但都失败了。

在本地,即ssh localhost在目标机器上工作正常。同样,ssh LocalIPv4来自同一网络上的机器也可以正常工作。我对 Debian 的防火墙 (ufw) 的操作经验很少,据我所知,它已被保留为默认值(请参阅下面的输出iptables -L)。

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

ping 路由器的 PublicIPv4 工作正常;这是输出:

PING PublicIPv4 (PublicIPv4) 56(84) bytes of data.
64 bytes from PublicIPv4: icmp_seq=1 ttl=63 time=5.08 ms
64 bytes from PublicIPv4: icmp_seq=2 ttl=63 time=3.59 ms
64 bytes from PublicIPv4: icmp_seq=3 ttl=63 time=11.4 ms
64 bytes from PublicIPv4: icmp_seq=4 ttl=63 time=13.6 ms
^C
--- PublicIPv4 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 3.589/8.424/13.592/4.194 ms

端口 22 已在路由器设置中转发到正确的计算机。这是输出ssh -vvv PublicIPv4

OpenSSH_8.2p1 Ubuntu-4ubuntu0.1, OpenSSL 1.1.1f  31 Mar 2020
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug2: resolve_canonicalize: hostname PublicIPv4 is address
debug2: ssh_connect_direct
debug1: Connecting to PublicIPv4 [PublicIPv4] port 22.
note from op: Hangs here with no timeout; I have to Ctrl+C out.

这是输出netstat -tlpn | grep 22

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      17420/sshd          
tcp6       0      0 :::22                   :::*                    LISTEN      17420/sshd

我认为这是 isp 阻塞某些端口的问题,因此尝试切换到端口 2222。使用此端口,ssh localhost -p 2222从目标计算机和ssh LocalIPv4 -p 2222联网计算机都可以正常工作。然而,运行时同样的问题ssh -vvv PublicIPv4 -p 2222

我还尝试完全禁用路由器的防火墙,这也是默认设置,没有显示出为什么它会阻止端口 22 的明显原因。我听到提到一些奇怪的反向 DNS 查找问题,并尝试在/etc/hosts两台计算机上添加主机规则,但无济于事。

在绝望的尝试中,我尝试使用 RDP 访问联网的 Windows 计算机。我使用rdesktop WinLocalIPv4它也工作得很好,但是,在转发适当的端口后,甚至rdesktop PublicIPv4挂在类似的Connecting to . . .调试输出线上。

我已经用尽了我所知道的所有选项以及我在这次交易所中看到的其他选项。如果您需要任何其他信息来更好地了解自己的故障排除/诊断,我将非常乐意提供。谢谢你的时间。

编辑:

使用名为的服务后盾牌升起!,它报告说我打开的端口正在以“隐形模式”运行。在暂时禁用路由器的所有明显安全功能后,该服务仍然将这些端口报告为“tcp 数据包的黑洞”。我几乎可以肯定这就是问题所在,但现在的问题是我如何真正打开这些端口?似乎禁用安全功能和端口转发对此毫无用处。我正在考虑提出一个新问题,但我不完全确定这个平台对我来说是新的。任何有关这方面的建议都将受到赞赏。

编辑2:

在我的路由器上启用连接日志并运行端口 0-1023 的探测后,通过盾牌升起!,在我的网络上,连接日志根本报告没有传入连接。日志正在工作;有大量传出 https 流量。这似乎确实是问题所在,但我不知道如何阻止这种行为。我会在哪里发布这样的问题?

答案1

这更像是评论而不是答案。

您可以使用以下命令测试路由器是否正确地将端口转发到 LAN 内的计算机盾牌升起!

我强烈建议不要在路由器上打开/转发端口 22。有很多人/僵尸网络试图暴力进入端口 22。我会让你的路由器互联网 SSH 端口高于端口 1024,一台好的路由器会让你将一个端口映射到另一个目标端口。 (ig 将您的路由器互联网端口 9876 映射到 SSH 服务器的端口 22。)人们仍然可以对您的公共 IP 进行端口扫描以查找开放端口,但是,他们可能只是在寻找公共入口点,而不是扫描整个 65535 端口范围。

另外,运行失败2禁止在您的 SSH 服务器上。如果您更改 LAN SSH 服务器所在的端口,您还必须告诉 fail2ban 要监视哪个端口,因为它默认监视端口 22。

运行fail2ban一天后,查看其日志。您可能会看到许多 IP 被禁止,因为它们试图进入您的计算机。

编辑:

我在我使用的路由器上发现的一个警告...转发单个端口似乎不适用于我的路由器。但是,我使用了不同的方法来使其工作......我转发了一系列端口......其中起始端口和结束端口是相同的端口号,并且确实有效。

另外,请阅读我的答案类似的问题。

编辑:

为了防止暴力破解密码,请使用以下说明进行设置SSH 公钥认证

完成此操作后,进行测试以确保您的公钥可以以 root 身份登录,然后修改 sshd 的配置以禁止 root 通过密码登录,这样您只能使用 SSH 公钥以 root 身份登录。您还可以使用此方法使用 SSH 公钥以标准用户身份登录。

另外,以 root 身份或使用 sudo,使用以下命令锁定标准用户帐户:

usermod -L username

这将禁用该用户使用密码登录。但是,您的 SSH 公钥仍然可以用于登录。

注意:远程使用上述命令时,打开一个新的外壳到服务器来测试您的登录能力。这样,如果您出现问题并且无法登录,您已经登录到另一个 shell 并可以解决问题。

请记住,在删除使用密码登录的功能之前,请进行测试以确保您可以使用 SSH 公钥登录您的帐户。

答案2

它似乎转发端口这就是您所错过的:它会在您的防火墙上创建(小)漏洞。

尝试学习一点从 Linksys 那里。在路由器上进行更改,然后尝试从外部进行访问(例如,使用笔记本电脑和智能手机的 4G 连接或免费 WiFi)。请注意 - 正如您所说 - 有时端口会被阻止(如从传出端而不是从传入端......)。

享受 !

答案3

我不确定你的路由器,但你可能会检查......对于我的,当端口转发时,我可以设置“TCP”,“UDP”和“TCP&UDP”端口,但由于某种原因,设置“TCP&UDP”端口从来不适合我。我必须为同一端口设置 TCP 和 UDP,才能为同一台(或不同)机器打开它们。

对于它的价值,您可能已经知道这一点,但您说“没有显示出为什么会阻止端口 22 的明显原因”,因此对此的回应是:不仅端口 0 到 1024 被认为是特殊的并且需要 root 或特殊功能来保留,而且端口 22 通常是为 SSH 保留的,因此它被大多数家庭路由器和默认防火墙阻止,对于 RDP 也是如此;为 3389 保留,通常也被大多数家庭路由器和防火墙阻止。您可以通过隧道从一个端口到另一个端口建立 SSH 连接,以检查这是否只是一个简单的端口问题。

相关内容