视频教程
youtube播放地址:https://youtu.be/Ob23SAAR1-g
专线机场推荐:https://b.880805.xyz
GIA线路VPS推荐:https://bwg.880805.xyz
相关链接
v2ray:https://github.com/v2fly/v2ray-core
一键安装脚本:bash <(curl -L https://raw.githubusercontent.com/bulianglin/fhs-install-v2ray/master/install-release.sh)
支持域前置CDN:https://www.fastly.com
寻找前置域:https://fofa.info/result?qbase64=Y2xvdWRfbmFtZT0iZmFzdGx5Ig%3D%3D
服务器相关指令
服务端配置
客户端配置(无分流)
视频文稿(忽略)
meek是一个速度极慢的底层传输协议,不过他有个无法替代的优势,那就是合理的配置可以实现几乎无法被封禁,属于是保命防失联的锦囊,关键时刻打开才能发挥最大作用,本期就来讲讲meek协议以及如何搭建meek节点
meek协议早在2014年就存在了,当时主要作为洋葱浏览器的可插拔传输层,负责加密伪装并发送给tor中继节点,可以绕过一些地区对tor节点的审查,目前洋葱浏览器依然提供了meek网桥
5月31号,v2ray 更新的5.7版本中加入了对meek的支持,不过并没有引起太多的讨论,因为meek的传输效率很低,对比目前已存在的传输协议速度慢很多,甚至不如3g时代,无法作为日常科学上网使用,但meek可以套用任何CDN,配合一些支持域前置的cdn商家,实现隐藏源服务器的ip和域名信息,使防火墙找不到要墙的目标,达到永不被墙的目的,所以meek可以作为一个备用节点搭建在你的vps上,平时不用它,当你的所有翻墙手段全部失效的时候,就可以使用meek应急翻墙上谷歌,寻找新的续命手段,比如趁机买个比较靠谱的机场,所以还是有作用的,尤其是对一些白名单地区,担心失联的朋友建议搭建一个作为备用
简单来讲,meek是通过标准的http格式将数据传输到代理服务器,以这个配置为例,当我们通过浏览器访问谷歌的时候,由于配置了代理,浏览器会将请求发送到本机的v2ray客户端,v2ray拿到请求后,根据配置,将数据封装成vless的格式,并且由于底层传输方式为meek,所以会使用meek封装vless的数据,而meek会将其封装成一个标准的http请求,发送到指定的url,也就是我们的代理服务器,由于是一个标准的http格式,所以从防火墙或者cdn的角度来看他就是一个普通的http请求,只不过里面承载的数据是vless,而vless里面的数据是访问谷歌,数据包来到代理服务器,通过meek解封装,拿到了vless的数据,又通过vless解析获取到了需要访问的网址,于是就帮我们访问谷歌,要注意的是,普通的http是无法由服务器主动推送数据给客户端的,刚才服务器在收到meek数据之后已经和客户端完成了通信,而现在服务端帮我们访问谷歌获取到的数据无法主动发回给我们,只能由我们主动找服务器要数据,所以客户端会主动再发送一条http请求,找服务器要数据,如果服务器还没有收到谷歌的数据,则会给我们返回一个空的响应,过一会客户端又会找服务器要数据,如果有数据就返回给客户端,每次最多只能传输64kb的数据,而且必须按顺序接收,就这样一点一点把数据传完,这就是meek大致的工作流程,这种轮询的方式注定了meek的速度快不了
而meek的优点就是前面讲了他是标准的http请求,所以可以套用任何cdn,不像ws节点,必须要使用支持websocket的cdn,关于cdn的原理我在节点搭建系列第八节详细讲过就不浪费时间解释了
但光有这一个优势并没多大作用,毕竟速度太慢了,真正让meek发挥优势的,是套用支持域前置的cdn可以实现白名单,相信用ws套cdn的朋友遇到过域名被污染,被阻断的情况,因为套了cdn,防火墙还是可以通过dns或者sni看到你的域名,从而对域名进行污染和阻断,而域前置可以做到让防火墙看不到你的域名
以这个配置为例,假设baidu使用的cdn提供商支持域前置,还是和之前一样,浏览器访问谷歌的请求会交给v2ray,v2ray使用vless对数据进行封装,然后再由meek将其封装成标准的http请求,请求目标是我们设置的域名qiandu.com,这个域名和baidu使用的是同一家cdn提供商,并且qiandu.com绑定了我们vps的ip地址,另外由于开启了tls,这个请求还会使用tls进行加密封装,并且目标从meek的qiandu变成了我们设置的servername baidu,也就是sni,v2ray将这个数据包发给目标为baidu.com的cdn服务器,防火墙将会看到我们在访问百度,cdn服务器收到百度的数据,将会进行tls解密,获取到meek的内容,正常情况下,cdn应该去找baidu的真实服务器要数据,再返回给客户端,但这个cdn商家支持域前置,于是它会看meek的目标是qiandu,所以他会去找qiandu的真实服务器要数据,而qiandu绑定的ip地址是我们的vps,所以这条数据会发给我们的vps,vps收到数据之后的步骤刚才已经讲过了,回来的数据按相反的步骤理解即可,从防火墙的角度来看,我们只是在访问百度,这就是域前置的效果,简单来讲就是外层的sni目标和内层的host目标不是同一个
域前置并不是什么新技术,在meek刚出来那会,cf、cft、谷歌、微软等大多数cdn商家都支持域前置,但这样会造成一些合规问题,比如挂别人的域名跑恶意流量,以至于很多cdn商家认为这是一种缺陷,不再提供支持,目前支持域前置的商家只剩微软的az,以及本期演示的fastly,可能还有其他商家,有知道的朋友可以在评论区给大家分享
接下来就是实际的搭建过程了,只有操作步骤,不会解释为什么这么操作,如果刚才讲的都理解了应该就没什么疑问,目前只有v2ray支持meek,其实我是想等周边配套设施完善一点再做教程,这样各个终端都能视频演示了,结果半年过去了没啥动静,主要是这个协议速度确实太慢了,而且支持域前置的cdn商家也不多,所以目前要使用的话并不是很方便,另外v2ray官方最近比较活跃,上周刚添加了tun模式,这周又添加了新的传输协议HTTPUpgrade,不过HTTPUpgrade要套cdn的话还是需要商家支持websocket,感兴趣的朋友可以去看看
首先跟着视频演示进入这个网址下载适合你操作系统的v2ray版本,将其解压出来,接着使用这条指令在服务端一键安装v2ray,安装完成后进入这个目录编辑v2ray的配置文件,在修改配置文件之前,我们先注册一个支持域前置的cdn平台账号,以fastly为例,他家也是一个大型的CDN提供商,目标用户是企业,每个月最低消费50刀,好在提供了免费试用账户,看网上说只能试用一个月,但官网又说是每个月都能试用50刀的流量,我还没用满一个月所以暂不清楚,注册非常简单,按自己的需求填写,你甚至可以使用临时邮箱,所以即使只能试用一个月也不用担心,登陆之后跟着视频演示创建一个cdn服务,域名这里可以随便填写,这家不仅支持域前置,还不验证域名所有者,简直就是理想型,所以我们也不需要有自己的域名,随便输入一个即可,显示被人占用了,换一个, 点击这里进入第二步,填写你的服务器ip地址, 默认情况下回源使用80端口,他家支持自定义端口,建议改一个不常用的端口,比如1888,保存之后就可以点击右上角的部署了,这样我们就配置好了,操作非常简单,注意他家的操作逻辑和cf不一样,部署之后就锁定了不能再修改,如果需要修改配置 需要克隆一个新的版本,然后再进行修改,比如把端口改成18880, 点击右上角重新部署,cdn平台这边的操作就算是完成了,需要稍等一两分钟才会生效,复制端口,将配置文件的监听端口替换掉,注意vps防火墙要放行对应的端口,将整个配置复制粘贴到vps,点击保存,先来查看一下服务器v2ray状态,目前没有启动,使用这条指令启动,接着再来查看状态,显示绿色就表示启动成功,如果显示红色说明启动失败,建议检测配置文件是否有错误,也可以再执行这条指令让他开机自启,这样服务端也配置好了,应该是非常简单的,最后再来配置客户端,在这里填入刚才在cdn中设置的随机域名,配置好了,没错就是这么简单,全选复制,进入v2ray的目录,打开config文件,将里面的内容替换掉,这个配置文件的效果就是防火墙看到的是我们在访问gov.uk这个网站,而实际上我们在使用meek进行科学上网,如果你不嫌麻烦,可以自己找一个挂在fastly上的网站,简单演示一下,比如选个香港的,这个一看就是正经网站,复制网站域名,将这两个地方替换掉,点击保存,在地址栏输入cmd,输入这条指令启动v2ray,启动成功后打开系统代理设置页面,配置文件中的http代理监听端口是1081,保存之后应该就能成功科学上网了,可以看到已经有日志输出,先查个ip,确实是经过了vps代理,尝试访问谷歌,看这网页打开的速度感觉还不错,嗯,起码能听个响,甚至还能缓冲十秒,这个速度相信没人能忍受,但正如v2ray官方说的,不求跑满百K带宽,只愿送抵万金家书,理论上这个速度还有提升的空间,看看以后是否还有更新吧,最后我们可以简单抓包验证一下,目标ip是fastly的cdn,目标域名是别人挂在fastly上的网站,没有我们自己的任何信息,fastly能根据我们设置的虚假host将数据准确交给我们的vps,实现真正的永不被墙,当然meek的流量也会有时序特征,以后可能也会被探测,但我认为人生已经如此艰难,有些事情就不会拆穿,另外如果支持域前置的cdn商家同时也支持websocket,比如本期讲的fastly,那么我们搭建的ws节点也能实现域前置,如果大家有需要的话下期接着讲。
原文:
https://bulianglin.com/archives/meek.html