【frp内网穿透】利用云服务器实现远程ssh连接内网主机

【frp内网穿透】利用云服务器实现远程ssh连接内网主机

oyxy2019 562 2023-03-18

一、背景

1.png

想在外网【我的电脑】,远程用校园网局域网内部的【内网主机】GPU来运行代码。所以使用frp工具,利用【云服务器】作为跳板,最终实现内网穿透并远程ssh连接内网主机。

二、内网穿透原理

frp.jpg

假设公网ip为x.x.x.x,内网主机的ip为y.y.y.y。我们需要在云服务器上运行FRP服务端(frps),在内网主机上运行FRP客户端(frpc)。这个过程涉及3个端口:

  • 监听端口(bind_port):用于frpc连接frps的端口
  • 远程端口(remote_port):内网主机暴露给外网的端口
  • 本地端口(local_port):不需要设置,取决于内网主机的应用程序的端口

云服务器的防火墙只需要放开bind_port即可。

三、内网穿透工具-FRP

接下来,我们就需要利用FRP实现内网穿透。具体操作可分为服务器端和客户端。

下载FRP

服务器端和客户端都需要下载FRP,以Linux系统为例:

 wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz
 tar xzvf frp_0.38.0_linux_amd64.tar.gz

更多操作系统或版本的下载地址

服务器端

1、ssh连接云服务器
2、下载解压 FRP
3、进入解压后的文件夹内,修改服务端配置文件 frps.ini

$ cat frps.ini

[common]
bind_port = 7000		# 服务器默认监听 7000 端口,可修改。

4、启动FRP服务端
命令行输入:./frps -c ./frps.ini,出现下图则表示服务端开启成功

3.png

客户端

1、需找别人或用其他远程方式操作内网主机
2、下载解压 FRP
3、进入解压后的文件夹内,修改客户端配置文件 frpc.ini

$ cat frpc.ini

[common]
server_addr = x.x.x.x		# 公网 IP
server_port = 7000		# 与上面服务端监听的端口相同

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000		# 客户端指定的remote_port

4、启动FRP客户端
命令行输入:./frpc -c ./frpc.ini,出现下图则表示客户端开启并连接成功

4.jpg

四、连接指令

启动好之后,就可以用ssh软件或者命令行远程连接内网主机:

命令行连接(IDE用到)

ssh 内网主机用户名@云服务器公网IP -p remote_port
本例中为:
ssh oyxy2019@x.x.x.x -p 6000
然后输入密码或密钥即可连接,这里的密码指的是内网主机的密码,不是云服务器的密码。

SSH软件连接

连接配置如下:

6.png

连接成功:

5.jpg

五、后台运行

如果想要后台运行frp可以执行:
1)服务端:

nohup ./frps -c frps.ini >/dev/null 2>&1 &

2)客户端:

nohup ./frpc -c ./frpc.ini >/dev/null 2>&1 &

如果想要终止进程:
1)先找到进程:

ps -aux|grep frp| grep -v grep

2)然后再杀掉进程即可:

kill -9 【进程号】

六、其他

frp内网穿透不仅可以用于ssh,还可以用于其他很多如数据库。
如果客户端frpc是windows系统的话,还可以用一些图形化界面的软件,链接

参考

https://blog.csdn.net/weixin_42265958/article/details/106008837
https://zhuanlan.zhihu.com/p/612377399