标签 VLESS 下的文章

一、背景介绍
因为最近换了联通卡,发现联通流量特别不经用,虽然看着有 100G,但是半个月不到就完了。所以只能搞一些骚操作了
这个就是以前的免流,效果各地区不一样,我这边重庆效果挺好。因为我的手机是 IOS,所以跳点挺高(推测是因为 IPV6 导致),所以标题给了一个省流
二、实现途径
在 VLESS 中,通过修改 HOST 地址为 pull.free.video.10010.com,走联通的公免流量达到免流效果(客户端和服务器都要修改,有些机场支持自定义 host)。


有国内服务器的可以上国内服务器,这样日常体验上基本无感。我没有国内服务器,只有通过联通办理的家宽(有公网 IP)来搭建 V2 服务器,日常使用上也是没什么差异。
V2 上还可以做分流操作,免流 + 翻墙一站式解决。
附上一个效果图


PS: 各位多点点赞让我赚点 LDC 呀


📌 转载信息
原作者:
revivable3066
转载时间:
2026/1/16 17:40:43

Clash Verge Rev (Mac) 内网 DNS 与 VLESS 配置指南

文档说明:本文档记录了如何在 Mac 版 Clash Verge Rev (Mihomo 内核) 中配置 VLESS 节点,并解决开启 Tun 模式后公司内网域名无法解析的问题。
最后更新时间


1. 环境与目标

  • 软件:Clash Verge Rev (Mihomo/Meta 内核)
  • 协议:VLESS + Reality + Vision
  • 模式:Tun 模式 (接管系统所有流量)
  • 痛点解决:修复 Tun 模式下,内网域名报 dns resolve failed 的问题。


2. 核心步骤一:获取物理 DNS

必须步骤:在配置脚本前,需要知道公司网络分配的真实 DNS IP。

  1. 关闭 Clash Verge 的 Tun 模式。
  2. 确保 Mac 连接了公司 Wi-Fi 或网线。
  3. 打开 系统设置网络Wi-Fi (或以太网)详细信息DNS
  4. 记下列表中的 IP 地址(例如 10.58.1.10)。


3. 核心步骤二:全局扩展脚本 (Script)

此脚本是解决问题的关键,它强制指定特定域名走物理 DNS,绕过 Tun 模式的干扰。

  • 操作:在 Clash Verge Rev → 脚本 (Script) → 新建 → 编辑代码。
  • 设置:右键点击该脚本 → 选择 “全局扩展” (Global Extension) → 启用。
// Merge Script - Tun 模式内网 DNS 修复终极版 function main(config) {
  
  // ======================================================= // [配置区] 请根据实际网络环境修改以下变量 // ======================================================= // 1. 公司内网真实的 DNS 服务器 IP (步骤一中获取的) // 务必替换成你实际看到的 IP const companyDNS = ["10.**.**.**"]; 

  // 2. 需要直连且必须走内网 DNS 的域名列表 const directDomains = [
    "local",
    "localhost",
    "*.internal.corp" // 示例:如有其他内网域名在此添加
  ];

  // ======================================================= // [逻辑区] 以下代码无需修改 // ======================================================= // 1. 初始化 DNS 配置 (防止简易 Profile 缺失 DNS 模块) if (!config.dns) config.dns = {};
  config.dns.enable = true;
  config.dns.ipv6 = false; // 建议关闭 IPv6 DNS 防止内网干扰
  config.dns.listen = "0.0.0.0:1053";
  config.dns['enhanced-mode'] = "fake-ip";
  config.dns['fake-ip-range'] = "198.18.0.1/16";
  
  // 设置默认公网 DNS (用于解析外网,如 Google) if (!config.dns.nameserver) {
    config.dns.nameserver = ["223.5.5.5", "8.8.8.8"];
  }

  // 2. 注入 DNS 分流策略 if (!config.dns['nameserver-policy']) config.dns['nameserver-policy'] = {};
  if (!config.dns['fake-ip-filter']) config.dns['fake-ip-filter'] = [];

  directDomains.forEach(domain => {
    // 【核心修复】强制这些域名去问 companyDNS,而不走系统默认或 Google
    config.dns['nameserver-policy'][`+.${domain}`] = companyDNS;
    
    // 【重要】加入 Fake-IP 白名单,防止返回假 IP 导致连接失败
    config.dns['fake-ip-filter'].push(`+.${domain}`);
  });

  // 常见的局域网反查也走公司 DNS
  config.dns['nameserver-policy']['geosite:private'] = companyDNS;

  // 3. 注入直连规则 (Rules) // 插入到规则列表最前面,确保优先级最高 const myRules = [
    "DOMAIN-SUFFIX,lenovo.com,DIRECT",
    "DOMAIN-SUFFIX,lenovo.com.cn,DIRECT",
    "DOMAIN-SUFFIX,local,DIRECT",
    "IP-CIDR,192.168.0.0/16,DIRECT",
    "IP-CIDR,10.0.0.0/8,DIRECT",
    "IP-CIDR,172.16.0.0/12,DIRECT",
    "GEOIP,CN,DIRECT"
  ];
  
  if (!config.rules) config.rules = [];
  config.rules.unshift(...myRules);

  return config;
}
## 4. 核心步骤三:节点配置 (VLESS)
这是连接 VPS 的基础配置文件。由于脚本是全局扩展的,这里只需要关注节点本身的连接信息。

*   **操作**:在 Clash Verge Rev -> **订阅 (Profiles)** -> 新建 -> 类型选 **Local** -> 编辑文件。
*   **注意**:请将下方的 `*` 号部分替换为你真实的服务器信息。

```yaml
# Local Configuration for My VPS
# 基础监听端口设置
mixed-port: 7890
allow-lan: true
bind-address: '*'
mode: rule
log-level: info
ipv6: true
external-controller: 127.0.0.1:9090

proxies:
- name: "My VPS Node"
type: vless
server: 144.**.**.** # 替换:你的 VPS IP 地址
port: 1444 # 替换:你的端口号
uuid: ********-****-****-****-************ # 替换:你的 UUID
network: tcp
tls: true
udp: true
flow: xtls-rprx-vision # 流控模式
servername: **** # 替换:你的伪装域名 (SNI)
client-fingerprint: chrome
reality-opts: # Reality 安全配置
public-key: ******************************************* # 替换:你的 Public Key
short-id: "" # 替换:如有 ShortId 则填入

proxy-groups:
- name: Proxy
type: select
proxies:
- "My VPS Node"

rules:
# 这里留空或只写兜底规则即可
# 上面的全局脚本会自动处理内网和直连规则
- MATCH,Proxy

📌 转载信息
原作者:
ganwurrt
转载时间:
2026/1/16 12:08:09

支持 Vision
示例 vless=192.168.1.1:443, method=none, password=23ad6b10-8d1a-40f7-8ad0-e3e35cd32291, obfs=over-tls, obfs-host=apple.com, reality-base64-pubkey=k4Uxez0sjl8bKaZH2Vgi8-WDFshML51QkxKFLWFIONk, reality-hex-shortid=0123456789abcdef, vless-flow=xtls-rprx-vision, tag=vless-tls-reality-vision-01

详细可参考 https://github.com/crossutility/Quantumult-X/blob/master/sample.conf

本来想放到 LV3 里的,但是最近太忙,好久没上,掉级了,只能放在 L2 了。
首先强调,以下内容均为本人主观看法,为避免不必要的麻烦,会对部分细节进行模糊。

今天一大早收到了两条 96110 的短信,说我有被骗的高风险,让我注意,我一头雾水。
没多久,接到派出所电话,说我使用了高风险软件,让我去派出所,或者他们上门。
我说我很忙,他们说那给我个地址,我们上门。

叔叔们来以后,说我昨天晚上翻墙了,手上还有个单子,上面我装的一些 APP,年纪大的叔叔不太懂,让年轻的小哥看
小哥说就那个 v2rayng 有问题,其它都没事
然后叔叔让我删了,让我别翻墙,给我讲了一些反诈案例
我说我保证不上违法网站,但工作需要,我没办法保证不翻墙
年轻的小哥说,你把那些账号全部退出,还有,你买的那个订阅账号也要退出,别用了
如果再触发告警,我们还要再来的
到这我就大概明白了,应该是流量被检测到了

回忆了一下最近的变化,原本我是+ 自建 分流的,自建主要用 AI,防降智,一直稳定无问题
但是 geimini 老搞 gemini+goole.com 两个域名对 IP 做比对检测,IP 不一致拒绝访问
我懒得去调整规则,就把【境外网站规则集】和【AI 规则集】都用直连节点了
大概用了一个多星期?昨天晚上看 ph 的时候可能久了点,流量大了点,被发现异常了

当然,还有另外一个可能性,就是被端了,但是线路是走 IEPL 的,这家也算 top,可能性比较低
如果是真的,那乐子太大了

–编辑线 ----
为什么我确认不是应用列表触发的?
因为叔叔能说出我是昨天晚上 12.30 触发告警的。
而我用的客户端是 cfm,而不是 v2rayng,如果真是列表触发的,它怎么知道我的时间点,还没发现我手机上有 cfm?

— 再度编辑线 ------
唉,朋友们,说了我不想惹麻烦,所以省略了细节,你们一再觉得我是个不懂反诈 APP 的傻子我就有点崩不住了。
首先,我确信我是移动流量被识别才被定位的
因为,96110 的短信,叔叔的所有电话打过来的,都是我的流量卡
我在任何官方平台,都没有使用过这个号码注册。
包括手机账号、各类官方 APP 账号,我连快递都没用过这个号。
其次,告警时间和我用流量上网的时间高度吻合


再度编辑线,和佬友们私信交流后,我产生了一个猜想:
机场可能真的存在风险
原本 IEPL 机场的流程是 SS 到境内节点,过 IEPL 出境到海外机器,进行转发
因为墙原本部署在出口上,所以对境内流量不进行检测(毕竟流量太大,老烧钱了)
但是如果,进行检测,那大家都无所遁形了


📌 转载信息
原作者:
pkoukk
转载时间:
2026/1/14 11:02:32

个人用差不多能用,多人蹬可能会慢一点,
加了监控流量,防止鸡炸掉,一定时间段滥用超出一定流量自动停止服务,我看到稍后会在解开,
各位可以蹬慢点,快了都用不了

链接

📌 转载信息
原作者:
hajimi2
转载时间:
2026/1/11 08:57:18

wispbyte 的网址:https://wispbyte.com/
有佬友发了在 wispbyte 跑 sing-box 的方法,因为其实它是一个容器,资源非常有限。
跑多了必然被 oom 杀掉。那提供一个直接 js 的方法建 vless 和 trojan,这样资源能得到有效控制。而且代码混淆,不容易被封杀。

出一篇手把手教程:

wispbyte.com , 是欧洲的一个厂家
它可以免费建立一个 server,准确的来说是一个容器,并且暴露一个端口出来

那先 Create Server,Server Name 和 Server Description 就都写 god01 好了

Server Type 当然选 Free Plan 的,运行环境就选 NodeJS

选完就按最下面的创建即可。

建好了那就去到 server manage 管理界面,下面有个 Startup:

分析红框中那句启动命令,意思很简单,如果配了 git,就去拉代码,如果有存在 npm 的 package.json,就先 npm install 安装,最后,运行主程序 index.js

下面选项是 Docker Image,本来以为是可以随便引用别处的镜像,结果是不能,只能选固定的,那就选不太激进的 nodejs_22 ,保存好

然后就什么都不用动了

然后去到左边的 Files 选项,缺省路径会是 /home/container/

上面图是已经装好运行的,如果是新服务器,是空无一物,没有任何文件

我们只需要准备 5 个文件和一个域名:

域名去免费搞一个,然后证书用大善人的let's encrypt搞定

tls.crt 证书文件,用let’s encrypt申请

tls.key 密钥文件,用let’s encrypt申请

index.html 用来装饰的环保单页面,如果不加,就会显示 hello world,太假了,可以让 gemini 给你生成一个,代码如下,注意改名 index.html:

index.txt

package.json 文件,index.js 运行时需要依赖的安装包文件,安装了 2 个包,axios 和 ws,注意改名 package.txt

package.txt (291 Bytes)

index.js 主文件,所有东西都在这里面,注意改名 index.js,上传的时候不知道为啥变成 indexjsp.txt 了

indexjsp..txt

这样就齐活了,index.js 需要修改的地方

const DOMAIN = process.env.DOMAIN || '1234.abc.com';       // 填写域名 const SUB_PATH = process.env.SUB_PATH || 'sub';            // 获取节点的订阅路径 const PORT = process.env.PORT || 7860;                     // 端口 
  • 域名我们要填写自己的域名

  • 路径要换掉,缺省是 sub,也就是订阅地址是 https://xxx.aaa.com/sub , 最好换成自己独特的地址

  • 端口也选这个服务器给你开的端口,我的是 10407, 看下图

然后改好了,别急着贴进去

打开: https://obfuscator.io/legacy-playground

贴进去代码,混淆一下,弄成谁也认不得的模样,然后 Copy,再贴进去

最后运行

看到 Online 就好了

那域名解析到这个 IP,打开 https 看看:

那再打开 https://www.bbb.com/sub , 如果改了 sub,那就是设置的别的路径,会显示一堆 base64 加密的字符串

从 v2rayN 导入,有两个代理,一个是 vless,一个是 trojan,就可以用了

关键是这么做的原理,就是用 index.js 完整实现了 vless 和 trojan 的功能,加了证书,并且做了混淆和伪装

这样很自然,比在容器里直接 sing-box 安全占用资源少,不容易被扫描到

当然,这个网站的速度不太行,所以只是一个玩具,没有套大善人 Cloudflare 的 CDN

自己用的是 huggingface.co + CF worker,速度还是可以的。

代码放在: GitHub - zhangrr/js-server: nodejs server

大家自行取用吧

也放到博客了:wispbyte.com 薅羊毛记 | 八戒的技术博客


📌 转载信息
原作者:
defunct9
转载时间:
2026/1/4 12:14:47

注册 wispbyte

记得选 python.

在控制台记住 ip 和端口号,别忘了改代码里的信息。

然后

import os
import subprocess
import urllib.request
import zipfile
import json
import uuid
import stat
import time
import shutil

# --- 【配置区域】 ---
PORT = 10312                    # 端口
SERVER_IP = "x.x.x.x"   # 你的IP
TARGET_SNI = "www.microsoft.com" 
LINK_NAME = "My-Reality-Final"   
# --------------------

XRAY_DOWNLOAD_URL = "https://github.com/XTLS/Xray-core/releases/download/v1.8.4/Xray-linux-64.zip" 
# 注意:我锁定了一个稳定版本 v1.8.4,防止 latest 版本出幺蛾子
BIN_PATH = "./xray"
CONFIG_PATH = "./config.json"
KEY_INFO_FILE = "./node_info.json"

# --- 备用密钥 (万一生成失败就用这组,保证能启动) ---
FALLBACK_PRIVATE = "mMzV5L6X9J5t1Kj8oO-0z9J594tj599fj9gd1Kj8oO-0z9J5t1Kj8k"
FALLBACK_PUBLIC = "Z80rIqjV1e9XvJ9mK4lN6qR5sT49rj0j24trjddB89_8rJk7XFp"
# ------------------------------------------------

def force_cleanup():
    """强制清理旧文件"""
    print("正在清理环境...")
    try:
        if os.path.exists(BIN_PATH): os.remove(BIN_PATH)
        if os.path.exists("xray.zip"): os.remove("xray.zip")
        # 也要删除旧的密钥文件,防止读取到错误数据
        if os.path.exists(KEY_INFO_FILE): os.remove(KEY_INFO_FILE)
    except Exception as e:
        print(f"清理警告: {e}")

def download_xray():
    print(f"正在下载 Xray Core (v1.8.4) ...")
    zip_path = "xray.zip"
    try:
        opener = urllib.request.build_opener()
        opener.addheaders = [('User-agent', 'Mozilla/5.0')]
        urllib.request.install_opener(opener)
        urllib.request.urlretrieve(XRAY_DOWNLOAD_URL, zip_path)
        
        with zipfile.ZipFile(zip_path, 'r') as zip_ref:
            zip_ref.extractall(".")
            
        st = os.stat(BIN_PATH)
        os.chmod(BIN_PATH, st.st_mode | stat.S_IEXEC)
        os.remove(zip_path)
        print("Xray 安装完成。")
    except Exception as e:
        print(f"❌ 下载失败: {e}")
        exit(1)

def get_keys():
    print("正在准备 Reality 密钥...")
    private_key = FALLBACK_PRIVATE
    public_key = FALLBACK_PUBLIC
    
    # 尝试生成新密钥
    try:
        process = subprocess.Popen([BIN_PATH, "x25519"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
        stdout, stderr = process.communicate()
        
        if "Private key:" in stdout and "Public key:" in stdout:
            # 标准格式解析
            private_key = stdout.split("Private key:")[1].split("Public key:")[0].strip()
            public_key = stdout.split("Public key:")[1].strip()
            print("✅ 成功生成新密钥。")
        else:
            print("⚠️ 密钥生成输出格式异常,切换至【备用密钥】模式。")
            print(f"异常输出内容: {stdout}")
            
    except Exception as e:
        print(f"⚠️ 生成过程出错 ({e}),切换至【备用密钥】模式。")

    # 生成 UUID
    user_uuid = str(uuid.uuid4())
    short_id = "".join(list(map(lambda x: hex(x)[2:], os.urandom(4))))

    info = {
        "uuid": user_uuid,
        "private_key": private_key,
        "public_key": public_key,
        "short_id": short_id
    }
    
    # 保存
    with open(KEY_INFO_FILE, 'w') as f:
        json.dump(info, f, indent=4)
        
    return info

def create_config(info):
    config = {
        "log": {"loglevel": "warning"},
        "inbounds": [{
            "port": PORT,
            "protocol": "vless",
            "settings": {
                "clients": [{"id": info["uuid"], "flow": "xtls-rprx-vision"}],
                "decryption": "none"
            },
            "streamSettings": {
                "network": "tcp",
                "security": "reality",
                "realitySettings": {
                    "show": False,
                    "dest": f"{TARGET_SNI}:443",
                    "xver": 0,
                    "serverNames": [TARGET_SNI],
                    "privateKey": info["private_key"],
                    "shortIds": [info["short_id"]]
                }
            }
        }],
        "outbounds": [{"protocol": "freedom", "tag": "direct"}]
    }
    with open(CONFIG_PATH, "w") as f:
        json.dump(config, f, indent=4)
    print("配置文件已就绪。")

def print_share_link(info):
    link = (f"vless://{info['uuid']}@{SERVER_IP}:{PORT}"
            f"?security=reality&encryption=none&pbk={info['public_key']}"
            f"&headerType=none&fp=chrome&type=tcp&flow=xtls-rprx-vision"
            f"&sni={TARGET_SNI}&sid={info['short_id']}#{LINK_NAME}")
    
    print("\n" + "="*60)
    print(f"🚀 节点已启动!请复制下方链接:")
    print("-" * 20)
    print(link)
    print("-" * 20)
    print("="*60 + "\n")

def main():
    force_cleanup()
    download_xray()
    info = get_keys()
    create_config(info)
    print_share_link(info)
    
    print(f"正在启动 Xray Core (Port {PORT})...")
    sys_env = os.environ.copy()
    process = subprocess.Popen([BIN_PATH, "run", "-c", CONFIG_PATH], 
                               stdout=subprocess.PIPE, 
                               stderr=subprocess.STDOUT,
                               text=True,
                               env=sys_env)
    for line in process.stdout:
        print(line, end='')
    process.wait()

if __name__ == "__main__":
    main()

创建 main.py,把上面代码放进去并修改对应的信息,完事。
补一个测速。

值得点赞吗

如果赞够多我就再多研究一下


📌 转载信息
转载时间:
2025/12/30 15:30:22