搭建frp用作内网SSH穿透

情况

图形工作站放在实验室,处于教育网内,无公网ip;在寝室的mac想要SSH链接到工作站跑深度学习


需求

公网ip的vps一台


步骤

  1. github下载最新的frp二进制文件(目前最新为0.21版本)。其中frps,frps.ini为服务端,供vps使用;frpc,frpc.ini为客户端,供内网的工作站使用
  2. 设置frps.ini,并vps上运行 ./frps -c frps.ini,注意frps需要持续运行,可以参考我之前的文章,使用screen后台运行frps
# frps.ini
[common]
bind_port = 7000 #frps服务监听的端口
token = 123 # 链接口令

3. 设置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上的端口

4. 在需要登录工作站时,使用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可能无法链接上。

原因可能在于:

1. 内网无法链接公网

2. 内网系统的防火墙阻止了对外网的6000端口访问

3. 公网运营商限制了6000端口的访问(少见)

4. vps运营商的防火墙阻挡了对vps的6000端口的访问

5. vps系统的防火墙阻止了对自己6000端口的访问


排除方法:

1. 内网ping vps的ip,如果成功,则排除原因1

2. 使用不同电脑wget探测vps的6000端口,wget vps.ip:6000,如果没有回应,则说明vps的防火墙或是vps运营商的防火墙设置有问题

3. 以上都不满足,则原因在于2和3


我自己frpc无法链接时,经检查问题出在原因4,使用google cloud compute engine,防火墙设置不对,导致6000端口无法访问。


总结

  • 通过自建frp可以安全地完成内网穿透;
  • 整体的速度与vps、内网机器相关;
  • 流量都要经过vps转发,因此不适合传输大型的计算结果。


frp官方文档
发布于 2018-08-15

文章被以下专栏收录