如何使用 ssh 连接到我的 Linux 环境?(Leaptel、CGNAT)

如何使用 ssh 连接到我的 Linux 环境?(Leaptel、CGNAT)

我一直在尝试使用 ssh 连接到我家里的机器。

但每次我在不在本地的情况下尝试连接它时,总是会导致“连接超时”

我无法 ping 通它,我也尝试使用 netcat 和特定端口。没有响应。也许我错过了什么。

这是我家里的linux机器的情况:

  • 我使用私钥/公钥进行身份验证,并且已将公钥复制到我的 Linux 机器上
  • 我家里的linux环境是Ubuntu 22.0.4.1 LTS
  • 我已禁用密码验证
  • 如果我在本地网络上,它总是可以工作,只是不能远程工作
  • 我的 ISP 没有分配静态 IP,但每次我尝试连接时,我总是检查 ISP 提供给我的网络的当前 IP。
  • 我已经为我的 Linux 机器设置了不同的端口 [x]

我尝试修复此问题的方法如下:

  • 设置我的 sshd_config 以在我的 Linux 机器上保持活动状态

  • 在我的路由器上创建一个端口转发规则,从特定端口 [y] 到我的 Linux 机器上设置的端口 [x],并且对于 IP 地址,我已将其设置为我的 Linux 机器本地对应的 IP 地址。我将 UDP 和 TCP 设置为允许

  • 由于我使用的是 ubuntu,因此我使用 ufw 设置规则以允许防火墙的端口 [x]

  • 检查我的 ssh 是否正在运行,每次检查时它都显示“处于活动状态”

  • 这是我使用的 ssh 命令ssh -i [.../mykey] [username]@[wan ip] -p [y]

我尝试使用 VPN 隧道连接到我的家并像在本地一样工作。它有效,但它与我的所有设备都不兼容。因此,我正在寻找一种不使用 VPN 即可使用 ssh 进行连接的方法。

笔记:

  • 当使用我的公共 IP 时它不起作用,目前我使用公共 IP 进行测试的方式是将我的笔记本电脑连接到我的手机网络。
  • 我的笔记本电脑的公钥已在主机的 authorized_keys 中注册
  • 我使用以下方法检索了我的公共 IPcurl ifconfig.me
  • 我最初是在 stackoverflow 上问这个问题的,但过了一段时间后,我觉得 ubuntu 的 stack exchange 更合适,所以我把它移到了这里。

答案1

我已修复此问题。原来我的 ISP 使用 CGNAT 作为其网络,这对我来说有点“隐藏”,因为 ISP 使用唯一端口映射到我的 IP 地址。因此,如果不知道 ISP 分配的唯一端口,我就无法真正连接到我的网络。

为了解决这个问题,我关闭了 CGNAT 选项,幸好我的 ISP 为我提供了关闭该选项的选项。

希望这个答案能够帮助将来遇到此问题的任何人。

相关内容