一、背景
想在外网【我的电脑】,远程用校园网局域网内部的【内网主机】GPU来运行代码。所以使用frp工具,利用【云服务器】作为跳板,最终实现内网穿透并远程ssh连接内网主机。
二、内网穿透原理
假设公网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
,出现下图则表示服务端开启成功
客户端
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
,出现下图则表示客户端开启并连接成功
四、连接指令
启动好之后,就可以用ssh软件或者命令行远程连接内网主机:
命令行连接(IDE用到)
ssh 内网主机用户名@云服务器公网IP -p remote_port
本例中为:
ssh oyxy2019@x.x.x.x -p 6000
然后输入密码或密钥即可连接,这里的密码指的是内网主机的密码,不是云服务器的密码。
SSH软件连接
连接配置如下:
连接成功:
五、后台运行
如果想要后台运行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