原理解析
FRP是一款用于内网穿透的软件,架设在公网环境中,其原理就是通过中转的公网网络端口进行内网端口的映射,使内网服务可以通过公网进行访问
例如
内网 192.168.3.100:80
HTTP服务
公网服务器 119.28.29.119
在公网服务器上安装FRP服务端,在内网机器上运行FRP客户端192.168.3.100:80 >>> 119.28.29.119:80
[服务端端口随意,但唯一]
这样通过访问 119.28.29.119:80
实际上就是访问 192.168.3.100:80
不仅支持http,还可以支持TCP,UDP,socks管道,简单文件服务器,TLS本地证书指定,P2P等任意协议。
FRP是开源的而且作者目前仍在更新中,github开源地址 https://github.com/fatedier/frp
{dotted startColor="#ff6c6c" endColor="#1989fa"/}
搭建实战
原版frp服务端有二进制版本和源代码版本,我们这次通过一键脚本进行安装带有web面板的frp服务端,脚本来源于github用户https://github.com/MvsCode/frps-onekey
由于国内网络环境下载不正常,我也会放一个修改后的脚本在本页面提供下载 install-frps.sh
服务端搭建操作
通过ssh连接您的服务器,操作系统支持debian系列和redhat系列,也就是centos与ubuntu都支持。
将下载的脚本放入您创建的文件夹,log日志会保存在同文件夹下,所以请不要在根目录进行操作。
下面是一些命令。
#直接通过wget 或者 curl下载,wget某些系列没有自带安装,所以先安装wget
#centos为例
yum install wget -y
wget https://raw.githubusercontent.com/MvsCode/frps-onekey/master/install-frps.sh
chmod 0777 install-frps.sh
bash install-frps.sh install
以上命令执行正常应该进入了脚本界面
一些关键信息:
- bind_port FRP连接端口
- vhost_http_port HTTP的端口
- vhost_https_port HTTPS的端口
- dashboard_port FRP面板端口
- 默认admin为面板账号
- dashboard_pwd 面板密码,默认自动生成
- token FRP鉴权密码,默认自动生成
- subdomain_host 子域名host,默认本机
- max_pool_count 最大连接数目
- log_level 日志等级
- log_max_days 日志保存天数
- log_file 可以选择开关日志记录,默认开
- tcp_mux TCP的连接复用,可以提高性能,建议默认开
- kcp support KCP的支持,默认开
- 选择完上述信息,进可以回车继续,会自动连接到对应选择的地址进行下载FRP服务端二进制主程序,如果失败或者长时间没有反应,大概率本地网络问题导致,多次重试或者更换下载地址尝试。
脚本执行完毕显示如上界面代表安装已成功,此后可以通过简易命令进行控制
首次安装完 使用frps start
启动FRP服务端
frps status manage : frps {start|stop|restart|status|config|version}
Example:
start: frps start
stop: frps stop
restart: frps restart
如需卸载,通过执行脚本文件bash install-frps.sh uninstall
可以通过服务器公网:dashboard_port,进入web面板查看,用户名和密码为您自行配置的,如遗忘可通过frps config
进行查看。
客户端连接
通过 https://github.com/fatedier/frp/releases
下载对应系统的客户端程序
windows为例 https://github.com/fatedier/frp/releases/download/v0.45.0/frp_0.45.0_windows_amd64.zip
下载后解压,文件夹内即可看到 frpc.exe
开始编写配置文件,在frpc.exe同文件夹内创建文本文件,修改名称为frpc.ini,后缀记得为.ini
填入FRP服务器信息和你需要进行映射的服务,然后打开cmd或者powershell执行frpc.exe,如图所示,提示
start proxy success,代表FRP已经映射成功。
关键信息
[common]
#这里是默认的不可修改
server_addr = FRP服务端地址
server_port = FRP服务端的Bind port
token = FRP服务端token
[web]
#这里是你的服务名,可自由填写,不可重复
type = http #服务类型,有tcp, udp, http, https, stcp, sudp, xtcp, tcpmux
local_port = 80
#你要映射的本地端口,对等映射,公网地址同端口,使用 服务器IP:80 访问 本地IP:80端口
custom_domains = blog.noccd.cn
#访问映射的host名
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
#通过remote_port 进行非对等映射,使用 服务器IP:6000 访问 本地IP:22端口
复制以上配置需要去掉注释信息,否则无法运行
更多配置信息查看官方文档
https://gofrp.org/docs/reference/proxy/