情景描述:

服务器在学校,无公网ip,但是可以连上外网。我想用我的外网笔记本连接校内服务器。

条件:

由于我们自己使用的电脑未必有外网IP,因此我们需要一个有固定外网IP的服务器(随便搞个腾讯云、阿里云的小机子就行),

然后用这台服务器与内网的机子进行通信,如果要用shell登录内网服务器,我们到时候要先登陆自己的服务器,

然后再利用这个服务器去访问内网的主机。

总结:

机器1:学校内网服务器

机器2:百度云公网服务器

机器3:个人笔记本

 

方法一:利用frp

根据对应的操作系统及架构,从 Release 页面下载最新版本的程序。

将 frps 及 frps.ini 放到具有公网 IP 的机器上。

将 frpc 及 frpc.ini 放到处于内网环境的机器上。

  1. 修改 frps.ini 文件,这里使用了最简化的配置:
# frps.ini
[common]
bind_port = 7000
  1. 启动 frps:

./frps -c ./frps.ini

  1. 修改 frpc.ini 文件,假设公网 IP 为 x.x.x.x;
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
  1. 启动 frpc:

./frpc -c ./frpc.ini

  1. 使用个人笔记本通过 ssh 访问内网机器,假设用户名为 test:

ssh -oPort=6000 test@x.x.x.x

 

 

方法二:反向SSH

(1)准备好有固定IP的公网服务器A,以及待访问的内网机器B。两者都开着sshd服务,端口号默认都是22。顺便做好ssh免密码登陆。

(2)在内网主机B执行以下命令:

        $ ssh -NfR 1111:localhost:22 username@IP -p 22

 这条命令的意思是在后台执行(-f),不实际连接而是做port forwarding(-N),做反向ssh(-R),

将公网服务器A的1111端口映射成连接内网服务器B与该公网服务器A的反向ssh的端口22。

username是你登录服务器A的用户名,IP是服务器A的IP,然后输入登录服务器A的密码即可。
执行完这条命令,我们可以在服务器A上看到他的1111端口已经开始监听:

      $ ss -ant |grep 1111
      LISTEN  0  128    127.0.0.1:1111      *:*

(3)在上面的操作中,公网A的这个1111端口就已经映射成了内网主机B的22端口了,现在我们只要ssh到自己的这个端口就行了。首先用secureCRT登录服务器A,然后在服务器A中执行:

     $ ssh username@localhost -p1111

ssh本机的1111端口就相当于ssh内网服务器B的22端口,成功的登陆了内网的主机了。

 

方法三:holer

需要付费,免费的不稳定,比nat123速度快。有时候连不上。

方法四:nat123 

亲测,需要付费,免费的很慢

 

 

总结:

最好的办法是方法一,可以使用mobaxterm操作文件。