之前介绍过使用SSH转发端口进行内网穿透,实践中发现效果不理想:刚开始转发时正常,时间一长连接会hang住。寻思做内网穿透应该有更专业的工具,于是找到了frp。
frp是国人开发的一款高性能的内网穿透反向代理服务器,项目在github上开源。架构上分为服务端和客户端:服务端负责管理工作,转发外网连接到客户端;客户端经过授权连上服务端后,将传输过来的流量转到内网端口。frp支持传输层的tcp/udp协议,也支持应用层的http/https协议。项目自带中文的README文档,对国人相当的友好。
参考项目中的文档,基本上能完成大部分的流量转发配置。结合自身实践,给出一个转发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.me
启动服务端: ./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.me
启动客户端: ./frpc -c frpc.ini
服务端和客户端都配置好启动后,可以通过 http://外网ip:7500查看连接以及流量统计,同时访问外网ip的8443端口(需以https方式),流量会被转发内网部署svn服务的机器上。经过一个月多的测试使用,发现流量转发非常稳定,效果比SSH转发要可靠。