frp实现内网穿透
前言
工作中遇到项目中需要开发公众号的情况,公众号平台需要指定域名,且要求端口需要是80或443端口才行。而公司的公网域名和端口已经被使用,为了方便开发调试,使用了frp来实现内网穿透。这里使用的frp版本为0.35.1
frp简介
frp是什么
frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。
frp 的作用
- 利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。
- 对于 http 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。
- 利用处于内网或防火墙后的机器,对外网环境提供 tcp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。
- 可查看通过代理的所有 http 请求和响应的详细信息。(待开发)
frp的架构
准备工作
-
有公网ip的设备(云服务器,VPS都可以)
-
保证公网设备响应的端口要对外开启,如果是云服务器则到响应的云服务器产商的控制台中开启,以供后续使用
-
如果有使用域名的需求的话,记得将域名映射到公网ip
frp下载地址
github页面地址:https://github.com/fatedier/frp/releases
跟据自己的机器下载对应的版本就好~不然不兼容版本无法运行!!
我下载的是:
linux服务器:frp_0.35.1_linux_amd64.tar.gz
windows内网机器:frp_0.35.1_windows_amd64.zip
如果是32位系统就选386结尾的!
frp的文件结构
以windows版本为例
可以看出,frp中包含了frpc和frps,c即client客户端,s即server服务端。
frpc.ini、frps.ini 分别是客户端的配置文件和服务端的配置文件,修改配置也是在这里修改
一般情况下公网机器上只用运行frps,内网机器只用运行frpc
frp配置与使用
linux公网服务器的配置(windows配置同理,这里不做说明)
1、下载frp文件
$ wget https://github.com/fatedier/frp/releases/download/v0.35.1/frp_0.35.1_linux_amd64.tar.gz
2、下载完后解压压缩包
$ tar -zxvf frp_0.35.1_linux_amd64.tar.gz
3、根据需求修改配置(见下文)
4、启动frps
$ cd frp_0.35.1_linux_amd64/
$ ./frps -c ./frps.ini
通过 ssh 访问公司内网机器
1、 服务器端:修改 frps.ini 文件,配置一个名为 ssh 的反向代理:
# frps.ini
[common]
bind_port = 7000 #该端口用于与内网通信
[ssh]
listen_port = 6000 #该端口用于监听ssh请求
auth_token = 123
2、 服务器端:启动 frps:
$ ./frps -c ./frps.ini
3、 客户端:修改 frpc.ini 文件:
# frpc.ini
[common]
server_addr = x.x.x.x #frps 所在服务器的 IP
server_port = 7000 #frps 配置中bind_port的端口,两者要一直,不然怎么通信
auth_token = 123
[ssh]
local_port = 22 #本地ssh监听的端口
4、客户端:启动 frpc:
1)linux系统的启动方式:
$ ./frpc -c ./frpc.ini
2)windows系统需要cmd启动frpc.exe:
5、 通过 ssh 访问内网机器,假设用户名为 test:
ssh -oPort=6000 test@x.x.x.x
通过IP或指定域名访问部署于内网的 web 服务
有时想要让其他人通过域名访问或者测试我们在本地搭建的 web 服务,但是由于本地机器没有公网 IP,无法将域名解析到本地的机器,通过 frp 就可以实现这一功能,以下示例为 http 服务,https 服务配置方法相同, vhost_http_port 替换为 vhost_https_port, type 设置为 https 即可。
1、 修改 frps.ini 文件,配置一个名为 web 的 http 反向代理,设置 http 访问端口为 80,绑定IP或域名:
# frps.ini
[common]
bind_port = 7000 #该端口用于与内网通信
vhost_http_port = 80 #公网访问的端口,如果是https,这里替换为vhost_https_port
[web]
type = http #如果是https,这里替换为https
custom_domains = www.yourdomain.com #这里是你的公网服务器IP或域名
auth_token = 123
上述的 [web] 下的配置可以不要
2、 服务器端:启动 frps:
$ ./frps -c ./frps.ini
3、 客户端:修改 frpc.ini 文件:
# frpc.ini
[common]
server_addr = x.x.x.x #frps 所在服务器的 IP
server_port = 7000 #frps 配置中bind_port的端口,两者要一直,不然怎么通信
auth_token = 123
[web]
type = http #如果是https,这里替换为https
local_port = 8080 #内网环境web服务的端口
custom_domains = www.yourdomain.com #这里是你的公网服务器IP或域名,如果需要IP或域名同时可以访问,将IP和域名使用逗号分隔写到这里!!!!!!!!!!!
4、客户端:启动 frpc:
1)linux系统的启动方式:
$ ./frpc -c ./frpc.ini
2)windows系统需要cmd启动frpc.exe:
5、通过浏览器访问 http://www.yourdomain.com(没有配域名这边就写ip地址):端口(frps中vhost_http_port的值) 即可访问到处于内网机器上的 web 服务。
更多配置
DNS、提供文件服务等更多功能,可以参考https://gitee.com/wefeng/frp
小结
frp是一款方便、快捷、高效的内网穿透工具,但是需要有公网IP的机器,而且访问速度同时受限于内网所处网络和公网机器网络的速度,不过平常使用已经是很不错的选择了。frp还有其他妙用,这里就不再赘述。
如果有帮到你,那就点赞支持下吧,或者有什么问题,还请留言或者私信~