使用Frp实现无公网地址(家庭宽带)环境下的SSL VPN部署
  

Windroid 496631人觉得有帮助

{{ttag.title}}
一、需求与背景
由于IPv4地址紧缺,而IPv6在国内还未广泛普及,因此很多非专线的宽带接入,ISP并未提供静态固定的IP地址,甚至连动态的公网IP地址都没有,采用PPPoE拨号的家庭宽带,在接入后会获得一个100开头的地址(如下图),该地址叫运营商级别的私有地址。虽然某公司对于动态公网地址的SSL VPN已经有相关的解决方案,但是前不久咨询400得知,对于这种根本没有公网地址的拨号环境,目前还没有相应的解决方式。
本文目的就是实现在这种极为苛刻的网络条件下的SSL VPN接入,理论上采用本方案可以实现在可上Internet的前提下任何网络环境的SSL VPN接入

二、Frp简介
Frp是一款免费、开源、高性能的反向代理工具,项目地址在GitHub:https://github.com/fatedier/frp
使用Frp可以实现在无公网地址环境下的内网资源发布、端口映射、代理等功能。Frp分为有公网地址的Frps(Frp服务端)和在内网代理发布流量的Frpc(客户端),工作时,Frpc需要通过指定端口向Frps发起注册,通告需要发布的资源IP地址,端口等信息,Frps需要有可访问的固定IP地址或域名。此后,Frps将监听访问流量,然后通过已建立的Frps-Frpc通道,将请求发布到内网Frpc,Frpc代理访问内网资源,再通过Frps-Frpc的通道,将回包交给Frps,最后Frps就可以将数据返回给请求方,如下拓扑:

三、实现思路
根据上面的拓扑,我们需要实现的就是通过frpc将内网服务发布到frps,此后外面的访问者就能通过frps访问到内网的服务了。但是由于frp本身不具备身份验证,授权等隧道级的高级功能,而这些恰好是SSL VPN所能胜任的,因此,我们只需要通过frp发布SSL VPN服务,再通过SSL VPN进行身份认证和资源授权即可

四、准备
1、Frps需要部署在有静态公网地址的网络环境中,最方便的方式可以考虑在各大公有云购买一台带有静态地址的VPS或云主机,操作系统选择Linux即可。
2、Frpc需要部署在内网,最好也使用独立的一台Linux主机或虚拟机。
3、Frp的程序可以在GitHub下载:https://github.com/fatedier/frp/releases。注意软件架构和平台兼容性。该软件包包含了Frps和Frpc,只需要下载一个就可以。

五、具体步骤
5.1 部署Frps
首先将刚才下载的软件包上传到VPS并解压,就看到了Frp的软件目录
进入frp的目录,可以看到frpc frpc.ini frpc_full.ini frps frps.ini frps_full.ini这几个文件,frpc开头的都是与客户端相关的文件,frps都是和服务端相关的文件,因此在这里我们完全可以删除和服务器无关的文件,删除后如下图
frps是主程序,frps_full.ini是可供参考的全部配置信息,frps.ini是实际的配置文件。
完整的配置文件较为复杂,功能也很多,这里只介绍一部分参数,以下就是frps.ini配置文件
bind_addr是frps的监听地址,0.0.0.0表示监听本地全部地址
bind_port是frps监听frpc的通信端口,默认为7000
dashboard_port是frps的Web监控页面的端口,下面两个是监控页面的登录用户名以及密码,可以根据需要更改
token是密钥,只有客户端配置了相同的token值,才允许接入frps。
配置完成后,使用./frps -c frps.ini启动frps服务端,-c参数可以指定启动时采用的配置文件。启动后,放开本地防火墙相应端口和VPS防火墙的相关端口,下图是某公司的网络安全组的配置,其他云服务商可参考相应的配置文档
之后尝试打开frps监控页面,正常显示表示frps配置成功
5.2 部署Frpc
frpc的安装和frps完全一致,只是启动的程序不同。不再赘述。
frpc的配置与frps类似,这里直接介绍frps.ini
完整的配置文件同样可以参考frpc_full.ini或官方文档,这里仅介绍部分配置
server_addr是服务端的公网地址
server_port是frps的监听端口,这里也就是上文的7000
token字段需要和服务端的token字段一致
下面的内容,每个字段头代表一个需要发布的独立服务名,如SSL VPN。
type表示服务类型,因为这里仅仅需要将SSL VPN的443端口映射即可,因此选择tcp
local_ip为服务的内网地址,如192.168.xxx.xxx
local_port为服务的真实端口,对于SSL VPN就是443
remote_port为发布到公网的端口,即用户访问时所使用的端口,自定义即可,只要不冲突
配置完成后使用./frpc -c frpc.ini启动客户端
然后同样地,需要在frpc和frps的本地防火墙放通相关端口,然后VPS防火墙也要放通相关端口
5.3 SSL VPN配置
这里只要按照SSL VPN单臂部署的流程正常配置就可以,不再赘述

六、实现与验证
以上全部配置完成后,前往frps监控页面,即可看到如下发布的资源:
现在就尝试使用VPS的公网地址和发布的端口号访问SSL VPN了
登录,访问SSL VPN发布的资源
成功打开资源页面

七、TIPS
1、本方案理论上可使用frp在任何NAT网络环境中实现SSL VPN的接入
2、对于SSL VPN其他高级功能,并未验证可行性,需要后续进一步验证。
3、SSL VPN发布资源时,B/S应用资源建议采用“TCP资源”或“L3VPN”发布,使用HTTP资源发布时,测试环境下跨三层的资源无法访问
4、Frp的功能远不止这些,其他玩法可以参考官方文档,并且Frp的开发还在进行,后续功能可持续关注
5、Frp是一个前台程序,意味着一旦关闭终端,ssh或者ctrl+c,程序将终止,因此在生产环境中,建议使用Supervisor等守护程序控制frp的启动与终止,当然这部分超过了本文讨论的内容

八、方案价值与建议
目前运营商专线的价格依然远高于家庭宽带,一些小型企业,尤其对移动办公有需求的小型企业,对SSL VPN依然有需求,采用这种家庭宽带+VPS 部署的方案,成本依然远低于运营商专线,每月平均多花100到300元,就能获得与专线一样的SSL VPN使用体验。
同时,如果某公司考虑后续版本中将Frpc模块内置到SSL VPN中,内网穿透能力将大大增强,则理论上SSL VPN产品将适用于所有网络环境中

打赏鼓励作者,期待更多好文!

打赏
25人已打赏

sangfor_闪电回_小六 发表于 2018-11-14 09:27
  
干货很足,感谢分享
余泳杰 发表于 2018-11-15 11:04
  

干货很足,感谢分享
nightmare 发表于 2018-11-16 08:30
  
干货很足,感谢分享
ie5000 发表于 2018-11-16 23:43
  
学习一下
弓长湿兄 发表于 2018-11-19 15:11
  
学习一下
ID404 发表于 2018-11-19 21:10
  
这样的话所有流量都经过frps服务器,如果VPS按流量计算的话费用就比较高了。
ie5000 发表于 2018-11-19 23:34
  
厉害,学习一下
法律框架 发表于 2018-11-20 08:42
  
干货很足,感谢分享
xiexie 发表于 2018-11-20 13:50
  
干货很足,感谢分享
发表新帖
热门标签
全部标签>
西北区每日一问
安全效果
高手请过招
【 社区to talk】
技术盲盒
社区新周刊
干货满满
每日一问
新版本体验
技术咨询
产品连连看
纪元平台
标准化排查
GIF动图学习
功能体验
社区帮助指南
信服课堂视频
安装部署配置
解决方案
SDP百科
自助服务平台操作指引
玩转零信任
S豆商城资讯
秒懂零信任
每周精选
畅聊IT
答题自测
专家问答
技术笔记
技术圆桌
在线直播
MVP
网络基础知识
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
云计算知识
用户认证
原创分享
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
排障笔记本
产品预警公告
信服圈儿
技术争霸赛
「智能机器人」
追光者计划
深信服技术支持平台
答题榜单公布
2023技术争霸赛专题
通用技术
卧龙计划
华北区拉练
天逸直播
以战代练
技术晨报
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
2024年技术争霸赛
北京区每日一练
场景专题
故障笔记
排障那些事
升级&主动服务
高频问题集锦
POC测试案例
全能先锋系列
云化安全能力

本版版主

3
0
3

发帖

粉丝

关注

27
77
84

发帖

粉丝

关注

本版达人

新手24268...

本周建议达人

阿凯

本周分享达人

新手39341...

本周提问达人