如何利用SSH反向隧道连接NAT网络内的机器

Requirement

如下图所示:
如何利用SSH反向隧道连接NAT网络内的机器
PC想要访问公司内部server提供的服务,但由于公司内网有限制措施(采用NAT,防火墙等),只允许公司内部机器访问外部网络,反之则不行。现在需要在公司外部通过PC访问内网,除了通过VPN外,也可以通过搭建SSH反向隧道实现。

Prerequisite

  1. 一台公共服务器当中转站(PC和公司内部网络的电脑都能访问)。
  2. 安装openssh。
  3. Mobaxterm -- option (非必须,功能十分强大的终端软件)

Usage

下面以Jerry遇到的问题为例子来描述:Jerry在公司内部有台Windows机器,上面装有ubuntu18.04的虚拟机,并且有一台云服务器,现在我想在家里用自己的Windows电脑通过SSH连接到公司内部的那台ubuntu虚拟机,连接步骤如下:

  1. Ubuntu默认安装了openssh client,现在要安装openssh server,运行如下命令:

    sudo apt install openssh-server
  2. 编辑sshd_config

    sudo vim /etc/ssh/sshd_config

    添加

    GatewayPorts clientspecified
  3. 重启ssh服务

    sudo service sshd restart

通过命令行或Mobaxterm进行连接

  • 命令行
    在ubuntu上运行如下命令,与云服务器搭建ssh反向隧道:
    假设云服务器的 ip为1.1.1.1,云服务器能被访问的端口为 55555

    sudo ssh -fN -R :55555:localhost:22 1.1.1.1

    注意:-f意味着ssh连接成功后将在后台运行,上面的命令实现了当外部 client访问云服务器的上述 port时,云服务器会将该端口转发到我的 ubuntu的 22端口,通过该方式我可以在公司外部通过ssh连接到我在公司内部的 ubuntu。若要确定反向隧道是否搭建成功,可先登录云服务器输入sudo netstat -nap | grep 55555,若是有类似如下的结果:

    tcp        0      1.1.1.1:55555           0.0.0.0:*               LISTEN      30149/sshd: root

    则说明反向隧道搭建成功,此时你可以在云服务器上直接输入:

    ssh -p 55555 <ubuntu_username>@1.1.1.1

    即可在云上直接通过ssh连接到我的ubuntu。注意上面的ubuntu_username为我的ubuntu登录用户名,而不是云服务器的用户名。

  • Mobaxterm
    选中Tunneling, 并选择New SSH tunnel,然后选中Remote port forwarding,具体如下:
    如何利用SSH反向隧道连接NAT网络内的机器
    上述的“Local server” 对应我在公司的ubuntu,“SSH server”对应我的云服务器,“Remote clients”对应公司外部的PC。配置完后再start该tunnel,即可实现与命令行一致的功能。

参考

  1. https://linux.cn/article-5975...
  2. https://hackertarget.com/ssh-...

ssh

相关推荐