Total Pageviews

Tuesday, 22 September 2026

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,不会使用随机落地。

一台VPS就能开机场,寄生到其他机场大幅降低成本开机场的方法

 相关网址

v2board面板(已停更):https://github.com/v2board/v2board
Xboard面板(基于v2board二次开发):https://github.com/cedar2025/Xboard
SSPanel面板:https://github.com/Anankke/SSPanel-UIM/
XrayR:https://github.com/XrayR-project/XrayR


相关指令
routing:

{
  "domainStrategy": "IPOnDemand",
  "rules": [
    {
      "type": "field",
      "inboundTag": ["Shadowsocks_0.0.0.0_30000"],
      "outboundTag": "hk1"
    },
    {
      "type": "field",
      "inboundTag": ["Shadowsocks_0.0.0.0_30001"],
      "outboundTag": "tw1"
    },
    {
      "type": "field",
      "inboundTag": ["Shadowsocks_0.0.0.0_30002"],
      "outboundTag": "jp1"
    },
    {
      "type": "field",
      "inboundTag": ["Shadowsocks_0.0.0.0_30003"],
      "outboundTag": "sg1"
    },
    {
      "type": "field",
      "inboundTag": ["Shadowsocks_0.0.0.0_30004"],
      "outboundTag": "kr1"
    },
    {
      "type": "field",
      "inboundTag": ["Shadowsocks_0.0.0.0_30005"],
      "outboundTag": "us1"
    },
    {
      "type": "field",
      "inboundTag": ["Shadowsocks_0.0.0.0_30006"],
      "outboundTag": "my1"
    },
    {
      "type": "field",
      "inboundTag": ["Shadowsocks_0.0.0.0_30007"],
      "outboundTag": "ua1"
    }
  ]
}


outbounds:

[
    {
    "tag": "IPv4_out",
    "protocol": "freedom",
    "settings": {}
    },
    {
    "protocol": "blackhole",
    "tag": "block"
    },
    {
      "tag": "hk1",
      "protocol": "shadowsocks",
      "settings": {
        "servers": [
          {
            "address": "141.91.75.233",
            "method": "aes-128-gcm",
            "password": "e7c42a89-8153-4cb4-bf7c-0a113d2ac6d7",
            "port": 10001
          }
        ]
      }
    },
    {
      "tag": "tw1",
      "protocol": "shadowsocks",
      "settings": {
        "servers": [
          {
            "address": "61.124.127.25",
            "method": "aes-128-gcm",
            "password": "e7c42a89-8153-4cb4-bf7c-0a113d2ac6d7",
            "port": 10003
          }
        ]
      }
    },
    {
      "tag": "jp1",
      "protocol": "shadowsocks",
      "settings": {
        "servers": [
          {
            "address": "212.17.195.238",
            "method": "aes-128-gcm",
            "password": "e7c42a89-8153-4cb4-bf7c-0a113d2ac6d7",
            "port": 10003
          }
        ]
      }
    },
    {
      "tag": "sg1",
      "protocol": "shadowsocks",
      "settings": {
        "servers": [
          {
            "address": "154.11.47.139",
            "method": "aes-128-gcm",
            "password": "e7c42a89-8153-4cb4-bf7c-0a113d2ac6d7",
            "port": 10003
          }
        ]
      }
    },
    {
      "tag": "kr1",
      "protocol": "shadowsocks",
      "settings": {
        "servers": [
          {
            "address": "141.56.96.109",
            "method": "aes-128-gcm",
            "password": "e7c42a89-8153-4cb4-bf7c-0a113d2ac6d7",
            "port": 50053
          }
        ]
      }
    },
    {
      "tag": "us1",
      "protocol": "shadowsocks",
      "settings": {
        "servers": [
          {
            "address": "23.241.137.34",
            "method": "aes-128-gcm",
            "password": "e7c42a89-8153-4cb4-bf7c-0a113d2ac6d7",
            "port": 10001
          }
        ]
      }
    },
    {
      "tag": "my1",
      "protocol": "shadowsocks",
      "settings": {
        "servers": [
          {
            "address": "103.121.239.214",
            "method": "aes-128-gcm",
            "password": "e7c42a89-8153-4cb4-bf7c-0a113d2ac6d7",
            "port": 10001
          }
        ]
      }
    },
    {
      "tag": "ua1",
      "protocol": "shadowsocks",
      "settings": {
        "servers": [
          {
            "address": "92.111.231.47",
            "method": "aes-128-gcm",
            "password": "e7c42a89-8153-4cb4-bf7c-0a113d2ac6d7",
            "port": 10001
          }
        ]
      }
    }
]



搭建机场的门槛非常低,只要你有一台vps,会使用xui搭建节点,那么搭建机场对你来说也就不是什么难事了,xui其实就是一个前端web界面加上一个xray内核组成,我们只需要在网页上点点鼠标就完成了节点的搭建,然后xui会将我们配置的节点发给xray内核,真正负责翻墙工作的是xray内核
而机场就像是一个加了注册系统、订阅系统、以及支付系统的多用户xui面板,其他人可以通过网页注册,然后购买套餐,来订阅和使用你搭建的节点,常见的机场开源面板有v2
board和sspanle,这些面板也都只是实现了前端web页面,真正实现翻墙功能的同样是后端的xray内核,但是这个xray内核需要能对接机场面板的api接口,实现增删用户,流量统计等功能,所以需要对内核进行魔改,最常见的开源后端就是xrayR,也有一些收费的闭源后端针对多用户进行了优化,会有更好的性能表现

接下来就来实战演示搭建一个机场,事先声明,教程仅仅是为了让大家了解机场是怎么运作的,不提倡也不建议实际运营机场,存在法律风险。

这里我们以v2board前端和xrayR后端为例进行演示,由于v2board实际上已经停更了,所以我们用还在更新的xboard,首先进入github项目地址,这里可以看到项目说明以及对原版v2board做了哪些更新和优化,提供了四种搭建方式,我就以最简单的docker部署来演示,如果你习惯使用宝塔之类的管理面板,可以使用其他三种方式搭建,搭建都是按步骤一步步无脑操作即可,首先使用这段指令安装docker,我用的vps系统是ubuntu22.04,将指令粘贴到vps上执行,等待完成即可,大概需要三五分钟,接着执行第二步克隆仓库,然后执行第三步安装xboard,提示是否启用sqlite数据库来代替mysql,为了简单一点我们使用方向键选择启用,如果你真的想做大做强再创辉煌,后期也可以自行迁移到mysql,具体二者什么区别请自行谷歌,点击回车,提示创建失败,不用管,提示使用docker内置的redis,同样选择启用,输入邮箱地址设置管理员账号,回车,这样我们的xboard机场面板就搭建好了,可以说是非常简单,管理员的密码和后台地址都是随机生成的,将其复制出来,最后再执行这条指令启动xboard,接着就可以使用ip加默认端口7001访问机场了,确保你的防火墙已经放行了7001端口,这个登陆界面相信很多用过机场的朋友都比较熟悉,你可以注册一个账号,或者直接输入我们刚才创建的管理员账号密码进行登陆,现在地址栏我们是通过ip+端口的方式访问,作为一名合格的机场主,怎么着也得有个域名了,我以这个域名为例,来到dns设置,添加一条a记录,名称写个@,地址填写vps的ip,代理状态要打开,点击保存,再添加一条,名称填写www,地址填写vps的ip,同样启用代理状态,点击保存,来到ssl,确保加密模式为灵活,来到规则下的origin rules,点击创建规则,随便给个名称,跟着视频演示进行配置,意思是当别人访问121343.xyz或者www.121343.xyz的时候,就命中这条规则,而这条规则的动作是重写到7001端口,点击部署,稍等片刻,不出意外的话就可以直接使用域名访问机场面板了,并且自动套上了tls证书,重新登陆,目前我们还没有购买所以没法使用,点击购买订阅,由于我们并没有添加任何套餐,所以没法购买,此时我们就需要进入网站后台设置,后台路径是这个,输入管理员的账号密码登陆网站后台,一切网站的设置都在后台进行,普通用户对这个界面应该比较陌生,因为只有机场主才能进入的后台,有漏洞除外,我不打算每个设置都讲一遍,因为这些基本配置看字面意思应该就能理解,而且我的目的是为了让大家了解机场的运作原理,而不是让大家去搭建机场,只讲比较重点的对接节点,一般机场都会开启邮箱验证,防止被人刷爆数据库,开了的话还需要配置smtp发送邮箱验证码,什么是smtp请自行了解,也可以设置推广佣金比例之类的,最主要的是节点这里要设置一个通讯密钥,这是和xrayR后端通讯时要用的,这个很重要不能被任何人知道,设置越复杂越好,除此之外还要配置支付方式,也就是别人购买套餐的付款方式,你可以使用支付宝的当面付当面抓,也可以使用加密货币,而更多机场为了隐私和便利性,会对接第三方支付平台的商家,商家会提供支付宝和微信等收款方式,然后从中抽取10%左右的手续费,我这里就不演示怎么对接了,另外还可以安装其他主题,让页面更好看,这些我们也都不演示,直接讲怎么对接节点

首先需要添加权限组,不同的套餐等级对应不同的权限组,方便分配不同的节点,我这里演示添加三个权限组,名称可以随便填,接着添加不同的订阅套餐,套餐描述主要介绍这个套餐的权益,比如限速多少,月流量多少、节点类型之类的,为了好看还可以添加emoji符号,然后设置套餐价格,套餐流量,权限组就和套餐对应,一般都是按月重置流量,可以限制设备数量以及网速,点击提交,将销售状态开启,这样我们在用户中心就可以看到订阅套餐了,再来添加两个

假设我现在购买一个套餐,价格是我们在后台设置好的,如果你在后台设置了优惠券的话还可以填写优惠券,点击下单,然后结账,由于我们没有对接支付,所以提示支付不可用,如果对接了的话就会让你选择支付方式扫码付款即可,我这里视频演示就直接在后台操作完成订单,这样我就算是购买了套餐1,每月可用流量是100G,接着就可以复制订阅地址使用节点了,但遗憾的是现在还没有任何节点,因为我们根本就没有对接节点,

现在我们只是安装了v2board这个机场面板,v2board本身是没有翻墙能力的,他只是一个管理多用户节点的网页面板,就像xui也只是一个网页面板,真正实现翻墙功能的是xray内核,由于xui是面向单用户单节点的使用场景,所以会自动在同一台vps上安装xray内核,我们在xui里添加节点之后就能直接使用了,而机场是面向多用户多节点的使用场景,节点和面板不在同一台vps上,比如你的机场提供香港的节点,就得在香港的vps上安装内核,台湾节点就要在台湾的vps上安装内核,所以需要我们自己在其他vps上安装内核来进行节点对接

回到后台,进入节点管理,添加一个节点,以ss节点为例,假设我现在添加一个香港的节点,倍率为1就表示别人使用这个节点消耗了1G流量,套餐实际上就扣除1G流量,这些按字面意思理解,可以不用填,权限组也就是哪个等级能用这个节点,所有套餐都能用的话就全部选上,节点地址填写vps的ip或者做了dns解析的域名,视频演示我就以这台搭建了机场面板的vps为例,假装这是其他某台香港的vps,将ip填入这里,连接端口就是用户订阅链接里使用的端口,随便填个空闲端口,比如30000,服务端口就是这个香港vps的节点实际运行在哪个端口,如果是直连的话就必须和连接端口一样设置为30000,中转的话等会再说,至于加密算法,以及混淆参数,这些一个视频讲不清楚,可以回看我的经典老番节点搭建系列教程,都有比较详细的解释,包括vmess的tls设置,传输协议等等,这些参数如果你不了解工作原理的话很难配明白,最后点击提交,面板这边就算是配置好了,将其启用,这样我们就可以在用户中心看到节点信息了,但此时还不能使用,可以看到状态显示红色的,因为我们还没有对接节点,我们这里用到的后端是开源的xrayr,本质上他就是xray,只是添加了对接机场面板的功能,进入这里查看xrayr的文档,使用这条指令一键安装,注意你应该安装在对应的香港节点vps上,安装完成后使用指令xrayr查看相关选项,目前没有运行,因为我没还没有进行配置,输入0可以修改配置,配置项还是非常多的,在这里修改不太方便,建议使用sftp将配置文件下载到本地,配置文件在/etc/xrayr的目录下,我当前使用的这个ssh工具是termius,免费版支持sftp,有需要自行到官网下载,将xrayr的配置文件使用本地编辑器打开,这样修改就非常方便了,这些配置看上去很复杂,实际上一点也不简单,要想了解各个参数的作用请自行查阅官方文档,我这里没法展开讲,现在我们要对接ss节点,跟着视频操作,从这行开始将后面的全部删除,然后设置面板类型,我们用的是xboard,这里就选NewV2board,apihost就是我们需要对接的机场,将机场域名填入,apikey就是我们在后台设置的通讯密钥,节点id对应后台面板里的id,这个id是1,将其改成1,节点类型默认是v2ray,包含了vmess和vless,我们对接的是ss,所以改成shadowsocks,其他参数保持默认,这样就算是配置好了,对接ss挺简单的,但如果你要配置证书啥的就比较麻烦一点,我们这里没有配置加密方式以及密码这些信息,说明是通过机场面板来获取的,也就是xrayR会使用这个通讯密钥去找机场开放的api接口获取所有的用户信息,包括用户密码,套餐限速这些信息,所以这个密钥很关键不要泄漏了
保存修改后的配置文件,重新上传到vps覆盖原来的配置,然后使用xrayr restart指令重启,一般修改配置后也会自动重启,此时就提示我们启动成功了,对接大概率成功了,使用log指令查看日志信息,可以看到从机场面板获取到了一个用户信息,现在是红色状态,刷新网页后变成了黄色状态,说明我们已经对接好了,但是最近没有人使用这个节点,用户界面状态也变了,重新来订阅试试,此时就有内容了,导入节点工具,测一下真延迟,能通就说明没有问题,同时xrayr的日志显示了我们刚才测试时候的连接,这里牵扯到普通用户比较关心的问题,使用别人的节点,他能看到你的哪些隐私数据,日志中记录了什么时间,哪个用户使用哪个ip访问了哪个网站,这些信息机场主都能看到,更详细的可以回看我三年前的经典老番节点钓鱼那期视频,演示了最坏的情况,那时候我还是个到处薅免费节点的羞涩男孩,总之你要是特别在乎隐私的话还是自己搭建节点吧。

接着我们就可以选中这个节点进行科学上网了,简单查个ip,落地ip确实是我们的节点ip,现在再来刷新页面,节点状态显示蓝色的,说明这个节点没问题并且最近有人使用过,接着就可以如法炮制创建其他地区的节点了,如果类型一样的话,也可以直接点击这里复制一个香港节点出来,然后改动必要的参数,比如你要搭建台湾的节点,这里改成你台湾vps的ip地址,我这里视频演示就还是以同一台vps为例,绝对不是因为我穷,单纯就是为了方便演示,顺便向大家说明一台vps实际上可以搭建无数个节点,所以别再通过机场节点数量的多少来判断机场的好坏了,端口30000已经被占了,这里我们改成30001,点击提交,启用他, 再重新修改xrayr的配置文件,从这一行开始复制之后的所有内容,另起一行,粘贴上去,注意空格要对齐,否则无法启动,将id改成台湾节点对应的id,也就是2,其他都一样不用改了,点击保存,重新上传覆盖,可以看到目前有两个节点了,刷新订阅地址,很明显长了许多,复制到节点工具,台湾节点也有了,同样可以正常使用,当然落地ip的话还是我们这台香港的vps,只是为了做个演示,刷新页面,台湾节点的状态指示也变成了正常的蓝色

在2024年的今天大部分机场都已经上中转了,中转实际上就是干端口转发的活,原理可以回看这期视频,假设我想给这个香港节点套中转,先复制一条出来,随便给个高大上的名称,比如IEPL广港专线,并且将权限组等级1删掉,表示套餐1的用户不能使用这个高贵的专线节点,节点地址填写专线入口的ip,视频演示我就假设为1.1.1.1,端口填写专线入口的端口,假设为34567,服务端口保持不变,将父节点设置为香港,点击提交,这样就算是创建好了中转,启用他,回到用户界面查看节点状态,并没有显示中转节点,因为刚才我们设置了套餐1没有权限使用中转节点,我们这个用户买的是套餐1,在后台将其切换为套餐2,就能看到中转节点了,重新订阅,就有三个节点了,当然这条中转只是为了演示操作流程,专线入口ip是假的所以节点用不了

可以看到机场的搭建确实非常简单,但门槛低并不意味着做好就很容易,更不意味着能赚到钱,简单算一下成本,刚开始假设你有10台vps,算便宜一点50每月,也就是vps每月的成本是500,不算多,对于刚起步的机场,如果你本身不带流量,还得找affman帮你宣传推广,佣金20%对于新机场而言算少的了,第三方支付还要再抽10%,这里才是大头,现在基本都是中转机场,你又得花钱买中转服务,这也是大头,另外为了满足用户的流媒体需求,还需要花钱买DNS解锁服务,大概还剩个30%的利润,1w的流水赚3000,除此之外运营期间还需要解决小白用户各种高血压问题,以及可能出现的攻击勒索,支付跑路,上门查水表等情况,典型的赚着白菜钱,操着白粉心,我的建议是不如找个班上

最后教大家一个奇技淫巧,只需要一台vps就能搭建一个点亮全球节点的机场,大大降低机场成本,利润翻番也不是不可能,当然目的还是以技术交流为主,不提倡大家这么做,这招就是之前讲过的二级代理,给xrayR套一个或者多个其他机场的节点,比如这个机场点亮了很多国家地区,我只需要到这个机场买个套餐,然后让xrayR将收到的数据转发给这个机场的节点,这样我们就不需要自己买vps了,而且如果别人的机场能解锁流媒体,那么你的机场也就实现了解锁流媒体,简直不要太爽

这些是其他机场的节点,节点都是有延迟可以正常使用的,并且我已经将他添加到这个配置文件里,比如这个是hk香港ss节点,tw台湾节点,jp日本节点,以此类推,这些用到的示例配置我也会放在视频下方说明栏,打开xrayr目录下的outbound配置,将里面的内容使用我们的节点替换掉,保存并且上传覆盖,接着打开route配置文件,使用这段配置进行覆盖,这个配置的功能就是实现30000端口的ss节点收到需要代理的数据,将使用机场的hk香港的ss节点将数据发送出去,30001端口的ss节点收到需要代理的数据,将使用机场的tw台湾的ss节点将数据发送出去,以此类推,全选复制,覆盖原来的route配置,保存并上传覆盖,接着回到面板,先将之前演示过的节点删除,然后创建各个地区的节点,注意端口要对应我们刚才设置的端口,从30000开始,复制几个节点出来,修改成对应地区的端口,改好之后将其全部启用,接着重新打开xrayr的配置文件,同样创建对应id的节点进行对接,然后删除route和outbound配置的#号注释,保存并且上传覆盖,此时应该就配置好了,这些节点全部上线了,接着重新订阅,选中韩国节点,注意观察国家地区,刷新后变成了kr韩国,切换为日本节点,就变成了jp日本了,这样一个vps就能实现多个地区了,我相信有些小机场就是这么干的,而有些机场为了杜绝被别人寄生,会限制连接数,但你只要多买几个套餐对接就行了,甚至可以买不同的机场同时对接,做负载均衡,故障转移等更进阶的操作

谨防成为别人的游戏加速器,v2ray/xray/clash的socks代理认证被绕过,可被黑客利用,当作跳板中转机。软路由用户的安全是重灾区,mihomo中转代理配置技巧


查询你的公网IP:https://www.ip138.com
检测端口是否开放:https://mtool.chinaz.com/port
相关讨论:https://github.com/v2fly/v2fly-github-io/issues/104

相关指令:
shodan搜索x-ui:http.html:assets/qs/qs.min.js
shodan搜索中国区clash:http.html_hash:-121906438 country:CN

检测socks5代理(python):
import socket
from concurrent.futures import ThreadPoolExecutor

def is_socks_proxy(host, port):
    try:
        with socket.create_connection((host, port), timeout=2) as s:
            s.sendall(b'\x05\x01\x00')  # 使用 SOCKS5 协议发送版本号和认证方法
            response = s.recv(1024)
            if response and response[0] == 5:
                print(f"{host}:{port} is socks5")
    except Exception as e:
        pass

def scan_ports(hosts, ports, num_threads=30):
    with ThreadPoolExecutor(max_workers=num_threads) as executor:
        for host in hosts:
            for port in ports:
                executor.submit(is_socks_proxy, host, port)

if __name__ == "__main__":
    hosts = ['1.1.1.1', '2.2.2.2']
    ports = [7890, 7891, 7892, 7893]

    scan_ports(hosts, ports)



mihomo 配置(Clash.Meta):

listeners:
- name: socks-in
  type: socks
  port: 7891
  listen: 127.0.0.1
  udp: false
  
tunnels:
- network: [udp]
  address: 127.0.0.1:7891
  target: 6.6.6.6:7891
  proxy: DIRECT

proxies:
- name: "socks"
  type: socks5
  server: 127.0.0.1
  port: 7891

- name: "hysteria2"
  type: hysteria2
  server: 1.1.1.1
  port: 443
  password: 123456
  skip-cert-verify: true
  dialer-proxy: socks

rules:
- match,DIRECT #直接利用UDP
#- match,hysteria2 #中转利用UDP


当你使用v2ray、xray或者clash进行科学上网的时候,有可能已经成为别人的中转服务器了,不怀好意的黑客可以利用你的IP做跳板干坏事,本期就来聊聊v2ray、xray、clash都存在的安全风险

很多朋友在进行科学上网的时候,会将socks代理暴露在公网上,比如软路由用户要进行远程访问,或者电脑直接拨号在DMZ区域,以及在vps上使用xui搭建socks节点等行为,很多小白用户跟着网上的教程配置好科学上网之后,并不知道自己的socks代理已经暴露在公网,而有经验的用户知道暴露在公网,但给socks设置了密码认证,以为万事大吉,殊不知socks的认证可以轻松绕过,导致节点被人白嫖或者变成别人的中转跳板机

在解释这个问题之前我们先来演示一下利用之后的效果,事先声明,本教程仅供学习交流,视频中的演示均为实验环境,禁止任何公网环境的扫描利用活动

访问这条链接,我们可以获取到中国区暴露在公网的clash用户,搜索到了将近5000条结果,如果用fofa的话搜索结果会更多,这里可以看到地区分布,最多的是深圳,然后是上海,北京,随便访问一个,返回内容是未通过clash授权的api页面,说明这个用户的clash暴露在公网上,但开启了api鉴权,列表里其他的搜索结果也都是这种情况,通过一些手段,我获取了其中一部分ip,接着使用python脚本简单扫描openclash的默认socks端口7891,可以轻易获取到一堆符合条件的ip,如果全端口扫描的话结果会更多,这些ip大部分都能被利用(有些甚至没有开启密码认证),接着使用这段配置来运行mihomo,mihomo也就是clash.meta,现在改名了,为了便于理解,以下我们还是把它叫做clash,先不用管这些配置是什么意思,随便复制一个刚扫描出来的ip,把target替换掉,保存配置,然后运行clash,现在clash收到的所有udp数据将会发给这个ip地址的7891端口,可以通过nat检测工具来观察这一现象,该软件设置的代理是7891端口,也就是说这个软件的udp数据会发给clash,点击test尝试连接,不通可以多尝试几次,多次尝试不通的话,大概率是对方使用的节点不支持udp,换一个再试试,重新运行clash,再次尝试连接,可以看到这里返回了一个103开头的ip,这个既不是我的ip,也不是对方113开头的ip,而是对方当前clash使用的节点ip,简单验证一下ip的归属地,是香港的节点,用同样的方法再来测试几个,显示了一个103开头的ip,说明这个117的用户正在使用103的节点进行科学上网,并且这个节点的udp是通的,同样是香港的节点,这个用户使用的是日本的节点

现在的情况相当我电脑的udp数据可以直接让别人家里的clash帮我代理,即使别人的clash开启了api鉴权,socks也开启了密码认证,都可以被直接绕过

造成这个问题的原因是v2ray系和clash系的socks协议没有按照rfc的规范来实现
这里简单讲讲socks协议的代理流程,假设电脑开启了v2ray或者clash,并且开启了socks代理以及socks密码认证,端口为7890,浏览器访问谷歌的tcp请求会交给clash的7890端口,由于开启了密码认证,clash会询问socks的账号密码,假设浏览器支持socks的密码认证,并且设置了正确的账号密码,会将账号密码发给clash,clash验证通过,然后帮我们代理访问谷歌,再假设浏览器通过udp访问谷歌,由于socks的udp本身是没有认证机制的,所以需要借助tcp完成认证,浏览器会先和clash的7890端口建立tcp的socks连接,clash同样会询问socks的账号密码,浏览器将账号密码发给clash,此时就是关键步骤,按照rfc的规范,socks验证通过后,会随机监听一个空闲的udp端口发送给浏览器,假设为6666,浏览器会将udp数据发给这个随机的6666端口,让其帮忙代理,6666端口是clash开启的,所以clash收到数据后,会帮我们代理udp数据,但v2ray和clash的socks并没有按照rfc的标准实现udp,端口并不是随机的,而是固定和tcp的端口一样,比如tcp的socks端口是7890,那么udp的socks端口也是7890,这是一个非常省事的做法,如果只是在本机使用的话确实没有什么问题,问题出在公网环境,假设你的电脑或者软路由暴露在公网环境,socks代理也暴露在公网环境,我通过刚才演示的扫描获取到了你的ip地址以及socks端口,此时我并不知道你的socks账号密码,但你的udp是不需要认证的,所以我只需要在我的电脑上使用clash开启socks代理,当我电脑想通过udp访问谷歌的时候,请求来到clash,我可以让clash将我电脑的udp请求直接转发到你的clash,由于udp并没有认证机制,所以你的clash会乖乖代理我的udp数据,这样就绕过了tcp的认证可以直接代理udp数据了。

clash和v2ray都存在这种问题,以及衍生的xray和clash.meta也都继承了这个问题,而singbox是按标准的rfc规范实现的socks代理,每次连接udp都会开一个随机端口,所以不存在这个问题。

其实早在3年前这个问题就已经讨论过了,但一直没有解决,或许是开发者们并没有意识到很多人会直接将本地的socks代理暴露在公网环境,尤其是软路由流行之后,大部分人都不知道自己暴露了

另外这里说他是漏洞,对此我不敢苟同,这怎么会是漏洞呢?你只要把家里的网线拔了别人不就没法利用了,被利用都是用户自己配置的问题, 况且你见过3年不修的漏洞吗?所以这不是漏洞,is feature

现在可以来讲讲这个clash.meta的配置文件了,clash在7891端口开启了socks代理,为了防止udp端口被占用,将udp设置为false关闭,然后在下面的tunnel里监听udp的7891端口,将该端口收到的数据全都通过直连转发到target目标ip和端口,当clash从tcp的7891端口收到socks的认证信息后,clash会将udp的7891端口返回给浏览器,浏览器会将udp数据发给udp的7891端口,而udp的7891端口收到的数据会被clash转交给target,这样就实现了我们刚才演示的效果,udp跑到别人家的clash上去了

单单只能利用udp的话用处并不大,除了游戏以及部分使用quic的网页外,目前互联网上大部分流量都是tcp,但我们可以间接利用他的udp来中转纯udp的代理协议,实现跳板的效果,比如hy2协议就是基于udp的,忽略hy2本身可以提速的特点,如果你家的udp对我来说速度不错,那就可以用来中转加速我的节点,还能防止我的节点被墙

这个clash配置中还创建了两个节点,一个socks节点,一个是hy2节点,hy2节点的数据会交给socks节点代理,而socks节点其实就是本机的7891端口,由于hy2是纯udp数据,所以数据都会交给7891的udp端口,而7891的udp端口收到数据后,会直接转发给target,也就是别人家的clash,这样就实现了中转hy2,

首先我在这台vps上搭建了hy2节点,流控用的是bbr,怎么搭建可以回看这期视频,hy2本身就有提速效果,我们这里主要是介绍利用方法,中转之后效果可能还不如直连,将分流规则改成发给hy2节点,重新运行clash,udp数据还是直接发给别人的clash,接着浏览器开启代理,浏览器所有数据将会发给clash,而clash会发给hy2节点,hy2节点再将数据发给别人家的clash,实现中转跳板的效果

另外我见过很多人使用xui搭建socks,可以通过这条链接搜索xui面板,有4w多条结果,由于xui搭建节点都是随机端口,一个个扫的话显然不科学,一般都是按asn和地区过滤,比如价值比较高的搬瓦工香港cn2gia线路,600多一个月的线路被人扫到的话就会被当成游戏加速器了

而有些用户使用xui搭建socks节点后,可能vps速度不理想,还会再使用中转来加速socks代理,但他们忽略了中转会绕过udp的流量,因为根据刚才的讲解,socks代理会直接返回本机ip作为udp的入口,所以你的udp流量根本没有经过中转,而是直接发给了vps,我之前的视频中也提醒过大家不要用来中转socks协议,不仅udp会被绕过起不到中转加速的效果,还会被人利用

假设现在我创建一条中转,准备用来加速游戏,所以选择最贵的阿里专线,倍率为240倍,这里的可用端口是1w到5w,我这里视频演示就随便填一个目标地址,点击确定,我的目的仅仅是为了拿到这个专线入口的ip地址,另外这里分配给我的随机端口是44569,接着使用nmap对这个ip进行扫描,获取开放的端口,端口范围是1w-5w,可以看到开放了很多端口,包括我刚才创建的44569,接着用同样的方法扫描这些端口看看哪些是socks代理,有了ip和端口,又知道他是socks代理,如果他用的是v2ray或者xray搭建的socks,那么就可以白嫖这条240倍的阿里专线了,随便尝试一个,运行clash,尝试连接,成功获取到了落地ip,现在我们是通过阿里专线中转访问对方的vps,这个vps的归属地为香港,并且可以用来加速中转我们的hy2节点,消耗的240倍流量将会算在别人的头上
再次强调,以上演示均为实验环境,目的在于让大家了解被利用后的具体危害

最后再来讲讲怎么确认自己的socks代理已经暴露在公网,首先访问这个网址获取运营商分配给你的公网ip,如果检测到的是节点ip,需要先关闭翻墙软件,然后打开这个端口扫描的网站,将你的公网ip填入这里,下面填写你的socks代理端口,比如你用的是v2rayN,那么默认的socks端口是10810,clash for windows的话默认是7890,openclash默认是7891和7893,具体以你使用的软件为准,然后点击查询,如果多次查询后这里显示关闭,说明你目前不存在这个问题,不用太担心

如果显示开启,说明你的socks代理已经暴露在公网了,大概率可以被别人利用,对于这种情况你需要修改防火墙配置,软路由用户进入网络下的防火墙设置,将wan区域的入站改为拒绝,然后保存应用就可以解决了,再重新扫描端口的话应该就是关闭状态,但这样做会影响你的其他需要公网访问的服务,因为你改为接受的目的应该就是为了公网访问,所以我们可以通过规则只屏蔽socks端口,进入通信规则,点击添加,随便给个名称,你可以单独选择只屏蔽udp流量,或者tcp和udp都屏蔽,源区域设置为wan,目标端口填写socks端口,有多个的话用空格隔开,操作改为拒绝,点击保存,最后点击保存并应用,再重新扫描端口的话应该就是关闭状态,你自己也无法在公网连接家里的socks代理了,但你的其他公网服务是可以正常访问的。另外如果是你通过端口转发的方式开放端口到公网,建议只开放tcp端口,或者直接关闭socks的端口转发

如果你是用v2rayN或者clash for windows这种桌面客户端,出现这种情况的概率很小,除非电脑是直接拨号或者放在DMZ区域,就会出现被人强制疯狂连接的情况,这种小概率事件就不讲了,如果你确实遇到了请自行谷歌搜索怎么配置系统防火墙

另外对于xui的用户肯定是暴露在公网了,所以不建议搭建socks代理,如果你有非搭建不可的原因,建议不要开启udp,但如果你又非要用到udp的话,那就自求多福吧,当然还有一个最简单彻底的办法,换为sing-box。

Monday, 21 September 2026

上传本地生成的静态网站的根目录内容到cloudflare pages平台,所得到的静态网站也是可以更新的。(平台给你的域名保持不变)

 登录cloudflare.com后,访问compute-> workers & pages:
https://dash.cloudflare.com/67b8955068b6e20596baa95e0449aa91/workers-and-pages, 如图:


 

在页面里的列表中,点击上一次上传的项目,比如mjb, 页面跳到:
https://dash.cloudflare.com/67b8955068b6e20596baa95e0449aa91/pages/view/mjb ,如图:


 

然后点击右上角的create deployment,然后点击页面底部的folder链接,定位到本地机器上的某个静态网站的根目录,然后点击upload,待上传完成后,点击save and deploy按钮,稍等一会,我第一次上传所得到的静态网站https://mjb-8nz.pages.dev/就被更新了。

演示网站:https://mjb-8nz.pages.dev/ ,https://mvr-acy.pages.dev

访问https://mjb-8nz.pages.dev/,可以看到我2026-09-17 日发表了2个帖子,今天(2026-09-21)又发表了一个帖子。可见静态网站https://mjb-8nz.pages.dev/ 在2026-09-21

被更新了。

 访问https://mvr-acy.pages.dev/,可以看到我在 发表了1个帖子.今天(2026-09-21)又发表了一个帖子,可见静态网站https://mvr-acy.pages.dev/ 在2026-09-21

被更新了。

 

 使用 Wrangler CLI上传本地生成的静态网站的根目录内容到cloudflare pages平台

 上面的从cloudflare.com的网页里上传的办法在上传时,会受到上传的文件数量的限制,最多只能上传1000个文件。如果超过1000个文件,会遇到提示:Your upload exceeds the limit of 1000 files. Please try uploading a smaller amount or use the Wrangler CLI to upload up to 20,000 files.

此时,就需要使用Wrangler CLI来上传了。首先,安装Wrangler CLI:

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

 使用如下命令将静态网站的根目录内容上传至 Cloudflare Pages:

 npx wrangler pages deploy _site/ --project-name=evgi

(先cd到_site/的上一级目录,比如~/evgi-by-brightmann)

会显示:

...

 ✨ Success! Uploaded 3586 files (57.32 sec)

🌎 Deploying...
✨ Deployment complete! Take a peek over at https://eeeabbed.evgi.pages.dev
✨ Deployment alias URL: https://master.evgi.pages.dev

然后,访问https://eeeabbed.evgi.pages.dev或https://master.evgi.pages.dev即可看到你的静态网站上传成功。

--project-name 参数指定项目名称(首次执行会自动创建该项目,后续会自动部署到该项目下,就不需要再加 --project-name 参数。

每部署一次,都会给你2个网址,比如,我新建了‘中国经济’那个源帖后,进行部署,得到2个网址: 

 Deployment complete! Take a peek over at https://856ea414.evgi.pages.dev
✨ Deployment alias URL: https://master.evgi.pages.dev
访问https://master.evgi.pages.dev ,即可看到该网站被更新了。

 绑定自定义域名(可选):

部署完成后,终端会返回类似 [https://my-static-site.pages.dev](https://my-static-site.pages.dev) 的访问链接。如果需要绑定独立域名,可以运行:

npx wrangler pages project create my-static-site
# 后续可在 Cloudflare 控制台或通过域名设置将域名解析至 Pages 关联项目。
 

部署命令实用参数速查

参数/命令用途与示例
测试分支部署

npx wrangler pages deploy ./dist --branch=staging


生成独立的 Preview 预览域名,不影响生产环境。

添加加密环境变量

npx wrangler pages secret put API_KEY --project-name=my-app

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

相关帖子:

 上传本地的静态网站的根目录内容到wasmer.io平台和netlify.com平台,所得到的静态网站...

中美关系有理由乐观

 

 

相互需要对方,所以合作才是上策

通过ss、vmess等代理协议访问家庭内网,绕过家庭可怜的上行带宽,杜绝UDP的QoS


相关网址
tcping ipv4:https://www.itdog.cn/tcping
tcping ipv6:https://www.itdog.cn/tcping_ipv6

相关代码:

//sing-box模板
{
    "type": "shadowsocks",
    "tag": "home",
    "server": "ddns.com",
    "server_port": 7788,
    "password": "112233",
    "method": "aes-128-gcm"
},

{
    "type": "socks",
    "tag": "home",
    "server": "ddns.com",
    "server_port": 7788,
    "username": "user",
    "password": "pass"
},

{
    "ip_cidr": "192.168.2.0/24",
    "outbound": "home"
},

//surfboard模板
home=socks5, ddns.com, 7788, user, pass

IP-CIDR,192.168.2.0/24,home,no-resolve


很多朋友以为在公网访问家里的内网服务只能搭建vpn,其实我们常用的socks、ss、vmess等代理协议也可以代理内网ip,比如我在公网想访问家里的NAS服务,nas的内网地址为192.168.2.110,当我使用浏览器打开这个网址,由于运行了代理工具,请求会交给代理工具进行代理,代理工具通过分流配置发现应该交给home节点代理,于是会使用对应的协议对数据进行加密,并且发送到路由器上搭建的home节点,路由器收到数据后对其进行解密,发现是发给内网里的NAS服务,于是会帮我们访问NAS,并将NAS返回的数据加密后重新发回给我们,这样就实现了通过代理工具访问内网了,并且现在的代理工具都有完善的节点分流策略,可以实现访问内网才走home节点,翻墙就使用其他节点,不用忍受家里那小的可怜的上行带宽,比VPN更方便灵活,但是大部分代理工具为了防止潜在的网络问题,即使你设置为全局代理,访问内网网段的数据包还是会绕过代理走直连,导致无法成功回家
本期我们主要来解决这个问题,手把手教大家各个操作系统,各个代理工具该如何配置,才能让访问内网的数据包成功使用指定节点进行代理
首先你需要在家里搭建一个节点,不管是部署在软路由上还是内网某台电脑上,只要能通过公网访问到就行了,我将主要介绍在路由器上搭建节点,如果你使用的是homeproxy插件,来到服务器设置,随便取个名称,点击添加创建一个节点,选择你需要的节点类型,一般是搭建socks或者ss节点,我就以ss节点为例,随便给个空闲的端口,比如7788,设置节点密码,以及加密方式,最后点击保存,勾选启用和自动配置防火墙,点击保存并应用,这样使用homeproxy搭建节点就算是配置好了

如果你是passwall用户,同样来到服务器端,点击添加,勾选启用,按同样的方式设置ip端口密码和加密方式,另外还需要勾选接受局域网访问,点击保存,然后返回概览,最后勾选这里的启用,点击保存并应用,这样就算是配置好了
如果你是openclash用户,原版clash只能使用socks节点入站,meta的话可以设置ss入站,但是设置比较麻烦,感兴趣的朋友请自行研究,我这里只演示socks节点,来到插件设置,进入流量控制,取消勾选仅允许内网,接着来到复写设置,socks5的默认端口是7891,为了统一我将其设置为7788,接着来到下方设置鉴权,勾选启用,设置socks的账号密码,最后点击应用配置,openclash也配置好了
接着我们需要配置防火墙,将搭建好的节点暴露在公网,让公网用户可以连接,如果你家的路由器有公网ipv4地址,那就设置端口转发,点击添加,随便给个名称,外部端口填写7788,内部ip选择路由器的内网ip,内部端口也填写7788,点击保存,最后点击保存并应用,ipv4就算是配置好了
如果路由器没有公网ipv4地址,可以使用公网ipv6地址,怎么配置ipv6我之前已经详细介绍过了,可以回看这期内容配置好ipv6,ipv6不需要配置端口转发,直接来到通信规则,点击添加,随便给个名称,源区域设置为wan,目标区域设置为设备,目标端口设置为7788,操作为接受,高级设置的协议栈改成仅ipv6,点击保存,最后点击保存并应用,ipv6就算是配置好了

接着访问这个网址,相关网址我会放在视频下方说明栏,不管你用的是homeproxy、passwall还是openclash,也不管你是ipv4还是ipv6,跟着配置完成之后,在这里输入你路由器的ip地址和端口,应该就能直接ping通显示绿色,如果显示红色,说明无法从公网访问到路由器的7788端口,需要仔细检查自己的配置是否有误,确保能ping通之后,路由器这边就算是设置好了,总结起来就三步,添加节点,允许数据发送到内网,配置防火墙确保节点能被公网用户连接

接着就可以开始配置各个客户端了,macos端主要演示小火箭、clash for windows、圈X、sing-box,iphone的小火箭、圈X和singbox的操作逻辑和macos是一样的,只是界面布局稍有区别,就不单独演示了,参考macos的配置方式即可,windows端主要演示v2rayN和clash for windows,安卓端主要演示v2rayNG、nekobox、surfboard
另外为了应对公网ip地址发生变化,建议你配置好ddns,在这两期教程中分别介绍了两种设置ddns的方式,可以回看参考,本期就不浪费时间介绍了,我已经做好了ddns,这是我的节点信息,接下来我们就要靠这个节点访问家里的内网了。

首先演示小火箭,我的mac现在是通过热点连接手机的5G网络,目前选中了香港节点,开启代理,全局路由为配置模式,可以正常科学上网,接着添加我们刚才在路由器里搭建的节点,选择对应的代理协议,如果你用的是openclash则使用socks5,接着填写节点对应的信息,ip地址填写ddns的域名,端口填写7788,再填入对应的密码和加密方式,备注设置为home,点击保存,测试节点连接应该能通,接着选中他,如果你家路由器能科学上网,那么这个节点也应该能够科学上网,但是你无法使用这个节点访问路由器的管理地址,因为小火箭会绕过内网地址走直连,即使开启全局代理,接下来我们要实现正常的科学上网使用正常的节点,访问家里的内网就使用home节点,来到配置,进入你使用的配置文件,来到通用,在跳过代理中,将你家的内网网段从列表里删除,比如我家的内网网段是192.168,那就删掉这个,点击保存,接着进入规则,点击添加,类型选择ip-cidr,策略选择我们刚才创建的home节点,启用不解析域名,这里填入你家的内网网段,我的路由器地址是192.168.2.1,那么这里填写192.168.2.0/24,点击保存,此时就算是配置好了,再来重新访问,就可以成功进入家里的路由器管理界面了,并且当我们切换到香港节点之后,同样可以正常访问家里的内网,因为分流规则已经把内网网段交给了home的节点了,可以正常登录路由器管理,尝试进一步验证,在这里启用代理日志,刷新网页,接着查看日志,可以看到访问谷歌的内容是使用香港节点,而访问路由器的内容是使用home节点,这样翻墙就不需要使用家里那小的可怜的上行带宽了。

接着配置clash for windows,目前开启了系统代理,可以正常科学上网,使用的是香港的节点,这是一个常见的分流配置,接下来将home节点插入到当前模板中,并且将192.168的内网网段通过home节点代理,如果你的home节点是ipv6地址,那就启用ipv6,来到配置页面,右键编辑proxies,找到proxies,点击添加,按要求填写节点信息,点击保存,再编辑rules,点击添加,输入你家内网网段,选择ip-cidr,选择刚才添加的home节点,点击保存,再点击edit,来到rules模块,在刚才添加的规则后面加上,no-resolve防止dns泄漏,点击保存,此时就算是配置好了,谷歌同样是使用香港节点访问,访问内网就是使用home节点,但此时你会发现无法访问,而如果你是使用tun模式的话应该是可以正常访问的,如果使用系统代理模式则还是无法访问,需要进一步设置,找到代理设置页面,在这里将你家内网网段删掉,此时系统代理模式下也可以正常访问了,另外我们可以在日志页面查看,访问家里的路由器是使用home节点,其他翻墙流量还是使用你原来的分流配置

接着配置圈X,同样正常使用香港节点翻墙,接着配置home节点,点击添加,按需求添加ss节点,需要注意的是圈x的图形界面默认只能添加ss节点,如果你是socks5,需要手动在配置文件中添加,接着添加分流配置,类型选择ip-cidr,参数填写内网网段,策略先临时选择proxy,点击添加,接着点击这里编辑配置文件,在常规配置下的排除路由里,删掉你家内网网段,接着在本地规则里,将我们刚才临时设置的proxy改成home,点击保存,此时就算是配置好了,进不去的话重启一下圈x,就可以正常访问了,访问谷歌还是使用香港节点,在网络活动下,可以看到访问路由器就是使用home节点,其他依然使用分流规则里的香港节点

最后配置singbox,同样启动之后可以正常科学上网,接着来到profiles,编辑当前使用的配置文件,找到outbound,在第一个花括号之后按回车插入一行,然后使用我给大家提供的ss模板,或者socks模版,这些信息我会放在视频下方的说明栏,按需求填入节点相关的信息,将其复制粘贴到刚才插入的位置,注意最后有一个英文逗号,接着找到route下的rules,在方括号后面插入一行,将这个配置插入进去,注意这里改成你家的内网网段,名称要和刚才添加的tag对应,同样注意最后有一个英文的逗号,最后点击保存,这样就算是配置好了,接着重启singbox,可以正常科学上网,使用的还是分流规则里的香港节点,访问内网也没问题,使用的是home节点

接着配置windows端,clash for windows的配置方式和mac是一样的,就不重复演示了,只演示v2rayN,点击这里添加home节点,按要求填写相应的节点信息,由于v2rayN不像clash for windows一样可以非常方便的添加节点分流策略,所以只能实现需要连接家里的时候就使用home节点,需要科学上网的时候就手动切换到其他节点,虽然不是很方便但好过没有,你也可以直接跑内核自己手动编辑节点分流,对于本教程来讲超纲了,感兴趣的朋友请自行研究,接着来到路由设置,编辑绕过大陆模式,点击添加规则,在这里输入你的内网网段,点击确定,右键刚才添加的规则,将其上移置顶,点击确定,接着当你需要连接家里的时候,就可以将home节点设置为活动服务器,然后就能访问家里的内网了,如果你是使用系统代理模式,同样需要和mac一样,找到代理服务器设置,将你家的内网网段从这个绕过列表里删除,点击保存,这样就可以正常访问内网了

最后讲解安卓端,安卓手机目前通过wifi热点连接到移动的5G网络,先演示v2rayNG,同样的v2rayNG也只能实现需要连接家里的时候就手动切换到home节点,先添加home节点,填写节点对应的信息,点击保存,接着进入设置,预定义规则选择绕过大陆,这样就算是设置好了,之后想直接用节点上网的话就选择节点,想回家的话就选择home,然后启动代理,可以正常访问内网,也可以正常访问内网其他服务
接着演示nekobox,用法和v2rayNG一样,需要的时候手动切换节点,设置上稍有区别,先添加home节点,输入节点相关信息,点击保存,此时尝试开启代理会发现无法连接,来到设置,如果绕过局域网地址启用了的话,要取消,如果你的节点是ipv6地址,要启用这里的ipv6路由,接着再尝试连接,就可以正常连接了,可以正常访问家里的内网服务

最后再介绍一个支持配置节点分流策略的surfboard冲浪板,启用后可以正常科学上网,来到配置页面,先复制一个配置出来,点击编辑,首先在常规设置下的跳过代理,删掉你的内网网段地址,接着来到proxy代理配置,在这里插入一行,把home节点插入进去,这个软件有个问题,ss节点无法使用ipv6地址,所以如果你和我一样使用的是ipv6,需要换成其他协议,比如socks或者vmess之类的,以socks为例,你可以继续在软路由里添加一个socks节点,也可以将原来的ss节点改成socks节点,点击编辑,类型改成socks,设置节点的用户名和密码,接着保存并应用即可,然后按照这个模板修改对应的节点信息,类型是socks5,你的节点域名,节点使用的端口,以及账号和密码,用英文逗号风格,接着将其复制粘贴到这里,找到rule模块,在最上方插入一行,复制这行代码,注意这里要改成你家内网网段,粘贴上去,点击保存,接着切换到刚修改的配置文件,回到仪表盘,进入设置下的vpn,勾选局域网流量过滤,最后重启vpn,此时就算是配置好了,可以正常访问谷歌,也可以正常访问路由器,包括内网其他nas服务,来到工具页面下的最近请求,可以看到访问内网走的是home节点,科学上网使用的是分流策略的香港节点

这就是本期给大家介绍的所有客户端,由于个人精力有限,不可能把所有客户端都讲一遍,但万变不离其宗,总共也就三步,添加home节点、添加分流规则,排除局域网路由,不管是什么客户端只要跟着这个思路去配置,就能将内网网段交给节点代理,从而实现远程访问家里的内网服务了

另外有个注意事项是本地局域网和家里的局域网不能在同一网段,比如从公司连接家里的内网,家里网段是192.168.2.1,那公司局域网只能是192.168.2.1以外的网段,如果两端是一样的网段,你将永远只能访问到公司的局域网.

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

 VPN通信流程,wireguard VPN搭建指南

相关文档
wireguard:https://www.wireguard.com/install/
免费DDNS:https://dynv6.com/
Windows 安全补丁:https://msrc.microsoft.com/update-guide/vulnerability/CVE-2024-38063


除了安全问题,各种服务要暴露在公网, 配置起来也比较费劲,又是改防火墙配置,又是申请tls证书,服务多了不好管理,那么有没有办法不将内网服务暴露在公网,也能从异地访问内网服务呢?当然有,假设你家在山东,目前在上海出差,现在想访问家里的内网服务,只要将网线的一头插在你山东家里的路由器lan口上,另一头插在你在上海的电脑网口上,就能直接访问家里的内网服务了,这根网线就是你一个人用的专线,访问家里的网络也是你一个人用的专用网络,但显然现实中不会真的有这么一根物理的网线直接从山东拉到上海,即使有你也负担不起这个费用,既然物理专用网络玩不起,那虚拟的行不行?假装从山东拉了一根网线到上海,这就是本期要讲的虚拟专用网络,英文全称Virtual Private Network,简称vpn,运行vpn之后的效果就相当于在公网创建了一条vpn隧道,这条隧道你可以想象成是一根虚拟的网线,一头插在你山东家里的路由器上,另一头插在你上海的电脑上,这样就能直接访问家里的内网服务了,很多朋友听到vpn的第一反应就是用来翻墙的,但实际上vpn的出现主要是为了解决我们刚才说的异地访问内网服务,尤其是大公司使用非常广泛,只不过vpn对数据进行了加密,顺便实现了翻墙,类似翻墙技术的shadowsocks、vmess、vless、trojan,vpn技术的协议实现有wireguard、openvpn、IPsec VPN、L2TP等等,根据使用场景主要分为点对点vpn和远程访问vpn两种类型

点对点vpn简单理解就是vpn隧道部署在两台路由器上,也就是虚拟的网线两端都插在路由器上,实现两个路由器内部网络直接互通,这种方式在企业中应用广泛,如果你有两个家的话也可以用这种部署方式
远程访问vpn简单理解就是虚拟网线一头插在路由器上,另一头直接插在用户电脑上,此时的路由器充当了vpn服务器,电脑通过vpn客户端拨号连接vpn,大部分个人用户以及外地出差连接公司网络都是使用这种方式,我们也主要讲解这种配置方式

以linux之父将其称为艺术品的wireguard为例,wireguard即支持点对点的配置方式,也支持远程访问的配置方式
我在这期讲解各种代理模式的教程中也简单提到了wireguard vpn,当时说有机会再讲,转眼已经过去一年多了,其实如果你懂了clash的tun模式,那么理解wireguard也就水到渠成了,二者区别主要在于vpn可以直接封装网络层

假设家里的路由器wan口是运营商分配的公网ip2.2.2.2,lan口局域网网段是192.168.2.1,当路由器运行wireguard vpn之后,wireguard会开启一个udp端口,假设为23456,同时系统会创建一个虚拟的网络接口,并给接口配置了一个内网网段,假设为192.168.5.1/24
电脑的物理网卡通过网线连接到互联网,获取到运营商分配的公网ip假设为3.3.3.3,注意电脑并不需要在公网环境,我这里只是为了简便省略nat环节
当电脑使用wireguard客户端连接vpn的时候,同样会在电脑创建一个虚拟网络接口,ip地址假设为192.168.5.2,vpn成功连接之后,相当于电脑的虚拟网卡接口和路由器的虚拟网卡接口通过虚拟的网线连在一起,这条虚拟的连接就是vpn tunnel,也就是隧道,既然是虚拟的,那么该怎么通信呢?

假设此时我想访问家里192.168.2.2在80端口开启的nas服务,电脑直接在浏览器输入nas的内网地址192.168.2.2,浏览器会生成一条http请求,通过tcp传输,从本机随机开启的9527端口发送到目标192.168.2.2的80端口,这个数据包会被路由进wireguard开启的tun虚拟网卡,而wireguard可以直接从虚拟网卡里读取数据,并将数据加密,注意wireguard是加密包含了ip头部的整个网络层数据包,而clash的tun模式从虚拟网卡读到数据后,由于ss vmess之类的代理协议无法处理ip头部,所以还要使用gvisor或者system协议栈去掉ip头部解析出上层的payload,才能交给对应的代理协议进行加密封装处理,这也是二者主要的区别

接着wireguard使用他的协议格式对加密后的数据进行封装,通过udp将数据从本机开启的随机端口4134,发送到路由器的公网ip地址2.2.2.2对应的23456端口,数据将从电脑的物理网卡发出,通过公网传输,由于数据经过了加密,公网其他人看不到数据包内容,不过知道你传输的是wireguard数据,路由器将在物理网口wan收到加密数据,并将数据交给监听了23456端口的wireguard,wireguard收到数据后对其进行解密,再将解密后的数据写入虚拟网卡中,此时路由器发现数据包是发给192.168.2.2,于是将其转发给lan区域的nas服务,nas将在80端口收到192.168.5.2从4134端口发给他的数据

接着nas需要返回数据给他,从nas的80端口将数据发给192.168.5.2的9527端口,由于不是同一网段,数据将会发给路由器,路由器根据目标ip将数据发给wireguard的虚拟网卡,wireguard从网卡里读取数据并进行加密,然后重新封装成wireguard协议,并从物理网卡发出,数据经过公网传输来到了电脑,电脑从物理网卡收到数据后,将其转交给wireguard开启的4134随机端口,wireguard将解密后的数据写入虚拟网卡,经过层层解封装,数据将会交给浏览器的9527端口,经过浏览器的渲染,页面呈现在我们面前,虽然我们是经过公网传输数据,但从虚拟接口的角度来看,就像数据是从电脑的虚拟接口,直接通过vpn隧道将数据传送到路由器的虚拟接口,实现两个内网互通,这就是vpn的工作原理,另外由于我们的vpn是搭建在路由器上,所以电脑的上网数据也可以通过vpn传输到路由器,路由器再帮我们转发到互联网,如果路由器运行了代理插件,电脑也能通过vpn实现科学上网了,此时你应该就能回答,为什么vpn可以获取真实的ping延迟,因为ping是网络层的工具,vpn可以封装代理网络层,而ss vmess无法代理网络层,所以在tun模式下,要么无法ping通,要么返回1ms假延迟,要么绕过代理返回直连的ping延迟,总之不可能获取到被墙ip的ping值

接下来就手把手教大家在软路由上搭建wireguard,考虑到很多朋友家里没有公网ipv4地址,所以教程是基于ipv6搭建的,开始之前先确保你的网络接口有公网ipv6地址,可以参考之前的教程先配置好ipv6,只要确保路由器接口有ipv6地址就可以了,局域网其他设备没有ipv6也不影响

本次教程需要用到这三款插件,跟着视频操作安装,来到系统下的软件包,先更新列表,搜索ddns,安装这个luci插件,用这款的目的主要是为了方便使用免费的ddns服务,如果你有自己的域名,并且用上期软路由教程中介绍过的ddns-go插件做好了ddns配置,可以不用安装本期介绍的这款ddns插件,接着搜索wireguard,同样安装这个luci插件,最后安装qrencode,用于生成wireguard配置二维码,来到启动项,找到network,点击重启,这一步很关键,重启之后wireguard才会生效,接着状态下就会出现wireguard的选项,目前我们没有还没有配置接口,来到网络下的接口页面,在配置wireguard接口之前,我们先给这个ipv6地址做ddns配置,可以使用这个免费的ddns服务,点击右上角的sign up进行注册,填写邮箱和密码注册,收到激活邮件后激活就行了,我已经注册过了就点击sign in进行登陆,登录之后要求我们创建一个域名,按你的个人喜好设置前缀,由于是免费服务,有些后缀可能存在dns污染,比如这个后缀的ipv4被污染到127.0.0.1,尽量选择冷门的,点击创建,此时就获取到了一个免费域名了,你可以在这里手动添加解析记录当普通域名用,我们主要让软路由自动帮我们添加和更新解析,回到软路由,进入刚才安装的动态dns插件,将两个示例配置删除,添加一个新服务,名称随便填,版本选择ipv6,服务提供商选择刚才注册的dynv6,点击创建,接着点击编辑,这里填入我们刚才申请的域名,这里也一样,用户名随便输入,密码填入这个,其他保持默认,高级设置里,将ip来源改成接口,选择ipv6地址所在的接口,其他保持默认,计时器按需设置,比如多久检测一次接口ip是否发生改变,以及即使接口ip没有发生改变也强制更新域名解析,不填就按默认值,点击保存,最后点击保存并应用,然后点击重新加载,此时就会变成运行中,可以在日志查看器中查看详细的运行状态,可以看到在wan口获取到了ipv6地址,然后会和域名原来的解析记录进行对比,刚注册的域名没有任何解析,当发现二者不一样之后,将会更新域名的解析,这里表示更新成功,接着等待600秒之后再检测,也就是我们刚才在计时器中设置的10分钟,这里有个注意事项,你的路由器本身必须要能够获取域名的ipv6解析记录,ddns插件才能正常运行,因为路由器要进行dns查询获取到域名的ipv6才能和接口上的ipv6进行对比,有些朋友可能看了这期教程关闭了ipv6的dns解析就会导致ddns插件无法正常工作,可以回看教程重新开启或者部分域名开启ipv6解析功能

此时回到ddns网站,可以看到这里自动添加了一条ipv6的解析记录,ip就是我路由器wan口的ip地址,稍等片刻后尝试进行dns查询,可以正确获取到域名的ipv6地址,确保没有出现被污染的ipv4地址,至此ddns的设置就算是完成了

接下来开始配置wireguard vpn,来到网络接口,添加新接口,随便给个名称,协议选择wireguard vpn,点击创建,点击生成密钥对用于加解密数据,随便设置一个端口,比如23456,设置该接口所使用的ip段,不能和已存在的内网网段冲突,我现在的内网网段是192.168.2,那我可以设置成192.168.5,点击添加,其他保持默认,防火墙设置为lan区域,个人使用没必要再单独划一个区域给自己找麻烦,点击添加对端,随便给个方便区分的描述,比如是给手机用的,点击生成密钥对,预共享密钥可以不用设置,允许的ip随便填写一个网段内的ip,比如这个接口的ip刚才设置的是192.168.5.1,那我这里可以设置为192.168.5.2,点击添加,其他保持默认,最后点击生成配置,这就是wireguard客户端需要用到的配置文件,非常简洁,左侧还有配置对应的二维码,这里可以看到端点自动配置成了我们的ddns域名,来到最上方,你如果是用其他插件设置的ddns,可以在这里手动填写域名,接着这个配置就可以在其他设备上使用了,可以在这个网址获取各个操作系统的软件安装包,先演示手机端,在app store使用非国区ID下载wireguard, 软件很简洁,点击中间的添加隧道,选择扫描二维码,随便设置一个名称,点击允许,这样就添加了一条配置,现在还不能连接,即使连接了也没网,因为路由器还没保存配置,点击保存,接着保存并应用,最后重启一下wireguard的网络接口,另外由于我们开启了防火墙,还需要对外放行wireguard监听的端口23456,来到防火墙下的通信规则,点击添加,随便给个名称,wireguard是通过udp传输的,所以只需放行udp,源区域设置为wan,目标区域设置为设备,目标端口填写23456,动作为接受,在高级设置里将协议设置为仅ipv6,点击保存,最后点击保存并应用,这样一切准备就绪了,回到接口,可以看到wireguard的网络接口已经有数据了

手机目前是使用运营商的5g网络,已经连接到了vpn,此时我使用手机访问家里的路由器管理地址192.168.2.1,成功进入了路由器的管理界面,接口的数据量也相应的增加了,此时这台手机就好像是连接了家里的wifi一样,可以直接通过局域网ip访问内网资源,假设这台电脑在8000端口开了NAS服务,不需要将其暴露在公网,现在这台连接了wireguard vpn的手机可以直接通过内网ip访问相应的资源,非常方便,可以看到相应的访问日志,访问者的ip是我们在wireguard里设置的192.168.5.2,需要注意的是192.168.2和192.168.5是不同的网段,由于二者都在lan区域,需要开启lan区域内的转发才能成功互访,之前已经详细介绍过了

另外连上wireguard之后,同样可以利用软路由上的代理插件实现科学上网,分流也是按照你路由器的设置,网速取决于你家带宽的上行速度以及节点的速度,总之手机就像是连上了家里的wifi,这就是真正的vpn所实现的效果,可以在状态下的wireguard查看已连接的对段信息,包括手机的公网ipv6地址,以及传输的流量

可以继续添加其他对端,回到网络接口,编辑wireguard接口,点击添加对端,随便给个描述,操作方式是一样的,ip填写一个没有被占用的,比如192.168.5.3,其他保持默认,点击生成配置,这个配置就可以在你的其他设备使用了,记得要先保存配置,并且重启wireguard的网络接口,否则不会生效

以mac为例,windows也是一样的操作方式,选择添加空隧道,复制刚才的配置文件,将里面的内容替换掉,随便给个名称,点击保存,接着就可以启动了,启动之后就像手机一样,相当于连接到家里的局域网了

另外有些朋友可能连上wireguard之后会出现网络卡顿严重,远达不到家里的上行带宽,很大概率是wireguard默认mtu太大导致数据包被分片,分片会严重影响网络性能,你可以使用抓包工具wireshark观察这一现象,测速的时候如果wireguard数据包中掺杂了大量如图所示的白色背景数据包,就是经过了分片,需要调小wireguard的mtu,比如1400或者1380,如果还存在分片的话可以继续调小,至于mtu啥作用有机会再细讲

最后再来讲讲通过ss/vmess节点访问家里的内网

虽然没法像vpn一样代理网络层,但我可没说过不能代理内网ip地址
首先还是和上期讲过的一样,在软路由上搭建一个节点,不管是homeproxy还是openclash或者其他代理插件都可以,我在7788端口搭建了一个vmess节点,接着我用小火箭连接这个节点,节点可以正常科学上网,但是我不能访问路由器的管理地址,分流是配置模式,来测试一下192.168.2.1是怎么路由的,可以看到是直连,我们需要让这个地址被代理,搜索对应的规则,将其改成代理,保存之后重新访问,你会发现依然无法访问,因为这种内网地址大多数代理工具会默认绕过,即使开了全局模式,来到通用设置,可以看到这个内网段被跳过了代理,这里的优先级要比你自己的分流配置文件高,将其删除,保存配置,此时我们再来访问路由器,就可以成功通过内网地址访问了,同样也可以访问内网nas服务,访问日志显示是路由器的192.168.2.1,所以不要将你家的节点随便分享给别人,指不定你内网某些隐私服务就被别人扒拉干净了,还有那些暴露在公网的clash,真的以为自己只是暴露了个节点吗?
其他客户端也是和小火箭一样操作,让你局域网的网段通过节点代理就行了.