1. frp简介
frp 是一款简单、高效的内网穿透工具,它支持多种代理类型以及 P2P 通信,为不同场景下的需求提供丰富的解决方案。
frp 支持 TCP、UDP、HTTP、HTTPS 等多种协议,并且还支持 P2P 通信;可以将内网服务以安全、便捷的方式通过具有固定公网 IP 地址的服务器进行中转,最终将服务映射到公网访问。
更多功能介绍参考官方文档:
https://gofrp.org/zh-cn/docs/
2. 安装配置frp服务端
2.1 测试环境
操作系统:CentOS7.6最小化安装;
服务说明:为了更好的模拟真实效果,本次使用一台腾讯云云服务器进行部署。
关于防火墙和SELinux;
2.2 下载frp
github地址:https://github.com/fatedier/frp/releases
当前下载版本:v0.59.0
下载地址:
https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz
2.3 部署frp
解压缩下载的压缩包。
tar -zxf frp_0.59.0_linux_amd64.tar.gz
将其中 frpc* 是客户端程序,需要拷贝到内网服务所在的机器上;
而 frps* 拷贝到具有公网 IP 的机器上,任意目录位置均可。
`mkdir /usr/share/frps``cp frp_0.59.0_linux_amd64/frps* /usr/share/frps/`
frps:启动程序
frps.toml:主配置文件
2.4 启动服务
需要将修改配置文件后再启动,这里只说明如何启动,后续为根据需求修改配置文件。
临时启动:
`cd /usr/share/frps``./frps -c .frps.toml #启动服务端`
使用systemd启动:
vi /etc/systemd/system/frps.service
#写入以下内容
`[Unit]``Description = frp server``After = network.target syslog.target``Wants = network.target`` ``[Service]``Type = simple``ExecStart = /usr/share/frps/frps -c /usr/share/frps/frps.toml`` ``[Install]``WantedBy = multi-user.target`
启动命令:
systemctl start frps
设置开机自启:
systemctl enable frps
服务启动后,默认监听7000端口,可以通过修改配置文件进行修改。
3. 安装配置frp客户端
3.1 客户端环境
操作系统:CentOS7.6最小化安装;
关于防火墙和SELinux;
穿透说明:访问服务端的8080端口,转发到客户端的80端口上。下文配置以服务端的IP地址+8080端口直接转发到客户端80端口上的业务,另一种是通过域名的形式,比如域名1访问客户端的80端口,域名2访问客户端的8080端口,前提是要配置好DNS,下面以配置hosts文件代替DNS配置。
3.2 下载frp
客户端与服务端使用的是同一安装包。
下载地址:
https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz
3.3 部署frp
解压缩下载的压缩包
tar -zxf frp_0.59.0_linux_amd64.tar.gz
内网服务器只需要拷贝 frpc* 文件即可。
`mkdir /usr/share/frpc``cp frp_0.59.0_linux_amd64/frpc* /usr/share/frpc/`
frpc:启动程序
frpc.toml:主配置文件
3.4 修改配置文件
vi /usr/share/frpc/frpc.toml
#修改后内容如下
`serverAddr = "43.133.213.44"``serverPort = 7000``auth.token = "Aa123456"`` ``[[proxies]]``name = "web01"``type = "http"``localPort = 80``customDomains = ["43.133.213.44"]`
重点参数说明:
auth.token:配置与服务端的连接密码,自定义;
3.5 启动服务
将客户端也配置为systemd启动:
vi /etc/systemd/system/frpc.service
#写入以下内容
`[Unit]``Description = frp client``After = network.target syslog.target``Wants = network.target`` ``[Service]``Type = simple``ExecStart = /usr/share/frpc/frpc -c /usr/share/frpc/frpc.toml`` ``[Install]``WantedBy = multi-user.target`
启动命令:
systemctl start frpc
设置开机自启:
systemctl enable frpc
3.6 修改服务端配置
vi /usr/share/frps/frps.toml
#修改后内容如下
`bindPort = 7000``vhostHTTPPort = 8080``auth.token = "Aa123456"`
auth.token:与客户端的密码要一致,自定义;
重启服务:
systemctl restart frps
4. 访问测试
在一台终端上frp服务端的IP地址+8080端口测试是否可以访问到内网服务器上的Web页面:
(1)在内网服务器上访问正常
(2)在一台客户端上使用浏览器访问正常
以IP+端口的形式配置穿透成功,这种方式端口一一对应。使用域名的方式,类似于虚拟主机,可以根据不同的域名访问到不同的页面。
5. 测试域名的形式穿透访问
在客户端上提前配置两个测试web页面:
我这里配置了基于端口的虚拟主机。
5.1 修改配置文件
修改客户端配置文件,服务端配置文件不需要修改。
vi /usr/share/frpc/frpc.toml
#修改后内容如下
`serverAddr = "43.133.213.44"``serverPort = 7000``auth.token = "Aa123456"`` ``[[proxies]]``name = "web01"``type = "http"``localIP = "192.168.211.101"``localPort = 80``customDomains = ["www.newcloud01.top"]`` ``[[proxies]]``name = "web02"``type = "http"``localIP = "192.168.211.101"``localPort = 8080``customDomains = ["www.newcloud02.top"]`
5.2 重启服务
systemctl restart frpc
5.3 配置Hosts文件
在hosts文件中增加以下行:
`43.133.213.44 www.newcloud01.top``43.133.213.44 www.newcloud02.top`
说明:我这里通过修改hosts文件实现域名解析。
5.4 访问测试
(1)在内网服务器上访问正常
(2)在一台客户端上使用浏览器访问正常
访问正常,http内网穿透配置成功,
6. 总结
frp其实还有很多用法,可以配置TCP、UDP端口穿透、穿透内网网站、配置web界面查看 frp 的状态以及代理统计信息等,更多玩法参考官方手册。