端口转发问题 - 使用 SSH 连接配置端口时连接被拒绝

端口转发问题 - 使用 SSH 连接配置端口时连接被拒绝

前言

  • 我确实有一个公共 IP,我可以在上面验证我的 IP 地址是什么
  • 当我尝试通过以下任何一种方式从外部连接到我的计算机时
    ssh myusername@mypublicIP
    ssh -p 22 myusername@mypublicIP
    ssh -p 2222 myusername@mypublicIP
    ...
    
    我有一段时间看不到输出,最后出现此错误
    ssh: connect to host mypublicIP port 2222: Connection timed out    
    
    我认为这是预料之中的,因为我还没有配置端口转发(对于任何端口)。

我尝试配置 SSH 端口转发

因此我继续尝试在路由器的配置页面¹中进行配置。

路由器配置页面允许通过两个界面进行此操作:简化端口映射端口映射,但我都没有成功:

  • 当我尝试通过端口映射,我一设置内部端口到 22 时,我看到以下错误,并且添加按钮变灰,因此我无法完成设置

所选端口不可用,因为它当前用于 FASTGate 服务的内部。

在此处输入图片描述

  • 当我尝试通过简化端口映射,我成功完成设置(我只需要选择通过端口 2222 进行 SSH 进/出和我的电脑,然后点击添加,但当我尝试ssh从外部进入我的机器时,我得到了
    $ ssh -p 2222 myusername@mypublicIP
    ssh: connect to host mypublicIP port 2222: Connection refused
    
    它告诉我我所做的配置有一定的效果,因为我得到的是refused错误而不是timed out,但有些事情仍然不太正确。 在此处输入图片描述

顺便说一下,我的路由器来自我的供应商(我在意大利),快网

答案1

我在这个社区的声誉不足以添加简单的评论,所以我不得不求助于一个完整的答案。我也是意大利人,有同样的调制解调器和问题,我可以更肯定地说明

  • 尝试硬重置路由器,看看它是否允许我在端口映射期间将 22 设置为内部端口

选项不起作用。对于意大利读者来说,似乎证明这款调制解调器自 2020 年初以来由于固件更新而出现了这样的错误。

感谢 Enrico 的自我回答,我快要疯了才想解决这个问题!


编辑:

为了尝试忘记这个问题,我还在我计划使用的每个 SSH 客户端config中创建了一个文件,其中包含:~/.ssh

Host raspberry_at_home
    HostName 192.168.1.17
    Port 2222
    User andrea

Host raspberry_when_outside
    HostName <MY_PUBLIC_IP>
    Port 2222
    User andrea

这样我也可以在本地连接,而不必每次都指定与默认端口22(即强加的2222)不同的端口。例如,我现在可以运行:

ssh raspberry_when_outside

综上所述,如果我理解正确的话,我们的调制解调器中的这个错误将不允许任何人连接到同一 LAN 内的多个 SSH 服务器(从网络外部),因为它只允许使用预定的端口执行2222任务,当然,您可以将单个本地 IP 地址绑定到该端口:如果一切都使用 Fastweb 提供的“简化”/定制配置完成,这是 100% 正确的。我仍然没有完全理解 @Enlico 的意思

  • 设置从外部端口wxyz到内部端口的端口转发2222

但我还是设法在没有该步骤的情况下解决了我的问题。

希望这可以在将来对某些人有所帮助(也许对 Technicolor 的员工也有所帮助)!


总结

  • 使用调制解调器提供的简化端口映射 SSH 配置
  • (正如@Enlico 所说)“设置端口2222/etc/ssh/sshd_config这样我的电脑作为 SSH 服务器,就可以监听端口2222(我可以转发到该端口)而不是22(因为路由器很笨,我不能转发到该端口)”
  • 或者,按照上面的建议创建~/.ssh/config并自定义文件

答案2

我已经在 archlinux 的 IRC 频道上寻求帮助。

调查的结果是,我的路由器出了问题,不允许我转发通过“正常”端口映射界面访问端口 22,如问题中第一个截图所示。

为了解决这个问题,我似乎有两个选择:

  • 尝试硬重置路由器,看看它是否允许我在端口映射期间将 22 设置为内部端口,
  • 致电 ISP FastWeb 寻求帮助。

考虑到 FastWeb 技术人员的知识(从统计上看)稀缺,第一个选项可能是最容易尝试的,但也可能是最不可能产生影响的;毕竟,我没有对路由器造成任何损害,而且据我记忆所知,问题正是在路由器硬重置后出现的。

为了暂时解决这个问题,我必须

  • 设置我的电脑作为 SSH 服务器,监听端口(我可以转发到该Port 2222端口)而不是(我不能转发到该端口,因为路由器很笨),/etc/ssh/sshd_config222222
  • 设置从外部端口wxyz到内部端口的端口转发2222

答案3

如果 SSH 发现您通过端口 2222 进入,则不会接受连接,并且它可能在端口 22 上列出。您可以检查sudo lsof -i -P | grep LISTEN | grep sshdssh 在哪个端口接受连接。(在您使用 ssh 连接的机器上)

您可以使用以下命令更改 SSH 端口:

sudo sed -i "s/#Port 22/Port 2222/" /etc/ssh/sshd_config
sudo systemctl restart sshd

相关内容