/ladder

Primary LanguageHTMLGNU General Public License v3.0GPL-3.0

使用Heroku部署V2ray高性能代理服务,通过ws传输的 (VMess和VLESS)两种协议

提醒: Heroku 已经封禁本专案,请 Fork 本专案后,将 README.md 中的 用户名 替换为 自己的用户名

务必修改 专案名称 不要出现(Heroku、Xray、V2ray)等字符,再进行部署。

概述

Heroku 为我们提供了免费的容器服务,我们不应该滥用它,所以本项目不宜做为长期翻墙使用。

  • 支持VMess和VLESS两种协议
  • 支持自定义websocket路径
  • 伪装首页(3D元素周期表)
  • HTML5测速
  • 使用v2ray最新版构建
  • 请求/,返回3D元素周期表
  • 请求/speedtest/,html5-speedtest测速页面
  • 请求/test/,文件下载速度测试
  • 请求/ray(可配置)v2ray websocket路径

服务端

Deploy

点击上面紫色Deploy to Heroku,会跳转到heroku app创建页面,填上应用的名称、选择节点(建议用欧洲节点,美国节点会自动删除YouTube评论与点赞!)、按需修改部分参数和UUID后点击下面deploy开始创建部署应用
如出现错误,可以多尝试几次,待部署完成后页面底部会显示Your app was successfully deployed

  • 点击Manage App可在Settings下的Config Vars项查看和重新设置参数
  • 点击Open app跳转域名即为heroku分配域名,格式为app.herokuapp.com,用于客户端
  • 默认协议密码为24b4b1e1-7a89-45f6-858c-242cf53b5bdb,路径为/ray

客户端

环境变量说明

名称 说明
协议 vmess/vless(可选) 协议:nginx+vmess+ws+tls或是nginx+vless+ws+tls
UUID 4d5c52e1-16ff-452a-9140-5e0092b0d467 uuid在线生成器 务必替换
路径 默认为/ray 路径,请勿使用/speedtest//test 等已经被占用的请求路径

出于安全考量,除非使用 CDN,否则请不要使用自定义域名,而使用 Heroku 分配的二级域名,以实现 XRay vless Websocket + TLS。

heorku可以绑卡(应用一直在线,不扣费),绑定域名,套cf,uptimerobot 定时访问防止休眠(只监控CF Workers反代地址好了,不然几个账户一起监控没几天就把时间耗完了)

CloudFlare Workers反代代码(分别用两个账号应用程序名(协议UUID路径保持一致),单双号分别执行,那每月就有550+550小时)

V2rayN(Xray、V2ray)
* 客户端下载:https://github.com/2dust/v2rayN/releases
* 代理协议:vless 或 vmess
* 地址:app.herokuapp.com
* 端口:443
* 默认UUID:24b4b1e1-7a89-45f6-858c-242cf53b5bdb
* vmess额外id:0
* 加密:auto
* 传输协议:ws
* 伪装类型:none
* 伪装域名:xxx.workers.dev(CF Workers反代地址)
* 路径:/ray
* 底层传输安全:tls
* 跳过证书验证:true
使用Cloudflare的Workers来中转流量,单双日轮换反代代码(推荐)
const SingleDay = 'app1.herokuapp.com'
const DoubleDay = 'app2.herokuapp.com'
addEventListener(
    "fetch",event => {
    
        let nd = new Date();
        if (nd.getDate()%2) {
            host = SingleDay
        } else {
            host = DoubleDay
        }
        
        let url=new URL(event.request.url);
        url.hostname=host;
        let request=new Request(url,event.request);
        event. respondWith(
            fetch(request)
        )
    }
)
使用Cloudflare的Workers来中转流量,单账户反代代码
addEventListener(
  "fetch", event => {
    let url = new URL(event.request.url);
    url.host = "app.herokuapp.com";
    let request = new Request(url, event.request);
    event.respondWith(
      fetch(request)
    )
  }
)
使用Cloudflare的Workers来中转流量,每五天轮换一遍式反代代码
const Day0 = 'app0.herokuapp.com'
const Day1 = 'app1.herokuapp.com'
const Day2 = 'app2.herokuapp.com'
const Day3 = 'app3.herokuapp.com'
const Day4 = 'app4.herokuapp.com'
addEventListener(
    "fetch",event => {
    
        let nd = new Date();
        let day = nd.getDate() % 5;
        if (day === 0) {
            host = Day0
        } else if (day === 1) {
            host = Day1
        } else if (day === 2) {
            host = Day2
        } else if (day === 3){
            host = Day3
        } else if (day === 4){
            host = Day4
        } else {
            host = Day1
        }
        
        let url=new URL(event.request.url);
        url.hostname=host;
        let request=new Request(url,event.request);
        event. respondWith(
            fetch(request)
        )
    }
)
使用Cloudflare的Workers来中转流量,一周轮换反代代码
const Day0 = 'app0.herokuapp.com'
const Day1 = 'app1.herokuapp.com'
const Day2 = 'app2.herokuapp.com'
const Day3 = 'app3.herokuapp.com'
const Day4 = 'app4.herokuapp.com'
const Day5 = 'app5.herokuapp.com'
const Day6 = 'app6.herokuapp.com'
addEventListener(
    "fetch",event => {
    
        let nd = new Date();
        let day = nd.getDay();
        if (day === 0) {
            host = Day0
        } else if (day === 1) {
            host = Day1
        } else if (day === 2) {
            host = Day2
        } else if (day === 3){
            host = Day3
        } else if (day === 4) {
            host = Day4
        } else if (day === 5) {
            host = Day5
        } else if (day === 6) {
            host = Day6
        } else {
            host = Day1
        }
        
        let url=new URL(event.request.url);
        url.hostname=host;
        let request=new Request(url,event.request);
        event. respondWith(
            fetch(request)
        )
    }
)

OpenWrt优选IP脚本自动更新:

更多来自热心网友PR的使用教程

关于CF筛选IP

特别感谢 :