使用ssh从外网访问内网

一、场景如下:

  各个角色的对应关系如下:

角色描述
APP   个人笔记本,属于内网IP  
sshd server   公网 VPS ( 映射端口: port 2222 ),拥有公网IP  
ssh client   内网机器,属于另一个内网IP  
APPSRV  

与 内网 ssh client 是同一台机器 ( 目的端口: hostport 22 )

 

  两个帐号:admin/password为“内网机器”ssh的登录帐号密码,VPS-user/password为“公网VPS”ssh的登录帐号密码

  网络连通情况:“内网机器”可以访问公网VPS,“个人笔记本”可以访问“公网VPS”,但是不可以访问“内网机器”;“公网VPS”不能访问“内网机器”,也不能访问“个人笔记本”

二、目标:实现私网的笔记本访问另一个私网的“内网机器”

三、思路:建立反向代理,把访问公网VPS某个端口的流量映射到“内网机器”的某个端口;然后建立正向代理,把“个人笔记本”对“内网机器”的访问流量、访问请求,通过代理发给“VPS”的那个映射端口

四、步骤:

  1、反向代理:“公网VPS”===>"内网机器",通过内网机器反向连接VPS

  在内网机器上配置:(ssh clinet) # ssh -CfnNT -R 2222:localhost:22 VPS-user@VPS

           (ssh clinet) # ssh -p 22 -qngfNTR 6666:localhost:22 VPS-user@VPS

  这样就把“内网机器”的22端口转发到了远程机器(VPS)的6666端口上

  查看内网机器的进程

  [ssh clinet ~]# ps aux | grep "ssh -p"
  root     14594  0.0  0.0  59856  1056 ?        Ss   11:16   0:00 ssh -p 22 -qngfNTR 6666:localhost:22 VPS-user@VPS

  查看公网VPS的端口情况,注意端口6666,只有本地环回地址可以访问

  [sshd server ~]# netstat -anpt | grep 6666
  tcp        0      0 127.0.0.1:6666              0.0.0.0:*                   LISTEN      10703/sshd

  这时候,在公网VPS上就可以通过ssh连接内网机器,打通了“公网VPS”到“内网机器”的访问通道

  [sshd server ~]# ssh -p 6666 admin@localhost
  admin@localhost\'s password:

  输入“内网机器”ssh帐号的密码“password”,就可以在公网VPS上实现到内网机器的ssh连接

  2、正向代理:“个人笔记本”===>“公网VPS”

  在“个人笔记本”上配置:[App ~] # ssh -p 6666 -qngfNTD 6767 VPS-user@VPS,这样,访问“个人笔记本”本机(127.0.0.1)端口6767的流量就流向了“内网机器”

  但是目前,上面配置是不生效的,因为“公网VPS”的端口6666,只允许它自己访问。解决办法有两个:

  a、思路:修改“公网VPS”的配置sshd_config,使其建立的SSH端口供所有IP访问

     方法:把“公网VPS”配置文件/etc/ssh/sshd_config里的配置“GatewayPorts no”修改为“GatewayPorts yes”,重新执行步骤1,执行完查看“公网VPS”的6666端口如下

    [sshd server ~]# netstat -anpt | grep 6666
    tcp        0      0 0.0.0.0:6666              0.0.0.0:*                   LISTEN      10703/sshd

  b、思路:不修改“公网VPS”的配置sshd_config,仍然采用默认配置“GatewayPorts no”,在“公网VPS”上增加一个本地端口映射,使新增加的端口供所有IP访问,或者供特定的IP访问

     方法:在“公网VPS”上配置:[sshd server~] # ssh -fCNL *:6667:localhost:6666 localhost,这一步执行需要“公网VPS”的root帐号密码

     查看“公网VPS”的进程和端口情况:

     [sshd server ~]# netstat -anpt | grep 6667
     tcp        0      0 0.0.0.0:6667              0.0.0.0:*                   LISTEN      1073/sshd

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgffdw.html