Total Pageviews

Wednesday, 23 September 2026

永不被墙的vmess+ws,突破白名单限制的免费域前置CDN,无需域名和证书,快速优选gcore和fastly的IP,0-RTT的WS配置,HTTPUpgrade与WebSocket的区别


相关链接

fastly:https://www.fastly.com
fastly前置域:https://fofa.info/result?qbase64=Y2xvdWRfbmFtZT0iZmFzdGx5Ig%3D%3D
VCL脚本:

if (req.http.Upgrade) {
    return (upgrade);
}

gcore:https://www.gcore.com
gcore前置域:

gcore.com
speedtest.gcore.com
hk2-speedtest.tools.gcore.com
la2-speedtest.tools.gcore.com
jp1-speedtest.tools.gcore.com
kal-speedtest.tools.gcore.com
kx-speedtest.tools.gcore.com
lgs-speedtest.tools.gcore.com
min4-speedtest.tools.gcore.com
ny2-speedtest.tools.gcore.com
pa5-speedtest.tools.gcore.com
pl1-speedtest.tools.gcore.com
sg1-speedtest.tools.gcore.com
sp3-speedtest.tools.gcore.com
sy4-speedtest.tools.gcore.com
teg-speedtest.tools.gcore.com
ww-speedtest.tools.gcore.com



v2ray新出的meek协议,通过域前置可以实现节点永不被墙,也讲解了域前置的原理,感兴趣的朋友可以回看,虽然meek可以套用任意cdn ,但代价是必须传输标准的http数据,而http必须先由客户端发起请求,服务端才能推送数据,这种半双工的传输方式效率很低,速度有限,只能当作应急备用方案,无法作为日常科学上网使用,而今天要讲的websocket就不一样了,通过在HTTP协议头部插入Upgrade字段升级成websocket协议,一旦升级完成,WebSocket就会接管连接,然后就没HTTP啥事了,虽说是通过http升级来的,但他们是两个完全不同的协议,WebSocket并不是基于http,而是基于tcp,基于tcp的WebSocket可以实现全双工的双向通信,对比基于http的半双工meek,ws的传输效率和速度都会有很大的提升

接下来简单介绍一下ws的通信过程,如果你对这部分内容不感兴趣,可以直接点击时间轴跳转到搭建部分
以这个vmess+ws配置为例,假设我们已经套好了cdn,当我们通过浏览器访问谷歌的时候,由于配置了代理,浏览器会将请求发送到本机的v2ray客户端,v2ray拿到请求后,根据配置,将数据封装成vmess的格式,默认情况下vmess会对数据进行aes加密,并且由于底层传输方式为ws,v2ray会先发起一个http请求,内容是请求升级为ws协议,数据来到cdn服务器,如果cdn支持转发websocket,那么这条请求将会转发给host域名对应的ip地址,也就是你的vps,你的vps收到数据后,会回复一个101响应,表示协议升级成功,接下来就能使用websocket的帧格式发送数据了,你的vmess数据会封装在ws帧中,cdn会将数据转交给你的节点,节点收到数据后会一层层解封装,拿到客户端的意图,然后帮你访问对应的网站,这就是ws的基本通信过程,此时你会发现一个问题,v2ray必须先发起一个http请求将其升级为ws,并且需要等待服务器的回复,然后才能开始发送vmess数据,这样的话ws对比裸tcp就多了一个rtt的延迟,所以ws节点对比tcp要稍微慢一点,但是tcp没法套cdn,总之各有各的优势,
另外xray的ws可以实现0rtt,当你在ws路径后面加上?ed=2048的时候,客户端在发送http升级ws的请求中,会加入一个sec-websocket-protocol的子协议字段,里面会放入应该在升级之后才会开始发送的数据,也就是说在请求升级ws阶段就携带了vmess数据,从而实现0rtt,但并不是所有客户端都支持这种方式,总之在不清楚是否支持的情况下,你可以在路径后面加入?ed=2048,支持的话就会实现0rtt,不支持的话也不会报错

最后再说一下v2ray近期更新的httpUpgrade的传输协议,它主要就是升级成ws协议,但是里面不传输ws的帧格式,首先升级ws的步骤还是一样的,服务器会回复一个101响应表示升级成功,但接下来就不太一样了,在这条已经建立好的连接中传输的直接就是vmess数据,并不会再封装成ws帧,对于客户端和服务器而言都会减轻一点压力,提升性能,但cdn可能不会接受非标准的ws帧数据,感兴趣的朋友可以自行测试 ,另外httpUpgrade也有升级ws这个步骤,所以cdn也必须要支持转发websocket才行,而websocket并不是所有cdn都支持,这也是meek还能存在的原因,本期主要演示比较成熟的ws传输协议

接下来就是纯搭建步骤,为了让操作看上去很简单,所以不会讲解任何原理。

首先你需要一个ws的节点,vmess或者vless都可以,建议使用vmess,因为vless在没套tls的时候发送的是明文数据。

我使用的端口是18880,将节点导入到v2rayN中,先来测试一下真链接延迟,有延迟说明可以正常使用,接下来就可以套用域前置cdn了,先以上期介绍过的fastly为例,相关网址链接我会放在视频下方的说明栏,注册非常简单,只需要邮箱即可,如果你和我一样出现错误的提示信息,需要换个节点再重新尝试注册,接着就会收到激活邮件,然后登陆即可,跟着视频演示创建cdn,在这里随便填写一个域名,为了加深大家的印象,我填入woshiwoshiyansebuyiyangdeyanhuo.com,点击添加,接着填写这个域名对应的ip,也就是填入我们节点的ip地址,默认情况下是使用80端口回源,点击这里进行修改,在这里输入我们节点的端口,也就是18880,点击更新,接着来到websocket这里,他家的ws回源并不是免费的,只能试用一个月,不过他家的注册很简单,你甚至可以使用临时邮箱,点击试用,接着开启服务,光启动了服务还没用,还需要添加一段vcl脚本,跟着视频演示创建一个vcl片段,名称写ws,复制这段内容,粘贴到这里,点击创建,最后点击右上角的部署,这样fastly的配置就算是完成了,需要等个一两分钟才会生效,接下来给节点套上fastly的cdn,伪装域名这里填写我们刚才设置的woshiwoshiyansebuyiyangdeyanhuo.com,地址这里填写fastly家的ip,或者挂在fastly上的域名,按照上期讲过的方法随便找一个,端口改成80,测试真链接,无法正常使用,这个方式找到的域名并不是百分之百可以使用,可能已经过期了,你可以多换几个试试,我这里就直接输入英国政府的官网,这个网站挂在fastly上,有延迟说明可以正常使用,这样我们就成功的实现了域前置cdn,域名不是我们的,ip也不是我们的,从中间人的角度来看,你是通过fastly的cdn访问woshiwoshiyansebuyiyangdeyanhuo.com这个网站,这样就能做到你vps的IP绝对不会被墙,但这还不是域前置的完全体,完全体需要套tls,复制一个节点出来,将端口改成443,开启tls,sni同样填写gov.uk,点击确定,尝试测真链接,同样可以正常使用,使用这个节点进行科学上网,从中间人的角度来看,你就是在访问gov.uk这个网站,连你自定义的域名都隐藏了,当你还在偷别人证书的时候,域前置已经在用别人的证书了。

接着再来演示gcore,注册同样很简单,只需要一个邮箱即可,进入你邮箱中收到的激活链接,会自动登陆到gcore,点击这里将语言调整为中文,接着创建cdn,选择免费计划,免费计划每个月有1tb流量,账单地址随便输入,激活服务需要几分钟,耐心等待一下,自动跳转到这个页面后,点击创建cdn资源,随便输入一个域名,为了加深大家的印象,我就输入的和fastly一样,点击确认,点击添加dns记录,在ipv4地址这里填入你节点的ip地址,点击确认,他这里虽然要求我们修改域名的ns记录,但我实测发现,即使不改也可以正常使用,所以gcore也是不会验证域名所有者的,再次点击确认,打开资源设置,点击编辑此组,取消勾选使用默认端口,在这里输入你的节点端口,我的是18880,保存更改,这样gcore也配置好了,接着我们再来配置套用gcore的节点,先复制一个原始节点出来,地址改成gcore.com,端口改成80,伪装域名填写刚才设置的woshiwoshiyansebuyiyangdeyanhuo.com,点击确定,测试真链接,无法链接,因为他家的生效时间有点长,可能需要等待10-20分钟才会生效,所以需要耐心等待一下,经过漫长的等待,目前终于是通了,从中间人的角度来看,我是通过gcore的cdn访问woshiwoshiyansebuyiyangdeyanhuo.com这个网站,复制一个出来,同样的可以给他套上tls,实现完全体域前置,将端口改成443,他家的域前置有限制,并不是所有挂在他家的网站都能拿来当前置域,只能用他们的域名,我这里收集了一些子域名,随便选择一个,当然你也可以直接用gcore.com这个主域,但不建议这么做,将地址替换掉,开启tls,sni同样输入这个域名,这样我们的节点就套上了tls了,使用这个节点进行科学上网,从中间人的角度来看,你就是在访问这个jp1的网站,

套了cdn之后,你还可以进行优选ip,搭配我之前的工具可以进行快速优选,复制fastly的节点,粘贴到这里,cdn提供商选择fastly,这个工具的详细使用教程可以回看我之前的视频,点击提取节点,下方会提取出1000个他家ip的节点,再配合我之前做的全自动测速软件使用,点击这里下载,下载解压之后打开主程序,将刚才生成的1000个节点复制粘贴到工具列表,也可以同时复制gcore套了tls的节点,cdn提供商选择gcore,点击提取,同样复制到工具列表中,建议改成xray内核,这个软件的详细使用教程也可以回看之前的内容,点击一件自动测速,软件会自动进行真链接延迟测试,然后会自动进行下载速度测试,这样就可以获取到一批速度还不错的优选ip节点了,并且每个节点都是套了域前置的,不用担心你的vps被墙

几乎永不被墙的meek协议,配合域前置CDN实现隐藏所有信息,在你关键时刻续命防失联的锦囊妙计,代价居然是重回3G时代


相关链接

v2ray:https://github.com/v2fly/v2ray-core
支持域前置CDN:https://www.fastly.com
寻找前置域:https://fofa.info/result?qbase64=Y2xvdWRfbmFtZT0iZmFzdGx5Ig%3D%3D

服务器相关指令
服务端配置

{
  "outbounds": [
    {
      "protocol": "freedom"
    }
  ],
  "inbounds": [
    {
      "listen": "0.0.0.0",
      "port": 18880,  //自行修改
      "protocol": "vless",
      "settings": {
        "users": [
          "4382c3e8-5e6a-4e37-8613-2d7fe09fbfee" //自行修改
        ]
      },
      "streamSettings": {
        "transport": "meek",
        "transportSettings": {
          "url": "http://127.0.0.1"
        }
      }
    }
  ]
}

Bash
复制
客户端配置(无分流)

{
  "outbounds": [
    {
      "protocol": "vless",
      "settings": {
        "port": 443,
        "uuid": "4382c3e8-5e6a-4e37-8613-2d7fe09fbfee", //自行修改
        "address": "gov.uk" //前置域 or 优选IP
      },
      "streamSettings": {
        "transport": "meek",
        "transportSettings": {
          "url": "https://random_domain" //自行修改
        },
        "security": "tls",
        "securitySettings": {
          "serverName": "gov.uk" //前置域
        }
      }
    }
  ],
  "inbounds": [
    {
      "protocol": "socks",
      "settings": {
        "udpEnabled": true,
        "address": "127.0.0.1",
        "packetEncoding": "Packet"
      },
      "port": 1080,
      "listen": "127.0.0.1"
    },
    {
      "protocol": "http",
      "port": 1081,
      "listen": "127.0.0.1"
    }
  ]
}

Bash
复制
视频文稿(忽略)

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节点也能实现域前置.

Tuesday, 22 September 2026

售价15,900美元的特斯拉Model 2终于来了——你需要知道的一切!震撼整个市场

 

monkeycode-ai.net 替你部署git项目(build a web app)

我访问https://monkeycode-ai.net ,用我的google a/c: briteming@gmail.com登录。

然后在对话框里,我输入了下面的问题(蓝色文字)
09-22 19:01:40

can you please build this project https://github.com/brightmann/nextjs-lexical-blog/ for me? and meanwhile, give me the built web app's url
09-22 19:02:01

I'll clone the repo and build it. Let me start by checking the workspace.
09-22 19:02:01
Run command "pwd && ls -la /workspace && git --version && node --version && npm --version"
09-22 19:02:22
Run command "git remote -v && git branch -a && git log --oneline -5"
09-22 19:02:35
Run command "cat /workspace/.gitignore"
09-22 19:02:49
Run command "git clone --depth 1 https://github.com/brightmann/nextjs-lexical-blog.git /tmp/opencode/nextjs-lexical-blog 2>&1 | tail -20"
09-22 19:02:57
Run command "ls -la /tmp/opencode/nextjs-lexical-blog"
09-22 19:03:08
Read file "/tmp/opencode/nextjs-lexical-blog/package.json"
09-22 19:03:08
Read file "/tmp/opencode/nextjs-lexical-blog/next.config.js"
09-22 19:03:08
Read file "/tmp/opencode/nextjs-lexical-blog/.env.example"
09-22 19:03:09
Read file "/tmp/opencode/nextjs-lexical-blog/.gitignore"
.....
09-22 19:15:44
Done. The project is built and running.

Preview URL: 
https://3000-284a4ee94fa25c93.monkeycode-ai.live/

Details:

    Cloned brightmann/nextjs-lexical-blog into /workspace, installed deps with pnpm install, built with pnpm run build (78 static pages generated, success).
    Served the production build via next start -H 0.0.0.0 -p 3000 in background terminal term_1790129446808_1.
    Homepage and /posts return HTTP 200; preview proxy connection verified.

Note: package.json pins "next": "latest", which resolved to Next 16.3.6 while React stayed 18.3.1. The build works, but if you hit runtime issues I'd recommend pinning Next to 14.2.x. Want me to do that?


后来,
09-22 19:40:17

i have pushed some codes to the project https://github.com/brightmann/nextjs-lexical-blog/ ,can u please rebuild it?

.....
Build succeeded with the new post. Restarting the server.
09-22 19:56:07
Create background task
09-22 19:56:16
Run command "sleep 5 && cat /tmp/terminal_term_1790132166820_2.log"
09-22 19:56:27
Run command "curl -s --max-time 15 -o /dev/null -w "home: %{http_code}\n" "https://3000-fa358d06dc5d8aac.monkeycode-ai.live/"; curl -s --max-time 15 -o /dev/null -w "new post: %{http_code}\n" "https://3000-fa358d06dc5d8aac.monkeycode-ai.live/blog/spring-in-the-ugly-lane"; curl -s --max-time 15 "https://3000-fa358d06dc5d8aac.monkeycode-ai.live/.well-known/mcai-preview-connect-status-detect" | grep -c "mcai-preview-error" ; echo "(0 = preview proxy OK)""
09-22 19:56:44
Run command "curl -s --max-time 15 -o /dev/null -w "old post: %{http_code}\n" "https://3000-fa358d06dc5d8aac.monkeycode-ai.live/blog/permanent-criminals""
09-22 19:56:54

Rebuilt and redeployed.

URL (unchanged): https://3000-284a4ee94fa25c93.monkeycode-ai.live/

    Removed data/posts/permanent-criminals.md (moved to /tmp/opencode/removed-posts/ as backup; not deleted).
    Added upstream's new post data/posts/spring-in-the-ugly-lane.md.
    Rebuilt with pnpm run build and restarted next start on port 3000 (terminal term_1790132166820_2).

Verification: home 200, new post /blog/spring-in-the-ugly-lane 200, old post /blog/permanent-criminals 404

它真的给我建好了web app: https://3000-284a4ee94fa25c93.monkeycode-ai.live/

 不过git repo(https://github.com/brightmann/nextjs-lexical-blog)的内容发生变化后,它并不会自动redeploy. 需要请求它rebuild it才行。

这是我第一次真正体会ai的强大。 

一个账号下,只能 build a web app

 

----------------------------------------

 一个免费开通的2核8G云服务器monkeycode-ai.net 

一个AI平台的开发环境可以被当作免费的2核8G云服务器使用。注册登录后,通过对话框创建环境,用户可以获得一个永久虚拟机,并利用其终端功能安装Docker或部署GitHub项目。

该环境还提供二级域名,可用于访问搭建的网站。但需注意,该服务由阿里云提供,有随时失效的风险,且若3天无对话互动,服务器环境会被回收,不建议存放重要数据。

这是一个 AI 平台的开发环境,但它和平常的开发环境不一样.

    类似于  Linux 服务器:它可以让我们开启一个终端,类似于  Linux 系统。你可以随意使用这个终端,甚至安装 Docker 或 GitHub 的项目,这让它变成了一个可以玩的 Linux 服务器。
    支持搭建网站:它甚至赠送了一个二级域名,你可以搭建一些网站或博客项目,并通过这个二级域名进行访问。

首先,你打开这个网站进行登录和注册。

登录之后的页面如下,它是一个类似于 AI 对话框的页面。此时你需要随便输入一个东西,然后点击右下角的“执行”,它会自动创建一个开发环境。

这个开发环境是一个永久的2核8G的虚拟机。

随便发送一个东西之后,你可以进行以下操作:

    使用 SSH 终端:
    点击右上角的终端按钮,下方会弹出 SSH 窗口。点击左上角的加号即可新建 SSH,可以任意添加并打开多个 SSH 窗口。在右侧底部输入命令,无论是安装 Docker 还是安装其他项目都可以。
    在线访问项目:
    点击左上角的预览按钮,浏览器会新弹出一个窗口并提供一个二级域名。项目创建好之后,你可以随时随地通过这个二级域名来访问你的项目。

项目实操

如果你想要玩 Docker 的话,你可以直接用命令行来安装 Docker。然后再安装任何你想玩的项目。

apt update
apt upgrade -y
curl -fsSL https://get.docker.com | bash
docker -v

使用上面的代码成功安装上Docker。

我只是抛砖引玉。这个项目是可以直接导入 GitHub 的项目来进行部署的,因此可玩性比较高。大家可以自己去尝试玩一玩,毕竟是免费的,门槛很低。
注意事项

虽然上述的操作很简单,并且服务器也是免费的,但是下面的注意事项你一定要看一下:
    这个平台是阿里云收购的,因此开的机器都是阿里云的。
    但是这个平台毕竟不是卖我们服务器,或者给我们提供免费服务器来用的,所以它不一定什么时候就会因为某些政策导致使用失效。这一点你需要特别警惕。
    每一个对话都可以开一个服务器的开发环境。但是每个任务如果你不一直激活的话,3 天不对话,会自动收回,因此特别需要及时备份。
    再次提醒一下,不要把任何重要的东西放在上面,只是现在拿来玩一玩就可以。



如何结合 GitHub Actions 和 Wrangler CLI 实现 Cloudflare Pages 的自动化 CI/CD 部署?



结合 GitHub Actions 和 Wrangler CLI 可以实现:当代码 Push 到 GitHub 仓库时,自动运行打包构建,并通过 Wrangler 部署到 Cloudflare Pages(支持主分支自动发布生产环境、非主分支自动生成预览链接)。

一、 准备工作:获取 Cloudflare 凭证

在配置 GitHub 密钥前,需要先从 Cloudflare 控制台获取 API Token 和 Account ID。

    获取 API Token

        登录 Cloudflare 控制台,点击右上角头像 ➔ My Profile ➔ API Tokens。

        点击 Create Token,选择 Edit Cloudflare Workers 模板(该模板默认包含 Cloudflare Pages 的编辑权限)。

        创建后保存生成的 Token(注意:页面刷新后无法再次查看)。

    获取 Account ID

        进入 Cloudflare 控制台首页,点击任意域名或左侧的 Workers & Pages 菜单。

        在页面右侧栏中找到并复制 Account ID。

二、 在 GitHub 仓库设置 Secrets

将获取到的凭证安全地添加到 GitHub 仓库中:

    打开 GitHub 仓库,选择 Settings ➔ Secrets and variables ➔ Actions。

    点击 New repository secret,添加以下两个密钥:

        CLOUDFLARE_API_TOKEN:填入步骤一获取的 API Token。

        CLOUDFLARE_ACCOUNT_ID:填入步骤一获取的 Account ID。

三、 配置 GitHub Actions 工作流

在项目的 .github/workflows/ 目录下创建部署配置文件 deploy.yml:

name: Deploy Cloudflare Pages

on:
  push:
    branches:
      - main     # 触发生产环境部署的分支
      - staging  # 触发测试/预览环境部署的分支
  pull_request:  # PR 提交时自动生成 Preview 预览链接

jobs:
  deploy:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      deployments: write

    steps:
      - name: Checkout Repository
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: 'npm' # 根据使用的包管理器调整(npm/pnpm/yarn)

      - name: Install Dependencies
        run: npm ci

      - name: Build Project
        run: npm run build # 确保该命令在 dist/ 或 build/ 目录生成产物

      - name: Publish to Cloudflare Pages
        uses: cloudflare/wrangler-action@v3
        with:
          apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
          accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
          command: pages deploy ./dist --project-name=my-cloudflare-pages-app

四、 关键配置细节解析
1. 自动分支环境隔离(Production vs Preview)

cloudflare/wrangler-action 结合 pages deploy 会自动识别触发构建的 Git 分支:

    main 分支推拉:默认部署至生产环境地址(如 [https://my-app.pages.dev](https://my-app.pages.dev))。

    非 main 分支/PR:自动生成带有分支名的预览环境地址(如 https://<commit-hash>.my-app.pages.dev)。

如果需要显式定义环境,可在 command 中补充 --branch 参数:

command: pages deploy ./dist --project-name=my-app --branch=${{ github.ref_name }}

2. 如果包含 Pages Functions (后端 API)

由于全栈项目的后端代码存放在 ./functions 目录,Wrangler 会在部署打包文件(如 ./dist)时自动将 ./functions 一并同步上传。无需改变 Action 的配置命令,保持 pages deploy ./dist 即可。
五、 部署验证

    提交并 Push 变更到仓库:

    git add .
    git commit -m "ci: add cloudflare pages deployment workflow"
    git push origin main

    打开 GitHub 仓库的 Actions 标签页,查看工作流运行进度。

    构建完成后,展开 Publish to Cloudflare Pages 步骤日志,可以查看到部署成功的线上访问 URL 和部署 ID。

Wrangler的使用说明

 Wrangler 是 Cloudflare Workers 和 Pages 的官方命令行工具,用于开发、测试和部署 Serverless 应用

一、 核心安装与登录

 在使用 Wrangler 之前,确保已安装 Node.js(建议最低版本为20.18.1)。
npm install -g wrangler

# 登录 Cloudflare 账号(会在浏览器打开授权页面)
wrangler login

# 检查当前登录状态与用户账户信息
wrangler whoami

二、 项目初始化与配置Bash# 创建新的 Cloudflare Workers 或 Pages 项目(交互式引导):
wrangler init my-project

# 或使用快捷创建命令
npm create cloudflare@latest
初始化后,项目根目录会生成一个 wrangler.toml 文件,这是 Wrangler 的核心配置文件:
Ini, TOMLname = "my-worker"
main = "src/index.js"
compatibility_date = "2024-01-01"

# 绑定 KV 数据库示例
[[kv_namespaces]]
binding = "MY_KV"
id = "xxxxxx"

# 设置环境变量
[vars]
ENVIRONMENT = "production"

三、 本地开发与调试Wrangler 使用 Miniflare 在本地模拟 Cloudflare 运行环境,支持热重载和本地/远程资源调试。
启动本地开发服务器(默认端口 http://localhost:8787):
wrangler dev

# 启动本地开发并连接到 Cloudflare 真实的远程资源/数据库
wrangler dev --remote

# 指定端口启动
wrangler dev --port 3000
四、 部署与发布Bash# 发布 Worker 到 Cloudflare 线上环境
wrangler deploy

# 部署 Pages 静态网页项目(指定打包目录,如 dist 或 build)
wrangler pages deploy ./dist

# 针对特定环境部署(需在 wrangler.toml 中配置 [env.staging] 等)
wrangler deploy --env staging
五、 核心资源管理指令Cloudflare 提供了多种存储与数据库服务,可以通过 Wrangler 直接在终端操作:

1. KV(键值存储)Bash# 创建 KV 命名空间
wrangler kv:namespace create "MY_KV"

# 写入与获取键值对
wrangler kv:key put --binding=MY_KV "my-key" "my-value"
wrangler kv:key get --binding=MY_KV "my-key"

2. D1(关系型 SQL 数据库)Bash# 创建 D1 数据库
wrangler d1 create my-db

# 执行 SQL 文件(本地测试)
wrangler d1 execute my-db --local --file=./schema.sql

# 执行 SQL 文件(生产环境)
wrangler d1 execute my-db --remote --file=./schema.sql

3. R2(对象存储)Bash# 创建 Bucket
wrangler r2 bucket create my-bucket

# 上传文件
wrangler r2 object put my-bucket/file.png --file=./local-file.png

4. Secrets(机密密钥管理)Bash# 添加加密环境变量(如 API Token,不会明文存入 wrangler.toml)
wrangler secret put API_KEY

# 查看已设置的密钥列表
wrangler secret list

六、 常见实用命令速查

实时日志   wrangler tail  实时查看线上Worker 的 console.log 和报错日志
部署历史   wrangler deployments list  查看历史部署版本
版本回滚   wrangler rollback <deployment-id>  回滚到指定的历史版本
帮助指南   wrangler --help  查看所有指令及参数说明
----------------------------------------

$ wrangler
wrangler

COMMANDS
  wrangler docs [search..]        📚 Open Wrangler's command documentation in your browser
  wrangler complete [shell]       ⌨️ Generate and handle shell completions

  wrangler email                  Manage Cloudflare Email services [open beta]

ACCOUNT
  wrangler auth                   🔐 Manage authentication
  wrangler login                  🔓 Login to Cloudflare
  wrangler logout                 🚪 Logout from Cloudflare
  wrangler whoami                 🕵️ Retrieve your user information

COMPUTE & AI
  wrangler agent-memory           🧠 Manage Agent Memory namespaces [private beta]
  wrangler ai                     🤖 Manage AI models
  wrangler ai-search              🔍 Manage AI Search instances [open beta]
  wrangler browser                🌐 Manage Browser Run sessions [open beta]
  wrangler containers             📦 Manage Containers
  wrangler delete [name]          🗑️ Delete a Worker from Cloudflare
  wrangler deploy [path]          🆙 Deploy a Worker to Cloudflare
  wrangler deployments            🚢 List and view the current and past deployments for your Worker
  wrangler dev [script]           👂 Start a local server for developing your Worker
  wrangler dispatch-namespace     🏗️ Manage dispatch namespaces
  wrangler flagship               🚩 Manage Flagship apps and feature flags [open beta]
  wrangler init [name]            📥 Initialize a basic Worker
  wrangler pages                  ⚡️ Configure Cloudflare Pages
  wrangler preview [script]       👀 Create a Preview deployment of the current Worker [open beta]
  wrangler queues                 📬 Manage Workers Queues
  wrangler rollback [version-id]  🔙 Rollback a deployment for a Worker
  wrangler secret                 🤫 Generate a secret that can be referenced in a Worker
  wrangler setup                  🪄 Setup a project to work on Cloudflare
  wrangler tail [worker]          🦚 Start a log tailing session for a Worker
  wrangler triggers               🎯 Updates the triggers of your current deployment [experimental]
  wrangler types [path]           📝 Generate types from your Worker configuration
  wrangler versions               🫧 List, view, upload and deploy Versions of your Worker to Cloudflare
  wrangler vpc                    🌐 Manage VPC [open beta]
  wrangler workflows              🔁 Manage Workflows

STORAGE & DATABASES
  wrangler artifacts              🧱 Manage Artifacts namespaces and repos [private beta]
  wrangler d1                     🗄️ Manage Workers D1 databases
  wrangler hyperdrive             🚀 Manage Hyperdrive databases
  wrangler kv                     🗂️ Manage Workers KV Namespaces
  wrangler pipelines              🚰 Manage Cloudflare Pipelines [open beta]
  wrangler r2                     📦 Manage R2 buckets & objects
  wrangler secrets-store          🔐 Manage the Secrets Store [open beta]
  wrangler vectorize              🧮 Manage Vectorize indexes

NETWORKING & SECURITY
  wrangler cert                   🪪 Manage client mTLS certificates and CA certificate chains used for secured connections [open beta]
  wrangler mtls-certificate       🪪 Manage certificates used for mTLS connections
  wrangler tunnel                 🚇 Manage Cloudflare Tunnels [experimental]
  wrangler turnstile              🛡️ Manage Turnstile widgets [alpha]

GLOBAL FLAGS
  -c, --config          Path to Wrangler configuration file  [string]
      --cwd             Run as if Wrangler was started in the specified directory instead of the current working directory  [string]
  -e, --env             Environment to use for operations, and for selecting .env and .dev.vars files  [string]
      --env-file        Path to an .env file to load - can be specified multiple times - values from earlier files are overridden by values in later files  [array]
  -h, --help            Show help  [boolean]
      --install-skills  Install Cloudflare skills for detected AI coding agents before running the command  [boolean] [default: false]
      --profile         Use a specific auth profile  [string]
  -v, --version         Show version number  [boolean]

Please report any issues to https://github.com/cloudflare/workers-sdk/issues/new/choose
----------------


https://developers.cloudflare.com/workers/wrangler/
-----------------------------------------

相关帖子: https://briteming.blogspot.com/2026/09/cloudflare-pages.html

通过BGP广播自己的自治域IP段 实现站群服务器,什么是原生IP、广播IP、任播IP?跨境电商必懂的网络IP知识:路由追踪、路由宣告、路由收敛、ASN、自治域


ipinfo查询IP信息:https://ipinfo.io
BGP相关信息:https://bgp.he.net/ip/2a0e:1a84::1
路由追踪:https://tools.ipip.net/traceroute.php?v=6

相关指令

安装bird:apt install bird
ipv4:

/etc/bird/bird.conf

router id 104.207.141.86;

protocol bgp vultr
{
    local as 4288000333;
    source address 104.207.141.86;
    import none;
    export all;
    graceful restart on;
    multihop 2;
    neighbor 169.254.169.254 as 64515;
    password "vultr123";
}
protocol static
{
    route  198.51.100.0/24 via 104.207.141.86;
}

protocol device
{
    scan time 5;
}


birdc c #重载配置文件
birdc show proto all vultr #查看BGP状态
ip route add local 198.51.100.0/24 dev enp1s0 #添加路由
sysctl net.ipv4.ip_nonlocal_bind=1 #允许套接字绑定非本地地址


ipv6:

/etc/bird/bird6.conf

router id 104.207.141.86;

protocol bgp vultr
{
    local as 4288000333;
    source address 2001:19f0:5c01:0c8b:5400:04ff:fed6:8895;
    import none;
    export all;
    graceful restart on;
    multihop 2;
    neighbor 2001:19f0:ffff::1 as 64515;
    password "vultr123";
}
protocol static
{
    route  2a0e:1a84::/32 via 2001:19f0:5c01:0c8b:5400:04ff:fed6:8895;
}

protocol device
{
    scan time 5;
}


birdc6 c #重载配置文件
birdc6 show proto all vultr #查看BGP状态
ip route add local 2a0e:1a84::/32 dev enp1s0 #添加路由
sysctl net.ipv6.ip_nonlocal_bind=1 #允许套接字绑定非本地地址

ndppd:

安装ndppd:apt install ndppd

/etc/ndppd.conf

route-ttl 30000

proxy enp1s0{
   router no
   timeout 500
   ttl 30000
   rule 2001:19f0:5c01:c8b::/64{
       static
   }
}


Xray模板:

{
  "api": {
    "services": [
      "HandlerService",
      "LoggerService",
      "StatsService"
    ],
    "tag": "api"
  },
  "inbounds": [
    {
      "listen": "127.0.0.1",
      "port": 62789,
      "protocol": "dokodemo-door",
      "settings": {
        "address": "127.0.0.1"
      },
      "tag": "api"
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "settings": {}
    },
    {
      "protocol": "freedom",
      "sendThrough": "2001:19f0:5c01:c8b::/64",
      "settings": {},
      "tag": "randomip"
    },
    {
      "protocol": "blackhole",
      "settings": {},
      "tag": "blocked"
    }
  ],
  "policy": {
    "levels": {
      "0": {
        "handshake": 10,
        "connIdle": 100,
        "uplinkOnly": 2,
        "downlinkOnly": 3,
        "statsUserUplink": true,
        "statsUserDownlink": true,
        "bufferSize": 10240
      }
    },
    "system": {
      "statsInboundDownlink": true,
      "statsInboundUplink": true
    }
  },
  "routing": {
    "rules": [
      {
        "inboundTag": [
          "api"
        ],
        "outboundTag": "api",
        "type": "field"
      },
      {
        "ip": [
          "geoip:private"
        ],
        "outboundTag": "blocked",
        "type": "field"
      },
      {
        "outboundTag": "blocked",
        "protocol": [
          "bittorrent"
        ],
        "type": "field"
      },
      {
        "outboundTag": "randomip",
        "inboundTag": [
          "inbound-51603"
        ],
        "type": "field"
      }
    ]
  },
  "stats": {}
}

通过BGP广播自己的ip段,实现一台vps拥有无限ip地址的站群服务器,看完就知道什么是原生ip,什么是广播ip,什么又是任播ip
通常情况下你购买的vps只有一个公网ip地址,如果你需要多个ip就得购买多台vps,费钱又费事,有些商家允许你加钱多绑定一两个公网ip,但如果你想要绑定几百个甚至几千个那就不行了,需要用BGP解决。

不管你是使用机场节点还是购买vps自己搭建节点,都会经常看到bgp这个词,机场会宣传自己是BGP节点,VPS会宣传自己是BGP线路。为了让大家快速了解相关概念,这里再简单介绍一下,bgp译为边界网关协议,他的主要作用是在不同自治域之间传递路由信息,自治域简称AS,每个自治域都有唯一的编号,简称asn,中国电信和中国联通都有自己的自治域,电信的asn是4134,联通的asn是4837,假设我家办了电信的宽带,接入了电信的网络,我会通过电信分配给我的公网ip3.3.3.3访问互联网,当我访问ipinfo这个网站时,他会检测我的ip地址属于哪个asn,并在asn一栏中显示对应的自治域编号以及宽带运营商等信息

假设你家办了联通的宽带,接入了联通的网络,那么你ip对应的asn就是联通的4837,此时你想和我联机玩游戏,由于电信和联通属于不同的自治域,每个自治域都可以视为一个独立的网络,你可以简单理解为电信和联通是两个不同的局域网,你没法直接访问到我,所以需要将两个网络连接起来,其中用到的路由协议就是BGP,连接之后你就可以将数据发送给我了,整个互联网世界就是通过BGP将所有自治域连接在一起,BGP出问题的话可能导致整个国家断网,可见BGP有多么重要

假设我在vultr这个自治域里买了一台美国的vps,他会给vps分配一个美国的ip地址,我用这台vps搭了节点,那么我通过节点访问ipinfo的时候,它检测到的asn就是vultr的20473,并且显示ip的地理位置在美国,vultr家的vps按小时计费,更换ip比较方便,上手门槛低导致ip被人滥用,很多互联网公司拉黑了他家的ip,比如奈飞就把vultr整个as全都封禁了,作为一名合格的跨境人,当然不能使用这么脏的ip了,有跨境电商需求的用户都希望能找到比较干净的ip防止被平台风控,而很多vps商家或多或少都存在ip被滥用的情况,尤其是比较廉价的VPS,你在购买之前并不清楚分配给你的ip质量如何,这是很多人比较苦恼的问题

为了解决这个问题,有没有可能我自己申请一个asn,然后通过bgp接入其他asn,再租一段ip地址,这样的话我就可以在自己的asn里搭建节点,并给节点分配自己租的ip地址,这样就不用担心ip不干净了,asn也是干净的没有被封禁,并且你想给一台vps分配多少个ip都可以,毕竟这是你的地盘,要实现这个目的的门槛并不高,普通个人身份就可以申请asn,一年也就几百块钱,租用ip地址的话稍微贵一点,一段/48的ipv6地址每个月20刀,一段/24的ipv4地址每个月需要两百刀,并不是我们普通用户能负担的,不过即使你现在不需要BGP也希望你能看下去,会牵扯到很多有意思的内容

asn你可以找提供LIR服务的商家注册,网上有很多,交钱提供个人资料就行了,有些商家还会送一段/48的ipv6地址,如果你觉得麻烦的话也可以不用注册asn,等会再说,ip地址也可以自行寻找提供ip租赁的商家,我这里有一段/32的ipv6地址,是找这个商家嫖来的,这并不是一期广告视频,只是我刚好想做这个内容,秉持着能嫖就不花钱的理念,搜了一下自己的邮箱,看到去年10月份他们给我发过推广邀请,尝试找他们嫖一段ip来做演示,为了防止他们忘记我是干啥的,我还贴心的附上了频道链接,本来还想嫖一段ipv4,他们表示没货了,不过ipv4和ipv6的操作是一样的,所以就给大家演示ipv6,感谢商家提供的ip做演示,有需要的朋友可以进入这个链接找他们购买,有问题可以咨询网站里的在线客服

有了asn和ip地址后,并不意味着我们就能直接接入其他asn了,需要找个地方做ip transit,也就是能让你建立BGP连接的地方,将自己asn里的ip段通过bgp广播出去,transit一般都是要收费的,比如你想接入cn2 gia,那就得花钱找走gia线路的商家给你做transit,然后就可以使用kvm或者OpenVZ之类的虚拟化技术创建VPS做超售奸商了
ip transit也有免费的,比如本期介绍的vultr就提供了免费的transit服务,虽然走不了cn2
gia但好过没有,vultr相信大家都比较熟悉了,很多人的第一个自建节点就是被我这样的affman忽悠买了他家的vps,如果你没有注册过vultr的话可以进入这个链接注册,绑定支付方式之后可以免费试用100美金用于购买vps,有效期为14天

登陆vultr之后先进入network下的bgp页面,现在我们要做的就是将自己的asn通过bgp连接到vultr的asn,点击开始,启用这个选项,如果你有自己的asn,就启用这个选项,然后填入你的asn即可,由于asn会暴露个人身份信息,视频演示我就不启用了,不启用的话vulrt就会给我们分配一个私有asn,操作过程没有什么区别,所以即使你没有asn,租一段ip之后也能直接玩BGP了,设置一个密码,建立BGP连接的时候要用,注意保密,在这里输入你租用的ip段,选择LOA授权文件,授权文件可以找租给你ip的商家获取,这里选择无路由,随便给个描述,点击请求BGP设置,点击start,此时需要向ip的所有者验证ip段是否可以给你用,会发送邮件到这个邮箱去,如果你用的是自己的asn,验证邮件也会发给你注册asn时填写的邮箱,点击发送邮件,此时需要联系商家让他给你通过验证,验证通过之后这里就会显示刚才添加的ip段了

接着你需要创建一台vps用来建立bgp连接,创建非常简单,点击右上角的加号,选择部署新服务器,要想便宜的话选择共享cpu, 然后按你的需要选择一个数据中心,操作系统选择ubuntu22.04,可以选择最低配置,关闭自动备份,ipv6要选中, 最后点击部署就行了

来到compute页面,这是我之前创建的美国vps,系统是ubuntu22.04,这里有个红色的警示符号,提示需要重启机器才能使BGP生效,点击重启服务器,重启之后来到BGP页面,点击这里获取BGP配置,选择这个ipv6配置,需要先给服务器安装bird,建议先使用ufw disable关闭防火墙,使用apt install bird安装bird,安装之后使用vim编辑器打开这个配置文件,将里面的内容清空,把这段配置复制进去,除此之外还要加上这两段,这些用到的代码我会放在视频下方的说明栏,注意这里要改成你租来的ip段,这个就是你vps本身的ipv6地址,保存并退出,接着使用这条指令重载配置文件,然后使用这条指令查看BGP的状态,这里显示Established就表示成功和vultr建立了BGP连接,然后我们会将自己的ip段通过BGP发送给vultr,相当于告诉vultr,如果有人要访问这个ip段,就往我这里路由,这个行为叫做路由宣告,也就是大家常说的ip广播,如果此时我要访问这个ip段,现在只有vultr知道这个ip段在哪,电信还不知道,所以会访问失败,vultr收到路由信息后,会将信息再传递给他的BGP邻居,告诉他们,如果你要访问这个ip段,就可以从我这里过去,以此类推,直到全球的BGP路由都知道怎么到你这个ip段,也就意味着路由收敛完成了,此时我再访问这个ip段,电信就会根据自己的路由规则选择合适的路线将数据发送给我们的自治域

现在只是把ip段广播出去了,我们还需要将ip绑定到某一台具体的vps,网络才能通,你可以绑定某个具体的ip,但我们作为站群服务器,希望将所有ip都绑定到同一台vps上,跟着操作把这个ip段添加到本地路由表,注意这里要改成你的网卡接口名称,通过ip a查看,将其复制到vps上执行,接着再执行这条指令,让套接字支持绑定非本地地址,此时就算是配置好了,访问这个ip段里的任何地址都将访问到这台vps,同时这台vps也可以用ip段里的任何地址访问别人,实现站群服务器的效果
随便ping网段内的地址,没问题,接着从外部ping试试,同样没有问题,任何网段里的地址都将指向你的vps
我刚嫖到这个ip段的时候查询ipinfo,由于没有挂在任何asn上,所以不会显示asn信息,当我将IP广播出去之后,等待48小时左右,现在再次访问ipinfo,输入我们的ip段,可以看到已经有asn信息了,as号是vultr家的20473,如果之前你创建BGP的时候填的是你自己的asn,那么这里将会显示你的asn信息,可以看到vultr的asn类型是hosting,如果你是个人asn,一般情况下类型会显示business,下面的company是ip所有者的信息,也就是ip在哪租的,类型现在变成了business,本来是显示isp,具体原因不明,我想补充的是,这些类型本身都是没有的,你在注册asn的时候也不会让你选择是hosting还是isp类型,ipinfo是一个提供ip数据信息的商业公司,asn类型是他们自己通过一些手段判断该自治域提供什么服务,然后打上对应的标签,有一定的参考价值,但不绝对,需要具体业务具体分析

另外可以看到这里的ip归属地是NL荷兰,而我们vps的机房位置是在美国,这种机房位置和ip归属地不在同一地区的ip被大家称之为广播ip,反之如果机房位置和ip归属地是同一地区,就把它称之为原生ip,这其实是一个错误的概念,如果我在荷兰的vps上进行bgp路由宣告,那我是不是就是原生ip了呢?显然是不对的,多数情况下原生ip和广播ip的称呼只是用来区分能否解锁奈飞之类的流媒体平台,但实际上你要清楚,对很多流媒体平台而言只有两种ip,一种是在黑名单里的ip,另一种是其他ip

而且你如果现在去ipinfo查我这个ip段的归属地,已经变成美国了,因为像ipinfo这些平台是通过traceroute路由跟踪来判断ip归属地,当监测到这个ip会被路由到美国的数据中心,ipinfo就会更新他们的ip数据库,从而显示正确的ip归属地,比如我现在进行路由跟踪,很明显被路由到了vultr美国的数据中心,这里的ip归属地显示荷兰肯定是不对的,还没有更新ip数据库,更新过程是比较漫长的,可能需要十天半个月,我这边是发邮件催了ipinfo,更新也花了三天的时间,现在你在其他平台测试这个ip,可能有些网站还是显示归属地为荷兰,那就是他们没有更新这个ip的归属地信息,如果一个ip段能常年稳定在某个地区的数据中心,那么大多数平台都能获取到ip的正确归属地,如果经常在不同地区的数据中心进行广播,那不同平台检测到的ip归属地就会出现各种地区,这就是为什么明明是美国的vps,奈飞却解锁荷兰地区

另外这个ip本来可以解锁奈飞荷兰地区,由于我没有使用自己的asn,ip相当于直接挂在vultr的asn里,而奈飞把vultr整个asn的所有ip段全都拉黑了,导致这个本来可以解锁的ip段,由于asn的原因也变得不能解锁了,连自制剧都看不了,所以如果你对ip的纯净度有要求,建议还是自己注册一个asn,可以看到流媒体检测这里还有三个不同的地区,检测到了美国与荷兰大家还能理解,但为什么多了个日本东京?

因为vultr除了支持让你的ip在某一个数据中心进行路由宣告,同时也支持在多个数据中心进行宣告,实现类似cloudflare1.1.1.1的anycast任播效果,比如我再创建一台日本东京的vps,进行和美国vps同样的BGP操作,现在日本和美国的vps绑定了同一个ip段,此时我在不同的地区对同一个ip地址进行路由追踪,新加坡就会访问离他近的日本vps,加拿大就会访问离他近的美国vps,所以检测脚本出现了解锁东京地区的流媒体

接下来就可以参考之前讲过的站群服务器教程实现不同端口使用不同的落地ip,由于之前的教程需要先绑定ip才能使用,这次我们换个方法,最新版的xray更新了一个功能,同一个节点,每次连接都可以使用不同的ipv6落地,简直就是爬虫者的福音,据说灵感来着某个姓不的博主

搭建xui面板的过程就直接跳过了,先将xray更新到最新版的1.8.10,接着创建两个节点,随便什么协议都可以,一个节点使用33333端口,一个节点使用44444端口,将其导入到v2rayN中,选中其中一个节点,访问这个网址,这个网址可以看到用的是哪个落地ip访问当前网页,显示了当前vps的ipv6地址,结尾是8895,选中另一个节点,刷新页面,同样还是8895,接着我打算把端口33333的节点改成随机落地ip,这个配置模板我会提供给大家,将这里改成你的ip段,把这里改成你的节点端口,也就是33333,全选复制,进入xui的面板设置,将原来的xray模板替换掉,保存配置,然后重启面板,现在相当于使用33333端口的节点就会使用随机落地ip,切换到33333节点,刷新网页,可以看到ip地址发生了变化,前面32个比特位就是我们ipv6的前缀,后面则是完全随机的,切回44444节点,ip又会固定变成vps原来的ipv6地址8895,再切回来,ip又变成随机ip,结尾是97af,这个在做一些爬虫的话非常方便,当然前提是被爬的网站要支持ipv6,刷新页面,ip没有发生改变,因为这条tcp连接没有断开,开个无痕窗口访问,可以看到结尾就变成另一个随机ip了,每次新的tcp连接都会使用新的随机落地ip

另外由于直连vultr的vps速度比较慢,用他家vps搭建的节点晚高峰肯定会非常卡,而且他家的ip特别容易被阻断连接,建议给节点做中转,可以将速度提升到专线水平

如果你没有租用ip,也可以直接拿本机的ipv6地址玩随机落地,可以看到vps默认提供的ipv6地址是这个,前缀长度为64位,虽然后64位的地址都是你的,但如果现在直接ping的话,由于vps没有绑定这个ipv6地址,外部是无法ping通的,可以看到全都丢包了,需要进行相关设置,前面关于bgp的设置不用管,从执行这两行开始,这里改成你vps的ipv6前缀地址,这里输入你的网卡接口名称,然后复制这两行到vps上执行,接着安装ndp代理工具,创建这个配置文件,将这段配置粘贴上去,注意这里要改成你的ipv6前缀,以及网卡接口名称,保存退出,接着重启ndp代理工具,此时再来ping该前缀下的任何ip地址,就可以通了,说明该前缀下的任何ipv6地址可以正常访问到你的vps,接着还是同样的操作,把xray模板里的ipv6前缀替换掉,全选复制,将xui的模板替换掉,这次我把这里改成44444,也就是使用44444端口的节点访问网站就用随机的落地ip,其它端口的节点保持正常,保存配置并重启面板,切换到44444节点,刷新网页,可以看到前64位是固定的前缀,后面是完全随机的,接着开个无痕窗口使用新的tcp连接来访问,每次都是新的落地ip,如果使用其它端口的节点,就会保持默认的ip,不会使用随机落地。