一.介绍
前面介绍了ngrok,也说了它的1.x版本具有一些Bug并且作者放弃了维护,那么,谁能够取代ngrok在内网穿透工具中的地位呢?我觉得frp也许可以,frp是fast reverse proxy的缩写,其可用于反向代理和内网穿透,支持tcp, udp, http, https 协议,这比ngrok还多了个udp。并且发布以来广受欢迎,积累了不少用户,作者也是很勤快,一直在修复bug和更新新特性。
并且,作者是个中国人,所以在GitHub上还有中文文档,写的还挺详细的,不过……不去看文档是很多人的特点,所以我这边还是记点东西来介绍下简单的安装和操作配置。
二.安装配置
frp提供了热门平台的程序文件,所以安装也变得比较简单了,我这边的是Linux 64位平台的,其它的请自己去下——>传送门
wget https://github.com/fatedier/frp/releases/download/v0.12.0/frp_0.12.0_linux_amd64.tar.gz tar xzf frp_0.12.0_linux_amd64.tar.gz mv frp_*/frps /usr/bin/ mkdir /etc/frp/ rm -rf frp_*
然后根据下面配置你自己改了填到配置文件中
vi /etc/frp/frps.ini
下面是我翻译的带说明的服务端配置文件,就这么凑和着看吧
[common] #frp服务器监听地址,如果是IPV6地址必须用中括号包围 bind_addr = 0.0.0.0 #frp服务器监听端口 bind_port = 7000 #kcp的udp监听端口,如果不设那就不启用 #kcp_bind_port = 7000 #指定使用的协议,默认tcp,可选kcp #protocol = kcp #如果要使用vitual host,就必须设置 #vhost_http_port = 80 #vhost_https_port = 443 #Web后台监听端口 dashboard_port = 7500 #Web后台的用户名和密码 dashboard_user = admin dashboard_pwd = admin #Web后台的静态资源目录,调试用的,一般不设 #assets_dir = ./static #日志输出,可以设置为具体的日志文件或者console log_file = /var/log/frps.log #日志记录等级,有trace, debug, info, warn, error log_level = info #日志保留时间 log_max_days = 3 #启用特权模式,从v0.10.0版本开始默认启用特权模式,且目前只能使用特权模式 #privilege_mode = true #特权模式Token,请尽量长点且复杂 privilege_token = 12345678 #特权模式允许分配的端口范围 privilege_allow_ports = 2000-3000,3001,3003,4000-50000 #心跳超时,不用改 #heartbeat_timeout = 90 #每个代理可以设置的连接池上限 #max_pool_count = 5 #认证超时时间,一般不用改 #authentication_timeout = 900 #如果配置了这个,当你的模式为http或https时,就能设置子域名subdomain #subdomain_host = frps.com #是否启用tcp多路复用,默认就是true,不用管 #tcp_mux = true
在这个配置文件中老版本是可以不启用特权模式或者同时添加其它的section来在服务端配置其它的转发设置的,但是从v0.10.0版本开始后特权模式暂时是唯一可用的(因为方便,不用为了一个配置而既要改服务端又要改客户端)
在修改好服务端配置文件后,我们可以启用frp的服务端了
frps -c /etc/frp/frps.ini
然后服务端就OK了,下面开始配置客户端,客户端程序自己在GitHub上面下,各个平台的包里面frps是服务器,frpc就是客户端
配置文件如下,自己修改后保存为frpc.ini
[common] #frp服务器地址 server_addr = 1.2.3.4 #frp服务器端口 server_port = 7000 #特权模式Token privilege_token = 12345678 #转发SSH [ssh] type = tcp #可以指定为其它IP,默认是本地 #local_ip = 127.0.0.1 local_port = 22 remote_port = 6000 #启用加密 use_encryption = true #启用压缩 use_compression = true #转发Web [web] type = http local_port = 80 custom_domains = www.yourdomain.com #修改header中的host #host_header_rewrite = dev.yourdomain.com #启用简单HTTP认证 #http_user = abc #http_pwd = abc #在服务端配置了subdomain_host的情况下用于自定义二级域名 #subdomain = test #在存在多个相同域名的情况下通过请求的URL路由到不同的配置 #locations = /news,/about #转发DNS请求 [dns] type = udp local_ip = 8.8.8.8 local_port = 53 remote_port = 6000 #转发Unix域套接字(这儿是Docker) [unix_domain_socket] type = tcp remote_port = 6000 plugin = unix_domain_socket plugin_unix_path = /var/run/docker.sock #HTTP代理 [http_proxy] type = tcp remote_port = 6000 plugin = http_proxy #配置http代理的简单认证 #plugin_http_user = abc #plugin_http_passwd = abc
以上是大部分的参考,如果你有啥需要的参照着改就行了
在Linux等平台下,执行如下命令就行
frpc -c /path/to/frpc.ini
而在Windows下,需要你创建一个frpc.exe的快捷方式,然后将参数加到快捷方式属性的目标那一栏的frpc.exe后面,也可以自己百度下如果将命令注册为系统服务来实现常驻
成功运行后,访问服务器的7500端口会有一个WebGUI,如下,显示当前的状态,左侧的Proxies里会显示客户端注册的各种转发规则
至于客户端这儿有日志提示是否连上服务器,是否成功启用配置啥的
总的来说还是挺好用的,比较期待以后还有啥新的功能_(:з」∠)_
文章评论
写的很详细呐
@Li 必须的,全程亲自测试
@Senra 加油呀,博主,有机会可以更新一下7方面的
@Li 6和7其实基本一样,只要下载的包换一个就好,frp的问题主要是在配置文件方面
小伙子文章写的不错,留名感谢
@Nick 自己搞东西的时候发现各种文章都说得要么不够全要么跟不上新版本,于是就自己撸一份全过程出来了
frp_0.12.0_linux_386.tar.gz
frp_0.12.0_linux_amd64.tar.gz
frp_0.12.0_linux_arm.tar.gz
frp_0.12.0_linux_mips.tar.gz
frp_0.12.0_linux_mips64.tar.gz
frp_0.12.0_linux_mips64le.tar.gz
frp_0.12.0_linux_mipsle.tar.gz
我不知道下载哪个怎么办啊
@凌尘 mips的基本上是路由器,arm的是树莓派这种的,amd64就是常用的64位系统,386是32位系统。比如你用CentOS或者Debian或者Ubuntu的64位,都可以用amd64的
@Senra ok
用这个可以挂PT下载吗
@Peter 可以拿来把挂pt的程序,比如transmission或者aria2暴露到外网方便管理
博主人很好......
我就是由于没有公网IP,准备下手购买IP盒子了.....不过看到FRP 所以准备来试试看看速度
还有开机启动和后台守护进程这个呢,博主....
博主是不是个爱动漫的伪娘丫........
@Peter 喵喵喵?我可是个硬汉。开机启动的话你直接把命令写好丢到/etc/rc.local里或者用supervisor啥的配置下就行
博主.....我按照操作已经实现服务器 访问域名 7500 可以打开
但是windows客户端俩连接的时候提示 认证超时 authorization timeout
开始我以为是 token不一致 把token去掉了,然后还是不行 我的 authentication_timeout = 0的
@Peter https://github.com/fatedier/frp/issues/510 参考这个issue,很大可能性是你本地和服务器的时间不同步,linux服务器可以使用ntpdate命令同步时间
使用免费frp服务器会有什么隐患吗?
@parasomnia 如果是https的话还好,由于frp服务器是在你与被反代的节点之间的,所以任何未加密数据对于frp服务器来说都是透明的。建议如果选择公开frp服务器的话尽量不要用于铭感服务,或使用额外的加密
请教一个问题,不知道博主清不清楚,我现在本机起的node服务,配置frp后,能够从外网访问到,但是webpack起的静态页面服务,不能访问啊,报错Invalid Host header,这个你清不清楚咋整
@独木桥先生 参照转发web的方法,带上host,不能用转发http或者tcp端口的,那个不一定会正常传递host
写的和其他教程千篇一律,配置文件还是有很多不懂的
@高兴 参数都翻译成中文了,你还要我怎么给你解释……
@Senra 你是直译,比如说,上面说的二级域名是怎么回事?是自己注册的还是怎么来的,还有特权模式是怎么回事?还有其他种种,没有解释说明这个是什么,有什么作用。对于有基础的人没障碍,对于小白来说就是天书。所以说千篇一律不为过吧。但是想说如果不是给小白看的,就当我没有说,博主不要见怪。没有呛博主的意思,只是想说真心不适合小白。
@高兴 这是给有一定基础的人看的,不是纯小白,纯小白你让他输命令他都不知道往哪输。。。
@Senra 就好比我不会用vps和搭建代理,别人写的图文教程,很详细,一次就配置成功了,需要用到什么 ,段命令是怎么回事。我配置完以后,我也懂了其中的一些东西了,有什么不对的我也可以自己修改,因为懂了,而不是直接抄,那样就和死记硬背没有区别了。可能有的人想说自己笨,不要怨别人写的不行。如果有人这样想我也没有话可以说。
@高兴 你这么说就很蛋疼了,这样一篇文章涵盖的东西太多了,而且可能会很重复,因为某样东西可能会重复在几篇文章内出现,我没经历去重复解释多次。而且frp这种东西要么就写成脚本来帮你傻瓜化配置,要么是真需要一点基础知识的,并且作者在GitHub上也有中文介绍,特权模式也有解释,但是域名怎么我总不能帮你注册吧
@Senra 哈哈,一开始我自己记录教程的时候,尽量做到解释每行配置或者命令是什么意思,但是当自己水平上来以后,就懒得写那么详细,很累的
@David 是这样的,写详细很费口舌
话说服务端不搞验证密码,会不会被盗用呢。比如客户端搞一样的配置,造成干扰...还有就是特权密码模式改了不是文章说的这个。。
@Shark 有公开密码和特权模式密码咯,文章里的密码算是随便写的吧,只是给个参考配置。你如果考虑的是对外映射的端口的安全性的话那没办法,除非你套个nginx或者拿iptables设置白名单,不然肯定谁都能访问。
@Senra 我试了一下,有个token可以设置。。。这样别人就无法用我的ip了
话算配置文件更新了。。也建议博主更新一波帖子。。。
好文,已收藏,特留名感谢博主。
转发Web 不指向IP ?
@axy 哈?这个是将本地的Web服务转发出去的啊,默认就是localhost咯
这个必须要有自己服务器才能用吗?
这个必须要有自己服务器才能用吗?
还是我自己的路由器上搭建这个就能用了
我是小白,接下来的这些操作不太懂如何实现,5555
而在Windows下,需要你创建一个frpc.exe的快捷方式,然后将参数加到快捷方式属性的目标那一栏的frpc.exe后面,也可以自己百度下如果将命令注册为系统服务来实现常驻
成功运行后,访问服务器的7500端口会有一个WebGUI,如下,显示当前的状态,左侧的Proxies里会显示客户端注册的各种转发规则
关于frp限速怎么操作
@Marinda https://github.com/fatedier/frp?tab=readme-ov-file#bandwidth-limit