搭建frp用作内网SSH穿透
步骤
- 从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 # 链接口令
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
4.客户端和服务端的版本不一致
我自己frpc无法链接时,经检查问题出在原因2,使用google cloud compute engine,防火墙设置不对,导致6000端口无法访问。
总结
- 通过自建frp可以安全地完成内网穿透;
- 整体的速度与vps、内网机器相关;
- 流量都要经过vps转发,因此不适合传输大型的计算结果。