随着全球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,请勿用于非法用途。