×

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

hqy hqy 发表于2023-02-17 16:02:47 浏览264 评论0

抢沙发发表评论

一、需求与背景
由于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产品将适用于所有网络环境中



学习FRP就可以了,至于VPS,只能用笑来形容,这种省钱,省出问题,要自己兜!

其实,现在一个月1000左右的电信宽带套餐,ADSL拨号(1000M/50M)+固定外网IP光纤(100M/50M或者低一些),弄什么VPS,简直就是扯淡!



打赏

本文链接:https://www.kinber.cn/post/3638.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客