基础使用
自建frp需要部署服务端与客户端,服务端类似于跟花生壳服务端,ngrok服务端一样,暴露出通信端口,客户端连接后进行通信
服务端
需要有公网ip,最合适的机器为云服务(阿里云/腾讯云)
客户端
本地的Linux虚拟机或者其他物理机
分别在服务端与客户端下载frp源码
wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gz
tar xzvf frp_0.33.0_linux_amd64.tar.gz
mv frp_0.33.0_linux_amd64 frp
服务端删除掉客户端相关配置
$ rm -f frpc frpc.ini frpc_full.ini
客户端删除掉服务端的相关配置
$ rm -f frps frps.ini frps_full.ini
查看客户端与服务端的默认配置项
# 服务端配置如下
[common]
bind_port = 7000 (这两个要一致,都是7000,或者别的端口号)
# 客户端配置如下
[common]
server_addr = xx.xx.xx.xx (云服务器ip)
server_port = 7000 (这两个要一致,都是7000,或者别的端口号)
[ssh] type = tcp
local_ip = 127.0.0.1 (客户端ip)
local_port = 22
remote_port = 6000
# 上述配置表示需要将云服务器的6000端口开放给客户端访问
启动服务端
$ nohup ./frps -c frps.ini &
启动客户端
$ nohup ./frpc -c frpc.ini &
ssh连接
$ ssh 用户名@云服务器ip:端口号
配置多个内网主机
错误的多客户端配置
使用一台阿里云的公网服务器,我们可以配置很多内网机器的 frp 内网穿透,公网服务器上只需要按照上述的配置一次即可,但是内网机器的配置稍有不同,如果使用了一样的配置则后添加的内网机器是无法连接上公网服务器的。这里假设另一台内网机器2的 frpc.ini 配置如下,来说明会遇到的问题:
$ vi frpc.ini
[common]
server_addr = xxx.xxx.xxx.xxx <==这里还是按照上面的假设,公网服务器的ip为xxx.xxx.xxx.xxx
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6001 <==remote_port设置为另一个值
两个内网主机的配置除了 remote_port 不一样之外,都是一样的。但是在内网机器2上运行 frpc 后,公网服务器的 nohup.out 中会记录一下的错误:
[W] [control.go:332] [280d36891a6ae0c7] new proxy [ssh] error: proxy name [ssh] is already in use
后来发现,frp 中是通过 [ssh] 这个名字来区分不同客户端的,所以不同的客户端要配置成不同的名字。
正确的多客户端配置
内网机器1和内网机器2的配置应该区分如下:
内网机器1:
[ssh] <==不同点
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000 <==不同点
内网机器2:
[ssh1] <==不同点
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6001 <==不同点
这样就可以了。