没有公网IP是一件很不方便的事情,尤其是在国内的网络环境,学校和小区内的用户通常都没有公网IP。为了解决这个问题,则需要内网穿透,而内网穿透的方法有很多种,例如使用花生壳、ngrok等,本文介绍的是使用frp让实现内网穿透。
什么是frp?
frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。
如何部署?
一、服务器端(frps)
1、SSH连接上外网主机后,使用wget指令下载frp。(这里以系统CentOS,frp版本v0.10.0为例),其他系统自行到这里(https://github.com/fatedier/frp/releases)下载相对以的系统版本。
wget https://github.com/fatedier/frp/releases/download/v0.10.0/frp_0.10.0_linux_amd64.tar.gz
使用tar指令解压tar.gz文件
tar -zxvf frp_0.10.0_linux_amd64.tar.gz
使用cd指令进入解压出来的文件夹
cd frp_0.10.0_linux_amd64
外网主机作为服务端,可以删掉不必要的客户端文件,使用rm指令删除文件。
rm -f frpc
rm -f frpc.ini
接下来要修改服务器配置文件,即frps.ini文件。使用vi指令对目标文件进行编辑。
vi frps.ini
也可以直接把frps.ini文件下载到本地修改。改动说明如下(图),frp版本v0.10.0为例,采用特权模式,最方便简单方式:
保存上面的配置后,就可以使用以下指令启动frp服务端。
nohup ./frps -c ./frps.ini &
服务端的工作就到此结束了。(命令执行后是没有反应的,但已经可以了,如还不行看log。)可以访问IP+dashboard_port访问控制面板,如:127.0.0.1:7500
注:使用nohup指令
nohup指令的使用方法相对简单,只需要在nohup后面加上frp的运行指令即可。下面示范的指令是运行frp客户端。(同样,如果之前断开了SSH连接,记得用cd指令进入frp的目录先。)
二、客户端(frpc)
这里说得客户端有两种:一种是路由器,一种是群晖等。
1、而路由器的话就相对比较简单,因为多数的智能的路由器都有集成frp或者有插件(如:老毛子、梅林、hiwifi),直接配置frpc.ini文件就行了,所以我们现在就想说说路由器的配置(注意看箭头):
代码:
[common]server_addr = 127.0.0.1server_port = 7000privilege_token = admin[web]privilege_mode = trueremote_port = 6000type = httplocal_ip = 192.168.1.1local_port = 80use_gzip = truesubdomain = testcustom_domains = frp.xxx.com
custom_domains = frp.xxx.com 就是图1下方绑定的域名,在这里要注意解析泛域名,如:*.frp.xxx.com。绑定后就可以通过域名:test.frp.xxx.com:8080访问了。注:这里的8080端口就是在服务端(frps)所填写的vhost_http_port,而域名前缀test就是客户端(frpc)的subdomain = test
保存配置frpc.ini,就OK了。
2、群晖NAS配置的客户端前面的操作和服务端是一模一样的,这里不一一解释。
wget https://github.com/fatedier/frp/releases/download/v0.10.0/frp_0.10.0_linux_386.tar.gztar -zxvf frp_0.10.0_linux_386.tar.gzcd frp_0.10.0_linux_386rm -f frpsrm -f frps.inivi frpc.ini
客户端的配置如下:
[common]server_addr = x.x.x.xserver_port = 7000auth_token = 123[ssh]local_port = 22[nas]type = http local_port = 5000 [web] type = http local_port = 80
上面的配置和服务端是对应的。而更具体的操作方法可以看:https://txisfine.cn/2017/05/15/frp-black-synology.html
结语:
frp的使用和配置相当简单,如有疑问或者想了解关于frp的其它功能可以查看官方的中文文档:https://github.com/fatedier/frp/blob/master/README_zh.md
里面有更多玩法,如:通过密码保护你的 web 服务,修改 Host Header,加密与压缩等等。