一、环境介绍
- 带公网的vps服务器A,需要穿透到的无公网目标电脑B,以及一台需要通过公网访问B的电脑C。
- frp 0.47.0:frp_0.47.0_linux_amd64.tar.gz
- 注意公网vps服务器A的防火墙加入规则同意服务端口开启!
二、配置过程
2.1 下载文件
去github下载frp:https://github.com/fatedier/frp/releases/download/v0.47.0/frp_0.47.0_linux_amd64.tar.gz(注:新旧版本的frp有差异,所以建议就下载这个版本)
2.3 服务器A的配置
(1)先解压,并如该目录
$ tar -xvf frp_0.47.0_linux_amd64.tar.gz
$ mv frp_0.47.0_linux_amd64 frp
$ cd frp
该目录的中有如下文件
├── frpc # 用于客户端B电脑的服务可执行文件
├── frpc_full.ini # 用于客户端B电脑的配置文件(完整版,我没用它)
├── frpc.ini # 用于客户端B电脑的配置文件(用的这个)
├── frps # 用于服务器A电脑的服务可执行文件
├── frps_full.ini # 用于服务器A电脑的配置文件(完整版,我没用它)
├── frps.ini # 用于服务器A电脑的配置文件(用的这个)
└── LICENSE
(2)A服务器下就应该配置frps.ini (这里可以原封不动)
[common]
bind_port = 7000
(3)现在开启服务器
./frps -c frps.ini
2.3 目标机B的配置
(1)同理下载和解压frp_0.47.0_linux_amd64.tar.gz到客户端
(2)配置frpc.ini文件
[common]
server_addr = 111.222.333.444 # 这是服务器A的公网地址(注意这个注释不能加入ini文件,要不然会出错)
server_port = 7000
tls_enable = true # 原本init文件没有这个,需要加入这一行,要不然要会报错见github的issue
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 4242 # 你希望通过服务器A的4242端口访问目标机B的22端口
(3)开启服务
./frpc -c frpc.ini
2.4 电脑C怎么用
在电脑C上直接访问服务器A的公网ip加4242端口号
ssh -p 4242 目标机B的用户名@服务器A的公网ip
三、问题汇总
- login to server failed: EOF
解决方案:https://github.com/fatedier/frp/issues/1986
大致意思就是要目标机B的配置文件要有tls_enable = true
这个配置,并且根据我的测试0.22.0版本加入这个依然无效,只要变成0.47.0版本就可以了,其他版本未测试过。