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

Windroid 24199741人觉得有帮助

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

三、实现思路
根据上面的拓扑,我们需要实现的就是通过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的软件目录
179245be923ea3aba0.png
进入frp的目录,可以看到frpc frpc.ini frpc_full.ini frps frps.ini frps_full.ini这几个文件,frpc开头的都是与客户端相关的文件,frps都是和服务端相关的文件,因此在这里我们完全可以删除和服务器无关的文件,删除后如下图
529565be924a2476de.png
frps是主程序,frps_full.ini是可供参考的全部配置信息,frps.ini是实际的配置文件。
完整的配置文件较为复杂,功能也很多,这里只介绍一部分参数,以下就是frps.ini配置文件
302815be926f11501f.png
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防火墙的相关端口,下图是某公司的网络安全组的配置,其他云服务商可参考相应的配置文档
360445be928db0ee4c.png
之后尝试打开frps监控页面,正常显示表示frps配置成功
699645be929389dbb1.png
5.2 部署Frpc
frpc的安装和frps完全一致,只是启动的程序不同。不再赘述。
frpc的配置与frps类似,这里直接介绍frps.ini
339765be92aa822e09.png
完整的配置文件同样可以参考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监控页面,即可看到如下发布的资源:
969255be92d286be90.png
现在就尝试使用VPS的公网地址和发布的端口号访问SSL VPN了
299625be92d945b8f7.png
登录,访问SSL VPN发布的资源
176675be92df1d447a.png
成功打开资源页面
779445be92e2ac3b59.png

七、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产品将适用于所有网络环境中

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

打赏
24人已打赏

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
  
干货很足,感谢分享
发表新帖
热门标签
全部标签>
每日一问
技术盲盒
技术笔记
干货满满
信服课堂视频
功能体验
GIF动图学习
标准化排查
产品连连看
新版本体验
每周精选
2023技术争霸赛专题
自助服务平台操作指引
秒懂零信任
技术晨报
技术咨询
安装部署配置
答题自测
通用技术
排障笔记本
社区帮助指南
在线直播
网络基础知识
玩转零信任
深信服技术支持平台
畅聊IT
专家问答
技术圆桌
MVP
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
云计算知识
用户认证
原创分享
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
产品预警公告
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播

本版版主

26
76
83

发帖

粉丝

关注

本版达人

新手24268...

本周建议达人

阿凯

本周分享达人

新手39341...

本周提问达人