一.什么是frp

frp是一款免费开源的内网穿透套件。是client/server模式。

二.怎么获取frp

通过开源代码托管平台GitHub,即可获取frp工具。地址为 frp GitHub

三.frp使用准备

1.想要内网穿透,必须要有一台公网IP的主机(例如阿里云主机/腾讯云主机/百度云主机/或者其他)
2.下载frp,目前最新版为022
3.需要穿透的内网主机

四.frp安装配置

前面说了frp是client/server模式,下载下来的frp压缩包包含server以及client。

4.1首先安装配置frp server

server是安装到有公网IP的主机上的,
这里以Linux 64位系统为例子

登陆Linux系统,切换至root用户
获取022Linux版frp
wget https://github.com/fatedier/frp/releases/download/v0.22.0/frp_0.22.0_linux_amd64.tar.gz
下载完成后解压文件
tar -xzvf frp_0.22.0_linux_amd64.tar.gz
在解压的文件中找到frps.ini(server配置文件)
server最简配置为:
[common]
bind_port = 7000
以上配置即可启动,需要注意的是保证上方配置的端口未被其他应用使用
启动frp server
./frps -c ./frps.ini
看到success字样即启动成功。注意当前窗口不能关闭,如果需要后台启动,则命令为:
./frps -c ./frps.ini &

4.2安装配置frp client
client则是安装到内网机器上,这里同样以Linux 64位操作系统为例
登录内网主机,切换至root用户
获取022Linux版frp
wget https://github.com/fatedier/frp/releases/download/v0.22.0/frp_0.22.0_linux_amd64.tar.gz
下载完成后解压文件
tar -xzvf frp_0.22.0_linux_amd64.tar.gz
在解压的文件中找到frpc.ini(client配置文件)
client简单穿透某个tcp端口配置:
[common]
#有公网IP的主机的公网IP地址,也可以配置域名
server_addr = x.x.x.x
#frp 服务端的端口,必须与server一致
server_port = 7000

[testtcp]
type = tcp
local_ip = 127.0.0.1
local_port = 3306
remote_port = 6000
上面的配置为,将本地的3306 TCP协议端口转发至公网主机的6000端口。需要注意的是保证公网主机的6000端口未被使用

4.3安装frp访问

细心的你可能已经发现,上面的server/client之间没有加密操作,任何人知道了你的公网IP和server端口都可以接入。这里我们可以配置一个简单的密钥进行认证
首先是server
[common]
bind_port = 7000
token=abab123456

其次是client
[common]
#有公网IP的主机的公网IP地址,也可以配置域名
server_addr = x.x.x.x
#frp 服务端的端口,必须与server一致
server_port = 7000
#必须与server配置一直才能通过认证
token=abab123456
[testtcp]
type = tcp
local_ip = 127.0.0.1
local_port = 3306
remote_port = 6000

启动frp client

./frpc -c ./frpc.ini
看到success字样即启动成功。注意当前窗口不能关闭,如果需要后台启动,则命令为:
./frpc -c ./frpc.ini &

五.其他配置及版本说明

一位网友的总结
[common]
server_addr = *.*.*.* #已安装好frp服务端frps的服务器Ip地址
server_port = 5443 #与之前frp服务端的设置保持一致,即Bind Port
token = ************** #与之前安装服务端时给出的token保持一致

[web1]
type = http
local_ip = 192.168.1.1 #表示要穿透的为路由器IP
local_port = 80
use_encryption = true
use_gzip = true
custom_domains = *.*.* #表示远程访问192.168.1.1需要的域名,可以为二级域名。如果没有域名建议提前申请,并指向服务器所在IP
http_user = *** #可选项,随便填写,表示访问域名时需要用这个用户名验证通过后,才能连接到内网,加了一道防护,更安全
http_pwd = ****** #可选项,随便填写,同上,用户名对应这个密码,输入正确才能连接到内网

[web2]
type = http
local_ip = 192.168.1.111 #按需填写,填写需要远程访问的第二个内网设备IP
local_port = 80
use_encryption = true
use_gzip = true
custom_domains = *.*.* #表示远程访问192.168.1.111需要的域名,需要与上文的域名有所区别
http_user = *** #可选项,用户名
http_pwd = ****** #可选项,用户密码

log_file = /dev/null
log_level = info
log_max_days = 3