diff --git a/README.md b/README.md index 8ab9fce..56d8629 100644 --- a/README.md +++ b/README.md @@ -43,12 +43,16 @@ - 在左侧的 `设置`选项卡中,选择 `变量` > `添加变量`。 变量名称填写**ADMIN**,值则为你的管理员密码,后点击 `保存`即可。 -2. 给 Workers绑定 自定义域: +2. 绑定 KV 命名空间: + - 在 `绑定`选项卡中选择 `添加绑定 +` > `KV 命名空间` > `添加绑定`,然后选择一个已有的命名空间或创建一个新的命名空间进行绑定。 + - `变量名称`填写**KV**,然后点击 `添加绑定`即可。 + +3. 给 Workers绑定 自定义域: - 在 workers控制台的 `触发器`选项卡,下方点击 `添加自定义域`。 - 填入你已转入 CF 域名解析服务的次级域名,例如:`vless.google.com`后 点击`添加自定义域`,等待证书生效即可。 - **如果你是小白,你现在可以直接起飞,不用再往下看了!!!** -3. 访问后台: +4. 访问后台: - 访问 `https://vless.google.com/admin` 输入管理员密码即可登录后台。 @@ -65,14 +69,18 @@ 变量名称填写**ADMIN**,值则为你的管理员密码,后点击 `保存`即可。 - 返回 `部署` 选项卡,在右下角点击 `创建新部署` 后,重新上传 [main.zip](https://github.com/cmliu/edgetunnel/archive/refs/heads/main.zip) 文件后点击 `保存并部署` 即可。 -2. 给 Pages绑定 CNAME自定义域:[视频教程](https://www.youtube.com/watch?v=LeT4jQUh8ok&t=851s) +2. 绑定 KV 命名空间: + - 在 `设置`选项卡中选择 `绑定` > `+ 添加` > `KV 命名空间`,然后选择一个已有的命名空间或创建一个新的命名空间进行绑定。 + - `变量名称`填写**KV**,然后点击 `保存`后重试部署即可。 + +3. 给 Pages绑定 CNAME自定义域:[视频教程](https://www.youtube.com/watch?v=LeT4jQUh8ok&t=851s) - 在 Pages控制台的 `自定义域`选项卡,下方点击 `设置自定义域`。 - 填入你的自定义次级域名,注意不要使用你的根域名,例如: 您分配到的域名是 `fuck.cloudns.biz`,则添加自定义域填入 `lizi.fuck.cloudns.biz`即可; - 按照 CF 的要求将返回你的域名DNS服务商,添加 该自定义域 `lizi`的 CNAME记录 `edgetunnel.pages.dev` 后,点击 `激活域`即可。 - **如果你是小白,那么你的 pages 绑定`自定义域`之后即可直接起飞,不用再往下看了!!!** -3. 访问后台: +4. 访问后台: - 访问 `https://lizi.fuck.cloudns.biz/admin` 输入管理员密码即可登录后台。 @@ -88,14 +96,18 @@ - 在 `设置构建和部署`页面下方,选择 `环境变量(高级)`后并 `添加变量` 变量名称填写**ADMIN**,值则为你的管理员密码,后点击 `保存并部署`即可。 -2. 给 Pages绑定 CNAME自定义域:[视频教程](https://www.youtube.com/watch?v=LeT4jQUh8ok&t=851s) +2. 绑定 KV 命名空间: + - 在 `设置`选项卡中选择 `绑定` > `+ 添加` > `KV 命名空间`,然后选择一个已有的命名空间或创建一个新的命名空间进行绑定。 + - `变量名称`填写**KV**,然后点击 `保存`后重试部署即可。 + +3. 给 Pages绑定 CNAME自定义域:[视频教程](https://www.youtube.com/watch?v=LeT4jQUh8ok&t=851s) - 在 Pages控制台的 `自定义域`选项卡,下方点击 `设置自定义域`。 - 填入你的自定义次级域名,注意不要使用你的根域名,例如: 您分配到的域名是 `fuck.cloudns.biz`,则添加自定义域填入 `lizi.fuck.cloudns.biz`即可; - 按照 CF 的要求将返回你的域名DNS服务商,添加 该自定义域 `lizi`的 CNAME记录 `edgetunnel.pages.dev` 后,点击 `激活域`即可。 - **如果你是小白,那么你的 pages 绑定`自定义域`之后即可直接起飞,不用再往下看了!!!** -3. 访问后台: +4. 访问后台: - 访问 `https://lizi.fuck.cloudns.biz/admin` 输入管理员密码即可登录后台。 diff --git a/_worker.js b/_worker.js index f29e335..5f2e801 100644 --- a/_worker.js +++ b/_worker.js @@ -257,13 +257,13 @@ export default { return null; } - return `${协议类型}://${config_JSON.UUID}@${节点地址}:${节点端口}?security=tls&type=${config_JSON.传输协议}&host=${config_JSON.HOST}&sni=${config_JSON.HOST}&path=${encodeURIComponent(节点路径)}&fragment=${encodeURIComponent('1,40-60,30-50,tlshello')}&encryption=none${config_JSON.跳过证书验证 ? '&allowInsecure=1' : ''}#${encodeURIComponent(节点备注)}`; + return `${协议类型}://${config_JSON.UUID}@${节点地址}:${节点端口}?security=tls&type=${config_JSON.传输协议}&host=${config_JSON.HOST}&sni=${config_JSON.HOST}&path=${encodeURIComponent(随机路径() + 节点路径)}&fragment=${encodeURIComponent('1,40-60,30-50,tlshello')}&encryption=none${config_JSON.跳过证书验证 ? '&allowInsecure=1' : ''}#${encodeURIComponent(节点备注)}`; }).filter(item => item !== null).join('\n'); 订阅内容 = btoa(其他节点LINK + 订阅内容); } else { // 优选订阅生成器 let 优选订阅生成器HOST = url.searchParams.get('sub') || config_JSON.优选订阅生成.SUB; 优选订阅生成器HOST = 优选订阅生成器HOST && !/^https?:\/\//i.test(优选订阅生成器HOST) ? `https://${优选订阅生成器HOST}` : 优选订阅生成器HOST; - const 优选订阅生成器URL = `${优选订阅生成器HOST}/sub?host=example.com&${协议类型 === ('v' + 'le' + 'ss') ? 'uuid' : 'pw'}=00000000-0000-4000-0000-000000000000&path=${encodeURIComponent(节点路径)}&type=${config_JSON.传输协议}`; + const 优选订阅生成器URL = `${优选订阅生成器HOST}/sub?host=example.com&${协议类型 === ('v' + 'le' + 'ss') ? 'uuid' : 'pw'}=00000000-0000-4000-0000-000000000000&path=${encodeURIComponent(随机路径() + 节点路径)}&type=${config_JSON.传输协议}`; try { const response = await fetch(优选订阅生成器URL, { headers: { 'User-Agent': 'v2rayN/edge' + 'tunnel (https://github.com/cmliu/edge' + 'tunnel)' } }); if (response.ok) 订阅内容 = btoa(其他节点LINK + atob(await response.text())); @@ -813,6 +813,13 @@ async function MD5MD5(文本) { return 第二次十六进制.toLowerCase(); } +function 随机路径() { + const 常用路径目录 = ["#","about","account","acg","act","activity","ad","admin","ads","ajax","album","albums","anime","api","app","apps","archive","archives","article","articles","ask","auth","avatar","bbs","bd","blog","blogs","book","books","bt","buy","cart","category","categories","cb","channel","channels","chat","china","city","class","classify","clip","clips","club","cn","code","collect","collection","comic","comics","community","company","config","contact","content","course","courses","cp","data","detail","details","dh","directory","discount","discuss","dl","dload","doc","docs","document","documents","doujin","download","downloads","drama","edu","en","ep","episode","episodes","event","events","f","faq","favorite","favourites","favs","feedback","file","files","film","films","forum","forums","friend","friends","game","games","gif","go","go.html","go.php","group","groups","help","home","hot","htm","html","image","images","img","index","info","intro","item","items","ja","jp","jump","jump.html","jump.php","jumping","knowledge","lang","lesson","lessons","lib","library","link","links","list","live","lives","login","logout","m","mag","magnet","mall","manhua","map","member","members","message","messages","mobile","movie","movies","music","my","new","news","note","novel","novels","online","order","out","out.html","out.php","outbound","p","page","pages","pay","payment","pdf","photo","photos","pic","pics","picture","pictures","play","player","playlist","post","posts","product","products","program","programs","project","qa","question","rank","ranking","read","readme","redirect","redirect.html","redirect.php","reg","register","res","resource","retrieve","sale","search","season","seasons","section","seller","series","service","services","setting","settings","share","shop","show","shows","site","soft","sort","source","special","star","stars","static","stock","store","stream","streaming","streams","student","study","tag","tags","task","teacher","team","tech","temp","test","thread","tool","tools","topic","topics","torrent","trade","travel","tv","txt","type","u","upload","uploads","url","urls","user","users","v","version","video","videos","view","vip","vod","watch","web","wenku","wiki","work","www","zh","zh-cn","zh-tw","zip"]; + const 随机数 = Math.floor(Math.random() * 4 + 1); + const 随机路径 = 常用路径目录.sort(() => 0.5 - Math.random()).slice(0, 随机数).join('/'); + return `/${随机路径}`; +} + async function 读取config_JSON(env, host, userID, 重置配置 = false) { const 初始化开始时间 = performance.now(); const 默认配置JSON = { @@ -883,7 +890,7 @@ async function 读取config_JSON(env, host, userID, 重置配置 = false) { config_JSON.HOST = host; config_JSON.UUID = userID; - config_JSON.PATH = config_JSON.反代.SOCKS5.启用 ? ('/' + config_JSON.反代.SOCKS5.启用 + (config_JSON.反代.SOCKS5.全局 ? '://' : '=') + config_JSON.反代.SOCKS5.账号) : (config_JSON.反代.PROXYIP === 'auto' ? '/' : `/proxyip=${config_JSON.反代.PROXYIP}`); + config_JSON.PATH = config_JSON.反代.SOCKS5.启用 ? ('/' + config_JSON.反代.SOCKS5.启用 + (config_JSON.反代.SOCKS5.全局 ? '://' : '=') + config_JSON.反代.SOCKS5.账号) : (config_JSON.反代.PROXYIP === 'auto' ? '' : `/proxyip=${config_JSON.反代.PROXYIP}`); config_JSON.LINK = `${config_JSON.协议类型}://${userID}@${host}:443?security=tls&type=${config_JSON.传输协议}&host=${host}&sni=${host}&path=${encodeURIComponent(config_JSON.PATH)}&fragment=${encodeURIComponent('1,40-60,30-50,tlshello')}&encryption=none${config_JSON.跳过证书验证 ? '&allowInsecure=1' : ''}#${encodeURIComponent(config_JSON.优选订阅生成.SUBNAME)}`; config_JSON.优选订阅生成.TOKEN = await MD5MD5(host + userID);