可以内部ssh,但不能外部


3

我有一个Netgear C6300(固件版本2.01.14)路由器/调制解调器,我正竭尽所能从外部ssh到我的覆盆子pi。这是我的端口转发设置: enter image description here

我可以在内部使用ssh ssh 192.168.0.84,但在外部canyouseeme.com我得到“错误:无法在端口(22)上看到你的服务。我的sshd_config有线 Port 22ListenAddress 线被注释掉了。换句话说,我没有碰过这个文件。这里发生了什么?


注意:这绝对是重复的 superuser.com/questions/1019256/... 但那个问题是5个月没有回答,所以我再问一遍。
ocket8888

Answers:


2

我想到了几件事。

屏幕截图中的转发看起来不错。您可以尝试将其设置为 TCP 代替 TCP/UDP,因为ssh是TCP协议。

DynDNS的

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

sshd_config中

确保,在 /etc/ssh/sshd_config,如果你有多个,sshd会监听正确的接口。注释掉这条线 ListenAddress a.b.c.d 用一个 # 并重新启动服务( /etc/init.d/sshd restart 要么 systemctl restart sshd,取决于你的发行版)。 编辑:对不起,你已经说过了。

编辑:

路由

如果你无法从中得到输出 curl icanhazip.com,你的Raspberry可能不知道如何上网。因此它无法从外部回复您的连接尝试。添加路线,e。 G。同 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地址,e。 G。 2001:a61::35:2,它可能是一个指标。此外,也许您的C6300将显示相关信息。 (我使用AVM Fritz!Box 7360,它明确输出“Fritz!Box使用DS-Lite隧道”)。

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

编辑:

如果您在DS-Lite隧道后面,可以考虑以下选项,然后从远程连接回家:

  • 请您的提供商/ ISP将您的线路切换到非DS-Lite线路
  • 使用 autossh 让您的家用电脑连接到另一台主机,例如G。在工作(之前问你的雇主),你的网络服务器,你的VPS。配置 autossh 以某种方式创建一个反向隧道,例如: G。 ssh -R 10000:localhost:22 user@yourvps.com。然后你可以ssh到yourvps.com和ssh从那里回家 ssh -p 10000 user@localhost

编辑:

Netgear C6300具体

在固件版本2.01.14之前或之前固件中似乎存在错误,只有在“高级配置”&gt;中选择“响应互联网广域网端口上的Ping”时才会使打开的端口可见。 “WAN设置”已激活。

Netgear C6300 WAN Setup


我的 iptables -S 输出就是 -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT所以我跑了 iptables -I INPUT -p tcp --dport 22 -j ACCEPT 正如你所建议的那样 curl 命令确实输出了一个IPv6地址,使用它没有任何区别。我在我的端口转发中将协议设置为TCP,但是 ping.eu/port-chk 仍告诉我港口已关闭。
ocket8888

好。好吧,如果所有政策( -P 已经被设定为 ACCEPT,没有区别。如果 curl 输出一个IPv6地址,然后你可能正在运行一个DS-Lite堆栈。或者更好,你的ISP做到了。请查看他们的网页,客户论坛或致电他们,以确保100%。在这种情况下,可能很难获得从远程到家的连接。您可以租用带有公共IP的VPS并运行 autossh 在你的覆盆子上,你可以在家里从VPS跳到你的覆盆子。
stueja

皱眉 必须有一种方法,我可以使用开放服务连接到我拥有的机器使用互联网连接,我已经支付,而无需租用任何东西。我的前室友有一个基于我家的文件服务器,从那时起我们改变了路由器而不是ISP,所以它必须是可能的,因为我们之前已经完成了。
ocket8888

这是新信息!你的室友多久以前一直在运行文件服务器?那是什么样的文件服务器?文件服务器使用哪些端口?你可以尝试在不同的端口上监听SSH,例如: G。 80或443,在您的路由器中相应地转发端口,然后重试?
stueja

您是否在“设置”&gt;中激活了“响应互联网广域网端口上的ping”高级配置中的“WAN设置”?
stueja
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.