bjdgyc / anylink

AnyLink是一个企业级远程办公 ssl vpn 软件,可以支持多人同时在线使用。基于 openconnect 协议开发,并且借鉴了 ocserv 的开发思路,可以完全兼容 AnyConnect 客户端。
GNU Affero General Public License v3.0
1.61k stars 385 forks source link

实现所谓的 webvpn 方法 #157

Closed itviewer closed 1 year ago

itviewer commented 1 year ago

新开个 issue 关联 https://github.com/bjdgyc/anylink/issues/149 来讨论所谓的 webvpn 技术途径和实现必要性 对于部分非技术企业或高校用户场景,他们仅需要通过浏览器访问内网的简单资源,如简单的内网网站,这些用户其实需要的是一个代理服务,并且似乎混淆了代理和虚拟局域网(VPN)的概念,同时,又不可能让这些用户通过配置浏览器或操作系统代理的方法,使用传统意义上的HTTP代理服务器(指反向代理服务器)。 那怎么迎合这种需求,实现 webvpn 这个噱头呢?一种可能的途径是添加和移除url前缀: 比如要访问内网资源 http://xxoo.com/yy ,我们的 webvpn 地址为 https://vpn.test.vqilu.cn/webvpn

这种方式在面对比如大文件上传下载等特殊功能时可能会有问题,而且是个比较脏的活,是一种变态的代理,代理,代理!和 vpn 技术没有半毛关系。希望有神人能给出其它技术途径!

bjdgyc commented 1 year ago

这种太复杂,牵扯到的不光是html和js内的地址,还有js动态执行的内容,还有跨域信息等。看看有没有高人回答

xufengnian commented 1 year ago

我看了一下瑞智康诚在某高校的WebVPN的实践,限制条件不少,且为了体验更好还是需要对接单点登录系统SSO 1.首先需要在webvpn地址完成登录,比如目标高校主站地址是www.test.com,那么webvpn地址一般就是webvpn.test.com,一般登录进去可以看到几个SSO的导航页,

2.同时不是所有内网站点都可以通过webvpn代理,首先内网地址要有域名,比如A.test.com,然后通过webVPN代理时,转化后的域名为A.webvpn.test.com,由于cookie的同源策略和常规的浏览器同源策略不同,一个页面可以为本域和任何父域名设置cookie,只要父域不是公共后缀(public suffix)即可,也就是说A.webvpn.test.com完全可以使用webvpn.test.com的cookie

  1. 如果想webvpn登录后不用再登录其他的内部地址,也是通过向SSO平台提交ticket获得目标地址的cookie,js从SSO的响应包里获取cookie,然后添加到请求的cookie字段

所以我理解瑞智康诚这种实践的前提:是对方的内网站点要有域名,利用cookie的同源策略特殊性完成cookie的传递,同时必要条件下(资源的同源策略限制)会对目标内网做一些改造,把目标内网的同源策略做松甚至关闭吧,不是一种通用解决方案