使用Frp实现内网穿透

在进行微信公众号的网页开发过程中,发现微信公众号配置支持http及https的80及443端口,调用时只能使用域名调用,无法在本地环境测试。只能在拥有公网IP的服务器上调试,十分不便,在搜索过后,据说frp工具可以实现反向代理且性能更好,特此记录本次部署过程

VPS

首先得有一个公网IP的服务器,不管是VPS,还是云服务器,都会分配一个公网可以访问的IP地址给你,连接到服务器后,安装上Linux系统,一般均为CentOS 7.0

域名

可以在阿里或者其他的域名提供商那里购买一个域名,并将域名和云服务地址的IP相关联,百度有很多操作步骤,不再赘述

安装frp

使用root权限安装frp服务端

1
2
3
4
1. 如果没有wget命令,先安装wget。查看是否安装wget:rpm -qa|grep "wget" 安装命令:yum -y install wget
2. wget --no-check-certificate https://raw.githubusercontent.com/clangcn/onekey-install-shell/master/frps/install-frps.sh -O ./install-frps.sh
3. chmod 700 ./install-frps.sh
4. ./install-frps.sh install

端口配置

Linux终端中需要输一些参数,全部参数都有默认值,直接回车就是输入默认值:
Please input frps bind_port 1-65535: #输入frp提供服务的端口,用于服务器端和客户端通信,默认即可
Please input frps vhost_http_port 1-65535: #输入frp进行http穿透的http服务端口,建议不用默认
Please input frps vhost_https_port 1-65535: #输入frp进行https穿透的https服务端口,建议不用默认
Please input frps dashboard_port 1-65535:#输入frp的控制台服务端口,用于查看frp工作状态,默认即可
Please input dashboard_user (Default: admin):#登录控制台的用户名,默认即可
Please input dashboard_pwd (Default: kpkpM7VZ):#登录控制台的密码,如果记不住默认的建议修改
Please input privilege_token (Default: 9m2UAOWa6hx5Eise):#输入frp服务器和客户端通信的密码,默认是随机生成的,默认即可
Please input frps max_pool_count 1-200:#设置每个代理可以创建的连接池上限,默认50

访问管理页面

地址:域名:6443。或者公网IP:6443都可以

修改frp服务端的配置

如果之后有哪些端口需要修改,可以在/usr/local/frps/frps.ini这个配置文件中修改
服务端配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#bind_addr为本机IP
#bind_port为frp对客户端的端口号
#uto_token是客户端连接服务器端的口令

# [common] is integral section
[common]
# A literal address or host name for IPv6 must be enclosed
# in square brackets, as in "[::1]:80", "[ipv6-host]:http" or "[ipv6-host%zone]:80"
bind_addr = 0.0.0.0 //默认本地
bind_port = frp提供服务的端口
# udp port used for kcp protocol, it can be same with 'bind_port'
# if not set, kcp is disabled in frps
kcp_bind_port = frp提供服务的端口
# if you want to configure or reload frps by dashboard, dashboard_port must be set
dashboard_port = frp的控制台服务端口
# dashboard assets directory(only for debug mode)
dashboard_user = 登录控制台的用户名
dashboard_pwd = 登录控制台的密码
#自定义二级域名
subdomain_host = frps.域名.top //比如 news.qq.com就是www.qq.com的二级域名
# assets_dir = ./static
vhost_http_port = frp进行http穿透的http
vhost_https_port = frp进行http穿透的https
# console or real logFile path like ./frps.log
log_file = ./frps.log
# debug, info, warn, error
log_level = info
log_max_days = 3
# auth token
token = 加密字段
# only allow frpc to bind ports you list, if you set nothing, there won't be any limit
#allow_ports = 1-65535

客户端配置frpc.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[common]

server_addr = 公网IP地址
server_port = frp提供服务的端口
token = 加密字段

[web]
type = http
local_ip = 127.0.0.1
local_port = 8080
subdomain = windows

# 如果有ssh代理需求可以继续配置
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 10085

server_addr是服务器端的公网IP地址
server_port是frp服务端口号
auto_token是连接服务器的口令,必须和服务器保持一致。
[ssh_208]是客户端通过服务器与用户之间的通道名,每个客户端必须不一样
remote_port是服务器端对外提供本机服务的端口号,即用户连接 公网IP:10085,相当于连接127.0.0.1:22,即ssh服务

自定义二级域名

在多人同时使用一个 frps 时,通过自定义二级域名的方式来使用会更加方便
通过在 frps 的配置文件中配置 subdomain_host,就可以启用该特性。
之后在 frpc 的 http、https 类型的代理中可以不配置 custom_domains,而是配置一个 subdomain 参数

只需要将 *.{subdomain_host} 解析到 frps 所在服务器。之后用户可以通过 subdomain 自行指定自己的 web 服务所需要使用的二级域名,通过 {subdomain}.{subdomain_host} 来访问自己的 web 服务

1
2
3
4
5
6
7
8
假如域名为:abc.com
去域名的控制面板添加解析 *.frps 到公网IP地址

根据我上面的配置
访问
http://windows.frps.abc.com:【frp进行http穿透的http的端口】/项目名
映射到本地的
http://localhost:8080/项目名

frp开源地址

https://github.com/fatedier/frp


本文标题:使用Frp实现内网穿透

文章作者:ProYI

发布时间:2018年11月01日 - 20:11

最后更新:2022年02月06日 - 16:02

原始链接:https://ProYI.github.io/post/401ca2c1.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际转载请保留原文链接及作者。

0%
;