[保姆级教程] 解决不同局域网电脑无法SSH的问题

发布于:2025-07-06 ⋅ 阅读:(16) ⋅ 点赞:(0)

两台在不同局域网(LAN)但都能上网的电脑,无法直接通过各自的内网IP(如 192.168.1.10)进行SSH连接,因为这些IP地址只在它们各自的局域网内有效。

要解决这个问题,核心思想是需要一个双方都能访问的“中间人”或“公共地址”。互联网就是这个桥梁。

下面我将为你介绍几种常用且有效的方法,从易到难,各有优劣。


基本概念

在开始之前,我们先明确几个角色:

  • SSH服务器:你想要被连接的电脑。这台电脑上需要安装并运行SSH服务(通常是OpenSSH Server)。
  • SSH客户端:你用来发起连接的电脑。这台电脑上需要有SSH客户端工具(Linux/macOS自带,Windows可使用PowerShell、PuTTY或Windows Terminal)。

方法一:端口转发 (Port Forwarding) - 最经典的方法

这是最传统、最直接的方法,前提是你能够控制SSH服务器所在局域网的路由器

  • 原理
    在SSH服务器所在的局域网路由器上设置一条规则:“所有访问路由器某个特定端口(如 2222)的外部请求,都转发到局域网内SSH服务器的 22 端口上”。这样,SSH客户端只需要连接到路由器的公网IP和那个特定端口,就能访问到内部的电脑。

  • 优点

    • 设置好后连接稳定,速度快(直接点对点通信)。
    • 无需依赖第三方服务。
  • 缺点

    • 必须有路由器的管理权限
    • SSH服务器所在网络的公网IP必须是可访问的(部分运营商提供的是内网IP,无法从外部访问)。
    • 如果公网IP是动态变化的,需要配合 DDNS (动态域名解析) 使用,否则每次IP变动都需要重新查询。
    • 将端口暴露在公网有一定安全风险。
  • 操作步骤

    1. 在SSH服务器上

      • 确保已安装并启动SSH服务。
      • 设置一个静态的内网IP地址(如 192.168.1.100),防止DHCP分配的IP地址变化导致转发失效。
      • 查看防火墙设置,确保 22 端口是开放的。
    2. 获取公网IP

      • 在SSH服务器的网络中,打开浏览器访问 ip.sbwhatismyip.com 等网站,记下显示的公网IP地址。
    3. 在路由器上设置端口转发

      • 登录到SSH服务器所在网络的路由器管理界面(通常是 192.168.1.1192.168.0.1)。
      • 找到“端口转发”、“虚拟服务器”或“Port Forwarding”等菜单。
      • 添加一条新规则:
        • 外部端口 (或服务端口)2222 (建议不要用默认的22,以增加安全性)
        • 内部端口 (或私有端口)22
        • 内部IP地址 (或IP地址)192.168.1.100 (你为SSH服务器设置的静态内网IP)
        • 协议TCP
      • 保存并应用设置。
    4. 在SSH客户端上连接

      • 打开你的终端或SSH工具。
      • 使用以下命令进行连接:
        # 格式: ssh -p [外部端口] [用户名]@[路由器的公网IP]
        ssh -p 2222 your_username@123.45.67.89 
        
        其中 your_username 是SSH服务器上的用户名,123.45.67.89 是你查到的公网IP。

方法二:使用内网穿透工具 (Tunneling) - 最简单方便的方法

对于不想或不能配置路由器的用户来说,这是最简单的方法。这类工具的原理是,两台电脑都主动连接到一个公共的服务器,然后这个公共服务器负责在它们之间“中继”数据。

  • 优点

    • 无需配置路由器,无视网络环境的复杂性。
    • 通常几条命令就能搞定,非常方便。
    • 对公网IP类型没有要求。
  • 缺点

    • 依赖第三方服务,连接速度和稳定性受限于服务商。
    • 免费服务通常有带宽和连接时长的限制。
常用工具推荐:

1. ngrok

  • 简介:非常知名的内网穿透工具,简单易用。
  • 操作步骤
    1. 在SSH服务器上
      • ngrok官网 注册一个账号。
      • 下载并解压 ngrok。
      • 根据官网提示,配置你的 authtoken./ngrok authtoken [你的Token]
      • 运行以下命令,将本地的22端口暴露出去:
        ./ngrok tcp 22
        
    2. 查看ngrok提供的地址
      • 运行后,ngrok的终端界面会显示一个公网地址,例如 tcp://0.tcp.ngrok.io:12345
    3. 在SSH客户端上连接
      • 使用ngrok提供的地址和端口进行连接:
        # 格式: ssh -p [端口] [用户名]@[ngrok提供的域名]
        ssh -p 12345 your_username@0.tcp.ngrok.io
        

2. ZeroTier

  • 简介:它创建一个虚拟的局域网(SD-WAN),让加入这个网络的设备感觉就像在同一个局域网内一样,可以直接用虚拟IP互相访问。
  • 操作步骤
    1. ZeroTier官网 注册并创建一个私有网络 (Private Network),你会得到一个 Network ID
    2. SSH服务器SSH客户端两台电脑上都安装ZeroTier客户端。
    3. 两台电脑都使用 zerotier-cli join [你的Network ID] 命令加入你创建的网络。
    4. 回到ZeroTier官网的管理页面,你会看到两台设备等待授权,勾选它们前面的 Auth? 复选框。
    5. 授权后,ZeroTier会为每台设备分配一个虚拟IP地址(如 10.147.17.x)。
    6. 现在,你可以直接在SSH客户端上,使用SSH服务器的ZeroTier虚拟IP进行连接了:
      ssh your_username@10.147.17.100
      

方法三:反向SSH隧道 (Reverse SSH Tunnel) - 最高级的技巧

如果你的SSH客户端有一台拥有公网IP的服务器(或可以通过端口转发访问),而SSH服务器处于一个严格限制的网络中(无法配置路由器),这个方法就非常有用。

  • 原理
    让被访问的SSH服务器主动发起一个连接到SSH客户端(或一个公网服务器,我们称之为“中介服务器”),并在这个连接上建立一个“反向通道”。之后,客户端就可以通过这个通道“回头”访问服务器。

  • 优点

    • 可以穿透最严格的防火墙,因为连接是由“内部”主动发起的。
    • 非常灵活和强大。
  • 缺点

    • 概念上比较复杂。
    • 需要一台拥有公网IP的中介服务器(可以是你的SSH客户端,也可以是云服务器)。
  • 操作步骤(假设你有一台公网服务器 jump.server.com 作为中介):

    1. 在SSH服务器上(被访问的电脑):

      • 执行以下命令,连接到中介服务器,并建立反向隧道:
        # 格式: ssh -R [中介服务器端口]:localhost:[本地SSH端口] [中介服务器用户]@[中介服务器地址]
        ssh -R 8888:localhost:22 jump_user@jump.server.com
        
        • -R 表示反向隧道。
        • 8888:在中介服务器上监听的端口。
        • localhost:22:将请求转发到本机(SSH服务器)的22端口。
        • 这个命令需要保持运行。
    2. 在中介服务器上操作

      • 现在,登录到中介服务器 jump.server.com
      • 你会发现 8888 端口正在被监听。从这台服务器上,你可以通过访问自己的 8888 端口来连接到远端的SSH服务器:
        ssh -p 8888 your_username@localhost
        
        这里的 your_usernameSSH服务器上的用户名。
    3. 如果你想从SSH客户端直接连接

      • 你可以先SSH到中介服务器,再执行第二步的操作。
      • 或者配置SSH跳转(ProxyJump),一步到位:
        在你的SSH客户端(~/.ssh/config)中添加配置:
        Host my-remote-pc
            HostName localhost
            Port 8888
            User your_username
            ProxyJump jump_user@jump.server.com
        
        然后你就可以直接用 ssh my-remote-pc 连接了。

总结与推荐

方法 优点 缺点 适用场景
端口转发 性能好,稳定,无第三方依赖 需要路由器权限,需要公网IP,有安全风险 长期、稳定的家庭或办公室服务器访问。
内网穿透 (ngrok) 极其简单,无需任何配置 依赖第三方,免费版有限制 临时调试、快速分享、初学者入门。
虚拟局域网 (ZeroTier) 简单,安全,像在局域网一样方便 依赖第三方,需要安装客户端 需要连接多台设备,构建安全的私有网络。
反向SSH隧道 功能强大,可穿透严格防火墙 概念复杂,需要一台公网服务器 SSH服务器网络环境受限,但你有公网服务器资源。

给你的建议:

  • 如果你是初学者或想快速解决问题:强烈推荐 ZeroTierngrok。ZeroTier更适合长期使用,因为它创建了一个稳定的虚拟网络。
  • 如果你想拥有完全的控制权,并且不介意折腾路由器:选择 端口转发。记得配合DDNS和增强SSH安全(如使用密钥登录、修改端口、禁用密码登录)。
  • 如果你是高级用户,且场景特殊:可以研究 反向SSH隧道