可以对内 ssh,但不能对外 ssh

可以对内 ssh,但不能对外 ssh

我有一台 Netgear C6300(固件版本 2.01.14)路由器/调制解调器,我正在尽我所能从外部 ssh 进入我的树莓派。这是我的端口转发设置: 在此处输入图片描述

我可以使用 进行内部 ssh ssh 192.168.0.84,但在 canyouseeme.com 上进行外部 ssh 时,我收到“错误:无法在端口 (22) 上看到您的服务”。我的 sshd_config 包含该行Port 22,并且这些ListenAddress行已被注释掉。换句话说,我没有碰过这个文件。这是怎么回事?

答案1

我想到了几件事。

屏幕截图中的转发看起来没问题。您可以尝试将其设置为TCP而不是TCP/UDP,因为 ssh 是一种 TCP 协议。

动态网络

您确定使用了正确的动态更新主机名或正确的公共 IP 地址吗?要查找您的公共 IP 地址,请在 Raspberry 上打开控制台或通过 SSH(内部)进入控制台并使用curl icanhazip.com

sshd_配置

确保在 中/etc/ssh/sshd_config,sshd 监听正确的接口(如果您有多个接口)。用 注释掉该行ListenAddress a.b.c.d#重新启动服务(/etc/init.d/sshd restartsystemctl restart sshd,取决于您的发行版)。编辑:抱歉,您已经说过了。

编辑:

路由

如果您无法从 获得输出curl icanhazip.com,则可能是您的 Raspberry 不知道如何访问互联网。因此它无法从外部回复您的连接尝试。添加路由,例如使用ip route add default via <your modem's IP address>并重试。

iptables

确保您的 Raspberry 内部防火墙允许来自外部地址的 SSH。iptables -S将为您提供规则列表。查找类似以下行

-A INPUT -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j ACCEPT
# SSH only allowed from the internal network, if iptables policy INPUT is DROP

在这种情况下,使用iptables -P INPUT ACCEPT或允许所有传入流量iptables -I INPUT -p tcp --dport 22 -j ACCEPT

DS-Lite(双栈精简版)

在家庭网络内部,您使用 IPv4 地址。在您的示例中为 192.168.0.x。但是,您的 ISP 可能在其网络中使用 IPv6。路由器将您的 IPv4 地址转换为 IPv6。这通常会导致无法从远程连接到您的家庭网络。

如果curl icanhazip.com为您提供了 IPv6 地址,例如2001:a61::35:2,它可能是一个指示器。此外,也许您的 C6300 将显示有关该信息。(我使用 AVM Fritz!Box 7360,它明确输出“Fritz!Box 使用 DS-Lite 隧道”)。

为了 100% 确定,请致电您的 ISP。

编辑:

如果您位于 DS-Lite 隧道后面,则可以考虑使用以下选项从远程连接回家:

  • 要求您的提供商/ISP 将您的线路切换到非 DS-Lite 线路
  • 使用autossh将您的家用计算机连接到另一台主机,例如在工作时(事先询问您的雇主)、您的 Web 服务器、您的 VPS。配置autossh为创建反向隧道,例如。然后,您可以通过 ssh 连接到 yourvps.com 并从那里通过 ssh 回到家中。ssh -R 10000:localhost:22 [email protected]ssh -p 10000 user@localhost

编辑:

Netgear C6300 特定

直到固件版本 2.01.14 为止,固件中似乎存在一个错误,只有激活“高级配置”>“WAN 设置”中的“响应 Internet WAN 端口上的 Ping”选项时,打开的端口才会可见。

Netgear C6300 WAN 设置

相关内容