一个Frps带多个Frpc

Frp在OpenWrt系统中的应用一文中,我们讲解了Frps服务器端的安装及设置,以及OpenWrt系统下Frpc客户端的安装及设置,是一对一的关系。但如果我们有多个客户端需要进行内网穿透的话,是不是需要设置多个Frps服务器端?如果是的话,那成本就有点高了,因为大家知道Frps服务器端是需要有公网地址的,而一般来说获取公网地址都是要支付费用的,所以多一个Frps通常就会多一份费用。那是否可以一个Frps带多个Frpc呢?回答是肯定的!今天我们就来讲解一下一个Frps带多个Frpc的具体实施方法。

1、设置

以两个客户端都要设置SSH服务为例(注:客户端设置中与服务器信息相关的部分略去,因为设置是一样的):

路由器1中 /etc/config/frpc 与SSH服务相关的配置如下:

config rule 'ssh_proxy'
    option name 'ssh'
    option type 'tcp'
    option local_ip '127.0.0.1'
    option local_port '22'
    option remote_port '6000'

那路由器2设置SSH服务时,是不是只要将远程服务端口改成与6000端口不一样就可以了呢?例如:改成6001:

config rule 'ssh_proxy'
    option name 'ssh'
    option type 'tcp'
    option local_ip '127.0.0.1'
    option local_port '22'
    option remote_port '6001'

即在Luci界面设置如下:

一个Frps带多个Frpc-1

2、问题分析

按以上方式设置之后,你会发现登录远程的6001端口,并不能进入路由器2的SSH服务,即22端口。

那问题出在什么地方呢?查frp源码你可以发现frps不是以端口号来区分不同的客户端的,而是以代理服务的名称来区分的。上面的设置中,虽然路由器1的SSH服务远程端口是6000,路由器2的SSH服务远程端口为6001,但是它们的代理名称Proxy Name都是ssh,所以路由器1设置有效,路由器2的设置是无效的。

3、重新设置

因此我们需要修改一下路由器2的代理名称,例如,就改为“ssh1”:

config rule 'ssh_proxy'
    option name 'ssh1'
    option type 'tcp'
    option local_ip '127.0.0.1'
    option local_port '22'
    option remote_port '6001'

如果采用Luci配置时,在“Rules”子项目的“Proxy Name”栏输入框内点下拉菜单后选“Custom”用户自定义,输入“ssh1”回车即可。

一个Frps带多个Frpc-2

设置完成后,路由器2的SSH服务内网穿透测试完全正常(注:利用WinSCP,设置远程服务器及6001端口号访问)。

其它的像web服务、ftp服务等也都可以同样的方法进行设置,一个Frps带多个Frpc功能实现!!