frp内网穿透使用详解
条评论frp是内网穿透的一套解决方案,分为服务端frps和客户端frpc,通过在具备公网IP的机器上部署frps服务端,然后在内网机器上部署frpc客户端并主动连接服务端,这样就能够打通内外网了。数据首先会经过服务端,然后通过服务端的解析和转发,传输到客户端,客户端接收到信息处理完成之后,再反馈给服务端。
frps服务端一键安装脚本
脚本说明:MvsCode/frps-onekey
安装脚本使用方法:
1 | wget https://raw.githubusercontent.com/MvsCode/frps-onekey/master/install-frps.sh -O ./install-frps.sh |
建议是在centos 7.0上使用,不建议在centos 7.8上使用,本人来centos 7.8使用时出现不能通过域名访问dashboard的情况
安装过程中的配置说明
- BindPort:首先是配置BindPort,这个是frp客户端连接frps服务端的端口号,默认5443即可
- HttpPort:配置的是http的端口,默认是80,如果你用来做网站内网穿透的话,保持默认80即可,但是如果VPS上已经安装了Nginx或其他网站服务器,又或者安装了trojan或v2ray的其他程序,占用了80端口,需要更换为其他的端口,如8080
- HttpPorts:和HttpPort类似的,默认是443,如果被占用了,需要更换为其他端口,如8443
- Subdomain Host:默认用IP表示即可(无web服务需求的话)
- Token:这个配置的是frp连接frps所需的令牌号,默认或者自定义均可
- 另外,还有管理面板的端口、账户、密码等,可以在外网通过
http://IP或者域名:面板端口的方式访问面板对frp进行查看和管理 - 最后,安装完成后注意保存配置信息(也可以在管理面板查看)
安装后可以使用
frps {start|stop|restart|status|config|version}进行管理
可以使用ps -aux | grep frps查看启动参数,其中包含了frps的配置文件路径
可以使用netstat -ntpl查看frps监听端口情况
openwrt中使用frpc远程管理路由器
- 在openwrt中,如果已经安装有frpc固件,可以根据frps的配置信息进行配置连接,包括服务器IP或域名、frps端口bindport、令牌token、http穿透服务器端口httpport、https穿透服务器端口httpsport等
- 然后添加服务,其中,frp协议为http、域名类型自定义,然后填上frps绑定好的域名或者IP,内网主机地址指向openwrt路由的内网地址,内网主机端口填80
- 在外网中,打开浏览器输入http://
域名或ip:http穿透端口来访问路由器管理web
frpc客户端下载和使用
https://github.com/fatedier/frp/
frpc配置文件说明
配置参数官方说明可以查看frpc_full.ini和frps_full.ini文件,其中frpc_full.ini是客户端的,frps_full.ini是服务端的
这里挑重点的来讲,在frpc.ini客户端配置文件中,首先是配置[common]的参数,一般包括frp服务器的ip域名和端口,以及token认证等
其次,就是其他的[section]了,其中section的名称需要取全网唯一的,因为frps中,会以这个段名称来做服务管理的唯一标识(如果是公共的frp服务,建议是带一个唯一的前缀,如wudics-web-01)
1 | [common] |
单台内网机器配置多web服务
与nginx、apache等一样,存在两种情况
- 一种是多个端口的方式,每个端口对应一个网站,这一种很好理解,如使用,IP:不同端口,域名:不同端口,来访问网站
- 另一种是只有一个端口,如80端口,这种方式就是通过虚拟主机和域名绑定的方式来做的,不同域名分别绑定不同虚拟主机的网站(典型的如phpstudy和宝塔的管理方式)
还有一种是有多台服务器,这就需要综合subdomain、custom_domains、以及不同IP和PORT来灵活配置了
多个端口的方式
1 | [common] |
可以看出,每个web的[section]都不相同,其中每个web的remote_port也不相同,其实这种方法就是通过remote_port来让外网用户通过不同的端口来访问内网web,例如gmgoodmorning.xyz:18080就会访问到内网的127.0.0.:8080的web
ps:
local_ip = 127.0.0.1是可以不设置的,如果留空的话,那么默认就是本机IP,同样,你可以指定内网中的其他机器,这样只要一台内网中的机器连接了frps服务端,就可以通过这台内网的机器来分发服务请求了
多个域名的方式
这种方式中,所有网站都会使用同一个端口,如80或者443端口,这也是常用的方式
这里就需要根据实际情况,来配置客户端的subdomain和custom_domains参数,那么这里就有两种情况了
客户端使用subdomain的情况
什么时候使用subdomain呢?这种方式,需要2个前提条件
- frps服务端配置了
subdomain_host一级域名,如gmgoodmorning.xyz - 一级域名将
@主域名 和*泛域名 都解析到 frps服务端的IP地址
在上述的一级域名解析中,解析 @ 主域名的作用就是使得我们的客户端frpc可以通过gmgoodmorning.xyz连接到服务端frps(如果不需要域名访问来连接frps服务端或者访问frps管理面板的话,其实是可以不用绑定主域名到frps服务器IP的,只绑定泛域名是不影响web服务的内网穿透的)
而解析 * 泛域名的作用就是让除了已经解析子域名外的所有子域名的IP都指向frps服务端,这样做的用途就是方面自定义web的域名
这样子,客户端frpc就可以随时配置subdomain参数来自定义web的域名了,同时,frpc会把自定义的subdomain发送到frps服务端注册绑定,frps服务端就会根据域名来做识别,在收到请求后会找到对应的web转发请求
1 | [common] |
在单台电脑中,通过绑定不通域名的方式,搭建2个web网站,一个绑定的域名是v1.gmgoodmorning.xyz,另一个绑定的域名是v2.gmgoodmorning.xyz,其中gmgoodmorning.xyz是frps服务端配置的subdomain_host的域名(前提是gmgoodmorning.xyz的 * 泛域名已经解析到了frps服务端IP上)
通过这样子的配置,就可以通过http://v1.gmgoodmorning.xyz访问web-v1了,同时,也能够通过http://v2.gmgoodmorning.xyz访问web-v2,可以看出两个网站使用了80端口
这种情况的好处就是,在你搭建公共的frps服务端提供给其他用户使用时,可以地给这些用户提供免费的二级域名,如v1、v2
注意:subdomain只需要填写二级域名,不需要填写host部分(这部分是在服务端的subdomain_host来配置的),如配置v1即可,frps会对前后两部分进行拼接
客户端使用custom_domains的情况
重要的事情说在前面:
- custom_domains是可以配置多个域名的,例如
custom_domains=aaa.com,www.aaa.com,bbb.com,中间使用英文的,隔开 - custom_domains的值不能与frps服务端的
subdomain_host相同,否则运行frpc会报错 - custom_domains指定的域名,如aaa.com,www.aaa.com,bbb.com等域名,需要解析到frps服务端的IP地址
通过custom_domains,可以配置一级域名如aaa.com,同时也可以配置二级域名www.aaa.com,当然也可以配置其他不同的域名bbb.com
例如,通过下边的配置,就会有这样的效果,用户通过浏览器访问aaa.com时,就会访问到绑定了aaa.com的虚拟主机的web
其原理过程就是,因为aaa.com解析到frps服务端的IP,通过浏览器访问aaa.com时,浏览器会把请求信息发给frps服务端,服务端根据访问的域名aaa.com,找到对应的frpc客户端,然后将请求转发给frpc客户端,frpc客户端收到请求信息后,将请求转发给nginx或者apache等80端口的web服务,nginx或者apache解析出请求信息中的aaa.com,然后找到对应的虚拟主机web来响应请求
1 | [common] |
ps:当然,你也可以同时配置
subdomain和custom_domains参数
1 | [common] |
多台内网机器配置多web服务
多台和单台本质上是一样的,值得注意的是type=http的web服务,其[section]应该是全网唯一的,最好是加一个个性化的前缀,来区别全网的服务
这样做,就可以避免在使用公共的frps服务时,与其他人的[section]相同,导致冲突
在家庭宽带的环境中,如果你的路由器是openwrt这种软路由,就可以在openwrt软路由上使用frpc客户端,然后通过路由器的frpc客户端连接到frps服务端,并对外网的请求进行统一的转发,这样做就不需要每台电脑都装frpc客户端,也解决了一些设备没办法装frpc客户端的问题
在堡塔bt中使用frp
- 安装堡塔bt之后,登录ssh后可以使用命令bt查看和管理堡塔面板
- 下载linux版本的frp安装包,通过堡塔面板上传并解压到
/root/frp文件夹,配置frpc.ini或frps.ini - 在堡塔应用商城中,安装
堡塔应用管理器并添加frpc或者frps应用启动(客户端frpc、服务端frps) - 通过堡塔面板
安全开放防火墙端口,以frpc客户端为例,开放端口包括堡塔面板端口8888、ssh端口22、http端口80、https端口443等(根据实际情况开放端口) - 如果是frps服务端,除了frpc开放的端口外,还需要开放frps连接端口
5443、frps面板端口6443等(根据实际情况开放端口)
客户端frpc配置文件
客户端配置文件frpc.ini如下:
1 | [common] |
客户端frpc启动方式
在堡塔应用管理器中添加frpc,启动配置如下:

启动之后,可以通过bt.hellonoob.net访问堡塔面板,可以通过www.hellonoob.net访问网站
通过putty可以连接ssh,IP地址是hellonoob.net,端口是17022