情况:
图形工作站放在实验室,处于教育网内,无公网ip;在寝室的mac想要SSH链接到工作站跑深度学习
需求:
公网ip的vps一台
步骤
- 从github下载最新的frp二进制文件(目前最新为0.21版本)。其中frps,frps.ini为服务端,供vps使用;frpc,frpc.ini为客户端,供内网的工作站使用
- 设置frps.ini,并vps上运行 ./frps -c frps.ini,注意frps需要持续运行,可以参考我之前的文章,使用screen后台运行frps
# frps.ini
[common]
bind_port = 7000 #frps服务监听的端口
token = 123 # 链接口令
- 设置frpc.ini,并在工作站上运行,./frpc -c frpc.ini,同样,记得后台运行
# frpc.ini
[common]
server_addr = x.x.x.x # 此处为 vps 的公网ip
server_port = 7000 # vps上frps服务监听的端口
token = 123 # 链接口令
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22 # 需要暴露的内网机器的端口
remote_port = 6000 # 暴露的内网机器的端口在vps上的端口
- 在需要登录工作站时,使用ssh -p 6000 user@vps.ip,-p 6000表示ssh链接vps.ip上的6000端口,对应着frpc.ini中的设定,因此会直接被frps转发到内网工作站的127.0.0.1的22端口,即内网工作站的sshd端口上
注意的坑
frpc和frps运行成功后都会显示success信息,通常frps端运行不会有问题,但frpc可能无法链接上。
原因可能在于:
- 内网无法链接公网
- 内网系统的防火墙阻止了对外网的6000端口访问
- 公网运营商限制了6000端口的访问(少见)
- vps运营商的防火墙阻挡了对vps的6000端口的访问
- vps系统的防火墙阻止了对自己6000端口的访问
排除方法:
- 内网ping vps的ip,如果成功,则排除原因1
- 使用不同电脑wget探测vps的6000端口,wget vps.ip:6000,如果没有回应,则说明vps的防火墙或是vps运营商的防火墙设置有问题
- 以上都不满足,则原因在于2和3
我自己frpc无法链接时,经检查问题出在原因4,使用google cloud compute engine,防火墙设置不对,导致6000端口无法访问。
总结
通过自建frp可以安全地完成内网穿透;
整体的速度与vps、内网机器相关;
流量都要经过vps转发,因此不适合传输大型的计算结果。