1. 购买服务器
购买服务器的方式有很多种,也是这篇教程中最模糊的地方,我不可能一一说明,只能说如果你没有MasterCard或者Visa卡,那我还是建议你去先找找哪些VPS供应商比较靠谱。
如果你有,那么去嫖遍全大厂的云服务器,基本免费使用时间都在半年到一年,个人用的话可以用很久。
单纯用作VPS用途的服务器,本身费用也不高,你可以去闲鱼找闲置的海外服务器购买。
首选甲骨文的终身免费云服务器,但是这个真的很难申请,而且很容易就被甲骨文封了,主要面对的还是海外群体——但如果你身在海外的话,这东西你如果不是开发,那么意义并不是很大,跟你也没关系。
常见的云服务供应商:
- Azure
- AWS
- Aliyun
- 腾讯云
- …
各个厂商设置的位置都不一样,但是核心的设置是通用的,建议服务器系统用Ubuntu。
特别提醒:
AWS的免费是有条件的,注意看条款,不要被扣钱了。
它开/关机一次操作有最小时长计数单位,请不要频繁开关。
而且所谓的720h指的是一个实例的时间,如果你创建了多个实例,时长为叠加计算。
包括它的免费计划也是如此,AWS你就老老实实选t3.micro全部都选最基础的机器,系统选Ubuntu,别乱整。
1.1 设置规则以及获取ppk/pem密钥
找到类似编辑入站规则/端口规则的界面,需要在云服务商的控制台(Console)找到防火墙或安全组设置,放行上述端口:
| 类型 | 协议 | 端口 | 源 | 地址 |
|---|---|---|---|---|
| HTTP | TCP | 80 | 任意IPV4地址(0.0.0.0/0) | 0.0.0.0/0->用于申请SSL证书的时候留的通信端口,服务于证书的自动申请和续期,但我们这个方案并不需要申请SSL证书,说明这个只是因为如果你不满足于自己使用,想要搭建服务去服务他人,那么可能可以用得上。 |
| SSH | TCP | 22 | 任意IPV4地址(0.0.0.0/0) | 0.0.0.0/0-> 使用SSH连接服务器端口,这个一定要有!不然你压根连不上服务器。 |
| HTTPS | TCP | 443 | 任意IPV4地址(0.0.0.0/0) | 0.0.0.0/0-> 用于 VLESS + Reality 协议。Xray 内核直接在此端口监听流量,并利用 Reality 技术将其伪装成访问某个真实网站(如 www.yahoo.com)的常规 TLS 加密流量。 |
1.1.1 ppk/pem密钥
通常在起服务器的时候它就会给你,这个很重要,一定要保存好。 推荐使用pem密钥,可以直接由Windows的CMD或者Powershell连接,后面的介绍以pem密钥为基准。
1.2 连接服务器
你可以打开CMD或者Powershell之后,输入ssh -i,然后将密钥文件拖进去,再输入后面的命令
ssh -i 密钥文件路径 服务器用户名@服务器地址# 比如说 ssh -i "C:\Users\Admin\Downloads\aws.pem" ubuntu@1.2.3.4不想每次都那么麻烦,去C:\User\你的用户名\.ssh\下面创建一个文本文件:
Host vps HostName 你的服务器ip User 你服务器默认的登录的用户名 # 写上你的 PEM 文件的绝对路径,比如说下面这个 IdentityFile "D:/Documents/My-Sinapore-Server.pem" # 你的端口转发规则(可以直接照抄) LocalForward 9999 localhost:8000关于默认用户名(可能,请自行查看):
- AWS (Ubuntu 系统): ubuntu
- AWS (Amazon Linux): ec2-user
- Oracle Cloud (甲骨文): opc 或 ubuntu
- Google Cloud (GCP): 也就是你注册谷歌账号的那个用户名(或者是 google_user)。
- 大部分其它小厂 VPS: root
文本文件设置完后,请把它的后缀名去掉,不知道怎么做的话,在Windows的文件查看器地址栏下方,点击:查看->显示->文件拓展名
1.2.1 更新package管理工具,下载Marzban
连接成功后,输入:
sudo apt update# 安装Marzbansudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install# 它会自动运行服务,这个时候上面留的配置文件就派上了用场ssh vps# 这样就可以再连接服务器而不终止Marzban了## 你会看到如下日志marzban-1 | Use the following command:marzban-1 | ssh -L 8000:localhost:8000 user@servermarzban-1 | Then, navigate to http://127.0.0.1:8000 on your computer.1.2.2 设置管理员账号密码
# 如果你最后要暴露在公网里面,建议复杂一些sudo marzban cli admin create --sudo1.2.3 设置marzban
登录marzban,点击设置(齿轮图标)
虽然LLM里面有说有图形化的inbounds添加,这个功能实际上也很好做,但实际上就是没有,不然我也不会让你去写配置,等待它做易用性更新吧。
你可以看到里面有很多种类型的inbounds,我们首选Vless+Reality,协议则是TCP。
挑其中一个来说,gPRC是给符合用途的人用的,比如说他服务器担当梯子+博客之类的符合功能,需要做一定伪装,而我们做VPS,TCP就足够使用,轻量而且满足我们的需求。
# 首先,在服务器中生成pk对,复制在下面的文本里面sudo docker exec marzban-marzban-1 xray x25519
#然后,生成你的shortid,复制在下面的文本里面openssl rand -hex 8
#dest 建议你使用频率很高的,且在境内能访问到的外网网站,雅虎可以,但其实也建议选别的。#serverNames则是dest的名字,可以咨询LLM帮忙给你一对伪装程度高的,这里以雅虎举例。#接下来将下面的配置复制进inbounds数组中,如果不知道怎么复制,建议把原来的配置,加上下面这一段配置,让LLM帮你组装再一起复制进去。#其实很简单,在Shadowsock TCP大括号的上面加上下面这个大括号对里面的内容即可。{ "tag": "VLESS TCP REALITY", "listen": "0.0.0.0", "port": 443, "protocol": "vless", "settings": { "clients": [], "decryption": "none" }, "streamSettings": { "network": "tcp", "tcpSettings": {}, "security": "reality", "realitySettings": { "show": false, "dest": "www.yahoo.com:443", "xver": 0, "serverNames": [ "www.yahoo.com", "" ], "privateKey": "你的privateKey", "shortIds": [ "你生成的shortid" ] } }, "sniffing": { "enabled": true, "destOverride": [ "http", "tls", "quic" ] }},# 接下来我们要重启marzbansudo marzban restart1.2.4 marzban添加用户
登录marzban,键入你刚创建的管理员账号密码:
- 添加用户
- 选择Vless
- 取消Shadowsocks TCP(点击一下就能取消,它默认会自动勾选)
配置如下:
- 用户名:随便
- 流量限制:看你服务器的套餐到底是怎么样的
- 过期日期:看你自己
- 备注:一样
点击一下你的用户,在弹出的窗口中,Vless右边有三个点,点击一下。
在flow那边选择xtls-rprx-vision
选好后记得保存,否则不生效。
1.2.5 与代理连接
添加用户后,你会发现它在列表里面有三个按钮
- 订阅
- 链接
- 二维码。
如果你不暴露在外网的话,流量限制之类的填空项是没用的,因为你没办法正常通过订阅的方式来获取信息。
也就是说,你只能用链接或者二维码使用这个Vless链接。
但主流的科学上网软件Clash并不直接支持单个Vless链接读取,如果你不想搞那么多配置,去用v2rayN 或 Nekobox,可以直接识别Vless链接。
如果你使用Clash,那么这个链接是无法直接使用的,它长得像下面这样:
vless://uuidaa@server:443?security=reality&type=tcp&headerType=&path=&host=&sni=www.yahoo.com&fp=chrome&pbk=BDYTuMVtogMm9fJP5WT1wwd0uoT3n_UqyRWKAlEAW1E&sid=sidF%9A%80%20Marz%20%28Meteor%29%20%5BVLESS%20-%20tcp%5D接下来则是在Clash那边与服务器的marzban启动的xray连接,需要在订阅那边,新建一个Local file,然后编辑文件,将下面的内容复制进去,对需要更改的内容进行修改。
记住,不要改任何缩进。
# ===============================================================# Clash (Meta Core) 配置文件# 适用于 Marzban VLESS+Reality# ===============================================================# 代理监听端口port: 7890socks-port: 7891allow-lan: false# 模式:rule(规则模式),global(全局模式),direct(直连模式)mode: rule# 日志级别log-level: info# Clash 控制面板和 APIexternal-controller: '127.0.0.1:9090'# 代理节点列表# 在这里定义你的 VLESS 和 SS 节点proxies: - name: '🚀 Marz (your vps name) [VLESS - tcp]' # 节点名称,可以自定义 type: vless # --- 请在这里填入你的 VLESS 节点信息 --- server: xxxxxx # <--- 你服务器的ip地址 port: 443 # <--- 默认443,没改就别动 uuid: xxx # <--- 修改这里 network: tcp tls: true flow: xtls-rprx-vision client-fingerprint: chrome servername: www.yahoo.com # Reality 伪装的目标域名 (SNI) reality-opts: public-key: xxx # <--- 之前你在服务器上面生成的公钥 short-id: xxx # <--- 之前你在服务器上面生成的shortid# 代理组配置# 用于在多个代理节点之间进行选择和切换proxy-groups: - name: "节点选择" # 这是你在 Clash UI 中看到的策略组名称 type: select proxies: - "🚀 Marz (你的用户名) [VLESS - tcp]" - "DIRECT" # 直连选项# 规则配置# 决定哪些流量走代理,哪些直连rules: - GEOSITE,CN,DIRECT - GEOIP,CN,DIRECT - MATCH,节点选择1.2.6 注意事项
如果你还想要使用面板管理,或者将订阅链接分享给他人,这时候则需要域名以及域名保护。
直接IP+端口分享一个面板在公网,很容易被CFW检测到然后封杀,你所做的一切Vless+Reality保护你的VPS就像是穿着皇帝的新衣,在GFW面前过于明显。
确定想要面板管理的话,往下看,否则直接到此为止即可。
2. 域名购买:Namesilo
2.1 随便输入一个你想购买的域名
首先说明一下为什么要买域名。
其实如果你直接使用Vless+Reality方案,本质上并不需要购买域名,做伪装之类费劲不讨好的事情。
这个主要还是伪装你的面板。
在GFW眼里,你这个ip开放了一个很可疑的面板到外面,特征非常明显。
买域名起到一个什么作用?其实就是把你的服务器伪装成一个网站,能把IP地址通信,伪装成一次正常的访问网站的行为。
对于GFW来说,你可能只是一个正在浏览境外博客、或者在看技术文档的普通网民。
只要你的目的仅限于个人使用,就你这点微不足道的流量,混在每天数以亿计的正常跨境网站访问中,就像大海里的一滴水,基本上没人会注意到你,这就是花几块钱买个域名的核心价值所在。
比如说test123456,里面有很多后缀可选。
一般来说cfd后缀的可能是最便宜的,之前1.79(¥12.61附近/年,支持支付宝付款)
2.2 删除Namesilo提供的默认DNS域名解释
支付完成后,会直接跳转到Dashboard面板。
点击Dashboard页面中的1 active Domains下面的manage。
在options中找到一个蓝色图标的按钮,找不到那就鼠标一个个挪上去,看看哪个是Manage DNS for this domain
我们后面要更换成Cloudflare保护这个域名,将指挥权全权交给Cloudflare。
DNS Record -> Existing Resource Records 下面的分配全部删光即可。
2.3 保留Namesilo的页面
待会还要用到
3. 域名保护:Cloudflare
Cloudflare对于小微用户基本上算是活菩萨,免费给你清洗流量抵御攻击做隐私保护。
域名可以理解为你的门牌号,域名解析(DNS)则是负责在路由与路由之间指导那些IP最后中转到域名的服务。
如果Namesilo跟Cloudflare的共存,那么对于所有访问指向你域名的人而言,可能时而会跑去找Namesilo的,时而跑去找Cloudflare的,但两者的能力是有区别的。
Cloudflare会负责将别人导向这个地址,但是不会告诉别人这个地址的其它消息,面对恶意找上门的人会加以辨别并且阻拦,如果你的服务是网站,他还会预判别人到这里来做什么,提供给想要来访的用户对应加速服务。
不过对于VPS服务来说,主要功能还是隐藏你域名背后服务器面板的地址。
如果你后面有更多的需求,基本上只会考虑他们家的服务, Cloudflare已经遍布全地球。
3.1 注册什么的略过,计划选择免费
如题,不多赘述
3.2 添加域名

3.3 复制Cloudflare服务器至Namesilo
在Namesilo最右侧像是三个硬币堆叠的图标那边点击进入Using Custom DNS Records。
将Cloudflare名称服务器中的链接复制进去就好,点击Submit,在外面列表的Name Servers中看到改动即可。
3.4 设置DNS代理
在Cloudflare左侧导航栏点击 DNS->记录(records) -> 页面中点击添加记录(records)
类型A,名称就是域名的前缀,随便你输什么,建议fly之类有异议的动/名词,ipv4地址填你服务器的地址,保存。
这个主要用于给你的面板当掩护,你VPS跟Clash还是使用ip+reality的模式连接,代理云朵必须开启为橙色,表示启用。
记得在SSL设置里面,将加密模式改为完全(严格)
4. 暴露面板至公网
在服务器设置的页面(你买服务器的地方)开放80、443、2053端口。
解释一下:
- 80端口用于caddy自动申请ssl证书
- 443端口用于Xray通信
- 2053端口用于面板操作以及订阅。
假设在3.4步骤后,你用于在公网保护的的域名为test12345.cfd,名称为fly。
# 1. 安装 Caddy (Ubuntu)sudo apt install -y debian-keyring debian-archive-keyring apt-transport-httpscurl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpgcurl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.listsudo apt updatesudo apt install caddy
# 2. 修改 Marzban 的 .env 文件# 确保面板只监听本地,让 Caddy 来处理公网流量sudo nano /opt/marzban/.envUVICORN_HOST=127.0.0.1UVICORN_PORT=10086 # 换一个非标准端口XRAY_SUBSCRIPTION_URL_PREFIX=/my-secret-panel #你想设置的前缀,比如说my-secret-panel# 注释掉 SSL 相关行,如果没设置就不用动# UVICORN_SSL_CERTFILE=...# UVICORN_SSL_KEYFILE=...# Ctrl+O 确定保存,然后Ctrl+X退出sudo marzban restart
# 3. 配置 Caddyfilesudo nano /etc/caddy/Caddyfile# 将里面的内容全部替换为:fly.test12345.cfd:2053 { handle_path /my-secret-panel/* { reverse_proxy 127.0.0.1:10086 }
# (可选) 为根目录设置一个伪装页面 # 当访问根目录或其他路径时,显示 "File not found" handle { respond "File not found" 404 }}# Ctrl+O 确定保存,然后Ctrl+X退出
# 4. 重启 Caddysudo systemctl reload caddy到此结束,可以使用https://fly.test12345.cfd:2053/my-secret-panel/看到登录界面了。
当然,你不设置这个prefix也可以,其实本身marzban就为你做了一层入口上的伪装(一个普通的web页面),但出于慎重以及CFW特征性考虑,我觉得还是加上比较好。
这样,你就可以使用订阅链接的功能了。
后面则是一种手动挡的操作方法,并不推荐,但可以观看,仅作留档。
获取 API Token:
- 在 Cloudflare 后台,点击右上角头像 -> My Profile(配置文件) -> 左侧 API Tokens(API 令牌。
- 点击 Create Token (创建账户API令牌)。
- 选择模板 Edit zone DNS(编辑区域 DNS)。
- 在 Zone Resources(区域资源)里,选择 Specific zone(特定区域),然后选择你那个用来翻墙的域名。
- 生成 Token。
获取 Account ID: 左侧栏-> 账户主页,进入后在内容页你会发现:你的邮箱/用户名右边有三个点,点击就会有一个复制 **Account ID(账户 ID)**的选项
# 创建一个专门放证书的目录sudo mkdir -p /var/lib/marzban/certs
export CF_Token="这里填申请到的API Token"
export CF_Account_ID="Account ID"
# 这两个export会在关闭terminal后失效,如果在关闭terminal后想要需要执行下面的命令,务必要把export重新设置一遍
~/.acme.sh/acme.sh --issue --dns dns_cf -d fly.test12345.cfd --force## 等待执行完毕
# 复制证书进入目录sudo cp $HOME/.acme.sh/fly.test12345.cfd_ecc/fullchain.cer /var/lib/marzban/certs/certificate.crt
sudo cp $HOME/.acme.sh/fly.test12345.cfd_ecc/fly.test12345.cfd.key /var/lib/marzban/certs/private.key4.1 配置marzban
将申请到的SSL证书的路径复制好备用。
cd /opt/marzbannano .env对下面这两项进行修改为下面路径
- UVICORN_SSL_CERTFILE: /var/lib/marzban/certs/certificate.crt
- UVICORN_SSL_KEYFILE:/var/lib/marzban/certs/private.key
#重启marzbansudo marzban restart4.2 开放端口或者使用反代安全使用面板
回到你服务器设置端口/入站规则的界面,开放一个可以被Cloudflare转发的入站端口( 80, 443, 2053, 2083, 8443 等,自己搜索)。 还是上面提到的env文件内,自己修改:
- UVICORN_PORT: 修改为你想绑定的端口
但这么做其实并不是很好,当然,也可以用就是。
一般来说还需要额外设置:
- XRAY_SUBSCRIPTION_URL_PREFIX: Prefix of subscription URLs
然后使用Nginx反向代理到443端口,这样也不需要开放入站端口,Cloudflare也能够正常转发,设置XRAY_SUBSCRIPTION_URL_PREFIX的目的是伪装这个入口,自己也能通过这个URL Prefix连接,但需要跟反代一起配合使用。
不过这还涉及到SSL证书到底谁管理的问题,总的来说比较麻烦。