情景描述:
服务器在学校,无公网ip,但是可以连上外网。我想用我的外网笔记本连接校内服务器。
条件:
由于我们自己使用的电脑未必有外网IP,因此我们需要一个有固定外网IP的服务器(随便搞个腾讯云、阿里云的小机子就行),
然后用这台服务器与内网的机子进行通信,如果要用shell登录内网服务器,我们到时候要先登陆自己的服务器,
然后再利用这个服务器去访问内网的主机。
总结:
机器1:学校内网服务器
机器2:百度云公网服务器
机器3:个人笔记本
方法一:利用frp
根据对应的操作系统及架构,从 Release 页面下载最新版本的程序。
将 frps 及 frps.ini 放到具有公网 IP 的机器上。
将 frpc 及 frpc.ini 放到处于内网环境的机器上。
- 修改 frps.ini 文件,这里使用了最简化的配置:
# frps.ini
[common]
bind_port = 7000
- 启动 frps:
./frps -c ./frps.ini
- 修改 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
- 启动 frpc:
./frpc -c ./frpc.ini
- 使用个人笔记本通过 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操作文件。