之前介绍过使用SSH转发端口进行内网穿透,实践中发现效果不理想:刚开始转发时正常,时间一长连接会hang住。寻思做内网穿透应该有更专业的工具,于是找到了frp。

frp简介

frp是国人开发的一款高性能的内网穿透反向代理服务器,项目在github上开源。架构上分为服务端和客户端:服务端负责管理工作,转发外网连接到客户端;客户端经过授权连上服务端后,将传输过来的流量转到内网端口。frp支持传输层的tcp/udp协议,也支持应用层的http/https协议。项目自带中文的README文档,对国人相当的友好。

配置frp

参考项目中的文档,基本上能完成大部分的流量转发配置。结合自身实践,给出一个转发svn流量(基于https)到内网的配置示例,供参考:

服务端

[common]
bind_addr = 0.0.0.0
bind_port = 7000

vhost_https_port = 8443
dashboard_user = tlanyan
dashboard_pwd = xxxxxx

privilege_token = 1234459adadf
subdomain_host = svn.tlanyan.pp.ua

启动服务端: ./frps -c frps.ini

客户端

[common]
server_addr = x.x.x.x
server_port = 7000
privilege_token = 1234459adadf

[web]
privilege_mode = true
type = https
local_ip = 192.168.2.x
local_port = 443
custom_domains = svn.tlanyan.pp.ua

启动客户端: ./frpc -c frpc.ini

服务端和客户端都配置好启动后,可以通过 http://外网ip:7500查看连接以及流量统计,同时访问外网ip的8443端口(需以https方式),流量会被转发内网部署svn服务的机器上。经过一个月多的测试使用,发现流量转发非常稳定,效果比SSH转发要可靠。

参考

  1. https://github.com/fatedier/frp
  2. frp内网穿透教程