利用FRP进行内网穿透

随着全球IPv4地址资源的进一步枯竭和联网设备数量的指数级增长,越来越多的运营商在给用户分配IP时不再是公网IP,而是一个内网IP,而向运营商申请一个固定的公网IP价格不菲,于是内网穿透技术应运而生。

现在,市面上有很多内网穿透软件和硬件服务,包括花生壳,Ngrok等,本文主要介绍用Frp进行内网穿透。

前期准备

1. 一台带公网IP的服务器:Windows或Linux系统,国内可以购买各种云服务器,如果购买阿里云,可以点击这个链接, 这台服务器主要作用是进行流量转发,配置不用很高,如果对速度有要求,可采用高宽带或按流量计费。
2. 内网服务器:Windows或Linux均可,如果需要长期时间,推荐使用低功耗设备,如树莓派。

Frp工作模式

Frp包含服务器端软件和客户端软件,服务器端软件安装在外网服务器上,配件较为简单,客户端软件安装在客户端上,用来控制穿透的端口,本地的端口等。

开始配置

下载系统:根据你的操作系统去https://github.com/fatedier/frp/releases下载对应的frp版本,下载完毕之后,分别把软件保存在服务器端和客户端。下载的文件包包括两个主要文件,一个frps或frps.exe是服务器端程序,一个frpc或frpc.exe是客户端程序,分别把他们放到服务器和客户端上。

配置服务器, 编辑服务器配置文件frps.ini

#必须设置common
[common]
#服务器端监听的地址和端口,不要和已经有端口的冲突,也要注意端口要被防火墙允许
bind_addr = 0.0.0.0
bind_port = 7000
#客户端和服务器通信口令,推荐设置
auth_token = 12345
#UDP监听端口,非必须
bind_udp_port = 7001

#服务器HTTP管理配置, 可以不开启,开启不要使用弱密码
dashboard_addr = 0.0.0.0
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin

#日志配置
log_file = ./frps.log
log_level = info
log_max_days = 3

#允许服务器监听的端口(这些端口的流量会转发到客户端)
allow_ports = 80,2000-3000,3001,3003,4000-50000

#每个端口最大连接数量
max_ports_per_client = 0

#启用TCP流量复用,默认启用
tcp_mux = true

配置完毕之后,通过命令行直接运行 ./frps -c ./frps.ini 服务器即可开始运行,然后配置客户端 frpc.ini

[common]
#分别填入服务器的IP地址,端口和口令,注意口令必须保持一致
server_addr = 127.0.0.1
server_port = 7000
auth_token = 12345

#下面开始配置服务,“[server1]”为段名,可随意取
[server1]
#服务的类型,可为tcp udp http https,普通流量转发默认为tcp即可
type = tcp
#本地提供服务的主机地址,如果是本机提供,填入127.0.0.1即可
local_ip = 127.0.0.1
#本地提供服务的端口
local_port = 1234

#服务器监听的端口地址,注意必须服务器的allow_ports允许范围内
remote_port = 80

配置完毕之后,运行 ./frpc -c ./frpc.ini, 客户端会自动连接服务器端,上传配置文件,并监听客户端指示要监听的端口,接下来所有访问服务器端80端口的流量都会被转发到客户端的1234端口上,从而实现了内网穿透和端口转发。

注意:
1,未经备案,运营商会对80,8080,21等本地端口封禁,本地监听应避免使用这些。
2,内网穿透的初衷是为了解决ipv4地址枯竭问题,如果您的宽带支持ipv6,则可直接使用ipv6。
3,请勿用于非法用途。