Contents

搭建FRP高性能反向代理

Contents

搭建FRP高性能反向代理

首先说说什么是frp?为什么使用 frp ? frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网:通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括: 客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。 代理组间的负载均衡。 端口复用,多个服务通过同一个服务端端口暴露。 多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。 服务端和客户端 UI 页面。 使用示例: 根据对应的操作系统及架构,从 Release 页面下载最新版本的程序。 下载地址:Release 将 frps 及 frps.ini 放到具有公网 IP 的机器上。 将 frpc 及 frpc.ini 放到处于内网环境的机器上。 修改 frps.ini 文件, [common] bind_addr = 0.0.0.0 #服务器IP,0.0.0.0为服务器全局所有IP可用,假如你的服务器有多个IP则可以这样做,或者填写为指定其中的一个服务器IP,支持IPV6 bind_port = 6666 #通讯端口,用于和客户端内网穿透传输数据的端口,可自定义 bind_udp_port = 6667 #UDP通讯端口,用于点对点内网穿透 kcp_bind_port = 6668 #用于KCP协议UDP通讯端口,在弱网环境下传输效率提升明显,但是会有一些额外的流量消耗。设置后frpc客户端须设置protocol = kcp vhost_http_port = 80 #http监听端口,注意可能和服务器上其他服务用的80冲突,比如centos有些默认有Apache,可自定义 vhost_https_port = 443 #https监听端口,可自定义 dashboard_port = 6669 #通过浏览器查看 frp 的状态以及代理统计信息展示端口,可自定义 dashboard_user = admin #信息展示面板用户名 dashboard_pwd = admin #信息展示面板密码 log_max_days = 30 #最多保存多少天日志 token = test_admin #特权模式认证密钥 allow_ports = 50000-60000 #端口白名单,为了防止端口被滥用,可以手动指定允许哪些端口被使用 max_pool_count = 100 #每个内网穿透服务限制最大连接池上限,避免大量资源占用,可自定义 authentication_timeout = 0 #frpc 所在机器和 frps 所在机器的时间相差不能超过 15 分钟,因为时间戳会被用于加密验证中,防止报文被劫持后被其他人利用,单位为秒,默认值为 900,即 15 分钟。如果修改为 0,则 frps 将不对身份验证报文的时间戳进行超时校验。国外服务器由于时区的不同,时间会相差非常大,这里需要注意同步时间或者设置此值为0 log_file = frps.log log_level = info

启动 frps的方式: ./frps -c ./frps.ini

如果提示无权限运行,请先给权限之后再启动; sudo chmod 775 frps frps.ini 或者 sudo chmod 777 frps frps.ini

启动之后服务端就已经完成所有配置了,接下来进行客户端配置; 假设 frps 所在服务器的公网 IP 为:66.66.66.66; 如果你的公网IP由域名进行泛解析,也可以填写域名信息,比如域名为:test.com。 修改 frpc.ini 文件: [common] server_addr = 66.66.66.66 #server_addr 指的是公网ip或者解析公网ip的域名:“www.test.com”。 server_port = 6666 #server_port 指的是frps上设置的端口(必须与frps上端口一样,否则不能通讯)。 token = test_admin #指的是特权密码,需要与服务端吻合。

#———————-HTTP/HTTPS———————- [web面板HTTP1] type = http #通告服务器使用的协议 local_ip = 127.0.0.1 #本地的ip地址,可以写局域网ip地址(使用命令‘ifconfig’查看),也可以使用本地回环地址。 local_port = 9090 #本地要访问的端口 custom_domains = admin.test.com #设置域名,以上域名在外网访问为:http://admin.test.com #本地访问为:http://127.0.0.1:9090

[web面板HTTPS1] type = https #通告服务器使用的协议 local_ip = 192.168.1.1 #本地的ip地址,可以写局域网ip地址(使用命令‘ifconfig’查看),也可以使用本地回环地址。 local_port = 9091 #本地要访问的端口 custom_domains = admin.test.com #设置域名,以上域名在外网访问为:https://admin.test.com #本地访问为:https://127.0.0.1:9091

#———————-TCP/STCP———————-

[ssh_tcp] type = tcp #通告服务器使用的协议 local_ip = 127.0.0.1 #本地的ip地址,可以写局域网ip地址(使用命令‘ifconfig’查看),也可以使用本地回环地址。 local_port = 22 #本地要访问的端口 remote_port = 11000 #远程访问的端口 #远程访问方式(假设用户名为root):ssh -p11000 root@www.test.com

#想使用STCP协议部署两个frpc客户端,从而实现点对点连接 [ssh_stcp] type = stcp #通告服务器使用的协议 sk = 45frsabhjsdcfr3 #验证密钥,在访问端需要配置相同密钥,否则不给与连接。 local_ip = 127.0.0.1 #本地的ip地址,可以写局域网ip地址(使用命令‘ifconfig’查看),也可以使用本地回环地址。 local_port = 22 #本地要访问的端口

#————————XTCP———————— #现阶段不稳定 #想使用XTCP协议部署两个frpc客户端,从而实现点对点连接(好处是传输大文件不走服务器流量,更高速,缺点是不稳定,还有可能连不上)

[test1] type = xtcp #通告服务器使用的协议 sk = e3bshakbcuw1vjhq #验证密钥,在访问端需要配置相同密钥,否则不给与连接。 local_ip = 127.0.0.1 #本地的ip地址,可以写局域网ip地址(使用命令‘ifconfig’查看),也可以使用本地回环地址。 local_port = 22 #本地要访问的端口

启动 frpc的方式: ./frpc -c ./frpc.ini

如果提示无权限运行,请先给权限之后再启动; sudo chmod 775 frpc frpc.ini 或者 sudo chmod 777 frpc frpc.ini

以上为客户端部署配置文件的方式,接下来说说想使用XTCP和STCP的方式 上文讲到要使用XTCP和STCP需要部署两个客户端,以上已经布置好一个服务端(S)和一个客户端(A),现在再配置一个可以使用XTCP和STCP协议访问上一客户端的客户端(B)(简单来说就是B客户端通过S服务端访问A客户端)。 xtcp的frpc配置如下 [ssh_visitor] type = xtcp #通告使用的协议 role = visitor

告知服务器本机是xtcp的访问者

server_name = test1

要访问的 xtcp 代理的名字

sk = e3bshakbcuw1vjhq #验证密钥,在访问端需要配置相同密钥,否则不给与连接。 bind_addr = 127.0.0.1

绑定本地ip用于访问ssh

bind_port = 6106

绑定本地端口用于访问ssh

通过 ssh 访问内网机器,假设用户名为 root: ssh -oPort=6106 root@127.0.0.1

stcp的frpc配置如下: [secret_ssh_visitor] type = stcp #通告服务器协议为stcp role = visitor

stcp 的访问者

server_name = ssh_stcp

要访问的 stcp 代理的名字

sk = 45frsabhjsdcfr3

绑定本地端口用于访问 ssh 服务

bind_addr = 127.0.0.1 bind_port = 6990

通过 ssh 访问内网机器,假设用户名为 test: ssh -oPort=6990 test@127.0.0.1

以上为frp的普通使用方法,该方法适用于大多用户,如果您觉得 本篇文章对你有帮助, 欢迎给予我们一定的捐助来维持项目的长期发展,谢谢。