购买的外国地区的VPS(也称为ESC)可以用来搭建VPN

我们首先在termius或者openssh终端连接VPS服务器

下载Xray

shell
1
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)

然后一路回车确定

​ image-20260423171703902

​ image-20260423171840149

选择存储数据库

我们选择sqlite 也就是1

bash
123456
═══════════════════════════════════════════
     Database Selection                    
═══════════════════════════════════════════
  1) SQLite     (default — recommended for < 500 clients)
  2) PostgreSQL (recommended for high client counts / many nodes)
Choose [1]: 

端口初始化

text
1
Would you like to customize the Panel Port settings? (If not, a random port will be applied) [y/n]:  

输入y 同意面板端口初始化并回车

设置端口

要求设置面板的访问端口(比如输入 2053 或者 8080,范围在 1-65535 之间,不要用 80 或 443)

text
1
Please set up the panel port: 

输入8080并回车

SSL证书生成

text
1234567891011121314151617
═══════════════════════════════════════════    

SSL Certificate Setup (MANDATORY)   

═══════════════════════════════════════════ 

For security, SSL certificate is required for all panels. 

Let's Encrypt now supports both domains and IP addresses! 

Choose SSL certificate setup method: 

1. Let's Encrypt for Domain (90-day validity, auto-renews) 
2. Let's Encrypt for IP Address (6-day validity, auto-renews) 
3. Custom SSL Certificate (Path to existing files) 

Note: Options 1 & 2 require port 80 open. Option 3 requires manual paths. Choose an option (default 2 for IP):

直接输入回车默认选项2

SSL证书是让我们访问这个面板可以通过https,如果没有的话就是http明文很不安全

所以最简单的方法是使用系统直接为IP地址生成的证书

有的时候会失败所以我们还需要自己重新生成

IPV6相关

text
1
Do you have an IPv6 address to include? (leave empty to skip): 

直接输入回车键默认,主要是这玩意太麻烦了不如直接用IPV4

申请证书端口

text
1
Port to use for ACME HTTP-01 listener (default 80):

直接输入回车默认,这个是申请安全证书用80端口

然后就完成了

此时我们需要调整几个东西

我们输入x-ui打开xray ui面板

shell
1234567891011121314151617181920212223242526272829303132333435363738
╔────────────────────────────────────────────────╗
│  3X-UI Panel Management Script                │
│  0. Exit Script                               │
│────────────────────────────────────────────────│
│  1. Install                                   │
│  2. Update                                    │
│  3. Update to Dev Channel (latest commit)     │
│  4. Update Menu                               │
│  5. Legacy Version                            │
│  6. Uninstall                                 │
│────────────────────────────────────────────────│
│  7. Reset Username & Password                 │
│  8. Reset Web Base Path                       │
│  9. Reset Settings                            │
│  10. Change Port                              │
│  11. View Current Settings                    │
│────────────────────────────────────────────────│
│  12. Start                                    │
│  13. Stop                                     │
│  14. Restart                                  │
|  15. Restart Xray                             │
│  16. Check Status                             │
│  17. Logs Management                          │
│────────────────────────────────────────────────│
│  18. Enable Autostart                         │
│  19. Disable Autostart                        │
│────────────────────────────────────────────────│
│  20. SSL Certificate Management               │
│  21. Cloudflare SSL Certificate               │
│  22. IP Limit Management                      │
│  23. Firewall Management                      │
│  24. SSH Port Forwarding Management           │
│  25. PostgreSQL Management                    │
│────────────────────────────────────────────────│
│  26. Enable BBR                               │
│  27. Update Geo Files                         │
│  28. Speedtest by Ookla                       │
╚────────────────────────────────────────────────╝

重置用户名和密码

这个是用于登录3x-ui面板时的用户名和密码

选择7. Reset Username & Password

然后输入自己的密码和用户名(要是忘了还可以重置)

重置Web base path

选择8. Reset Web Base Path

也就是我们生成的网址的后面的一堆字母和数字,重置后更安全一些

重置或生成SSL证书

选择20. SSL Certificate Management

shell
12345678
Please enter your selection [0-28]: 20
        1. Get SSL (Domain)
        2. Revoke & Remove
        3. Force Renew
        4. Show Existing Domains
        5. Set Cert paths for the panel
        6. Get SSL for IP Address (6-day cert, auto-renews)
        0. Back to Main Menu

选择选项6.Get SSL for IP Address (6-day cert, auto-renews)

完成后输入x-ui settings

就可以查看

shell
1234567
[INF] current panel settings as follows:
Panel is secure with SSL
hasDefaultCredential: false
port: 8080
webBasePath: /XXXXX/ 
Database: SQLite (/etc/x-ui/x-ui.db)
Access URL: https://XXXXX:8080/XXXXXX/

防火墙设置

有的不需要开,比如阿里云和腾讯云会自带防火墙,我们开了反而可能把我们自己拦在外面

shell
1234
ufw allow 8080/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw reload

创建节点

添加入站

首先在入站点击添加入站

​ image-20261012140618874

选择reality加密

​ image-20261012140702080

​ image-20261012141409717

添加客户端

我们需要关联刚才的入站

邮箱不用管(因为我们是自用不是卖梯子...)

然后编辑客户端

​ image-20261012144527057

基本界面关联入站

​ image-20261012141534570

凭据选择流控模式

这里有两种流控模式

对比xtls-rprx-visionxtls-rprx-vision-udp443
Vision 流控优化支持支持
UDP 443 / QUIC拦截,促使浏览器回退到普通HTTPS不拦截
一般网页浏览推荐通常没必要特意使用
必须使用QUIC的应用可能受影响更适合

选择xtls-rprx-vision

减少性能开销: 在符合条件的 Linux + TCP + TLS/REALITY 场景中,Xray 可以利用内核的 splice 机制转发加密数据,减少内存复制和上下文切换

可能提高吞吐量: 对高流量传输有帮助,但不保证降低 ping

影响 UDP 443: 标准 Vision 模式会拦截目标端口为 443 的 UDP 流量,促使浏览器回退到普通 HTTPS;部分强制使用 QUIC 的应用可能受到影响

​ image-20261012144439615

二维码分享使用

或者点击那个复制键复制链接导入也行

​ image-20261012144805988

协议转换

由于不同的客户端对不同的协议的支持不同,如我们Clash/Mihomo就不能直接用vless的链接和二维码

所以我们需要转换协议

在较旧的版本我们需要使用一些转换器例如sub-web-modify,但是现在这个已失效

不过新版本的3X-UI面板自带了转化器

我们需要在面板设置->订阅设置里找到Clash/Mihomo选项并启用

​ image-20261012161314488

​ image-20261012161340621

​ image-20261012162354911

防火墙设置

我们需要在防火墙放行2096端口,否则其他人扫码无法使用

text
12
ufw allow 2096/tcp
ufw reload

对于腾讯和阿里云服务器我们需要手动添加 例如在阿里云服务器防火墙控制台里添加如下端口白名单image-20261012162936255

然后我们点击刚创建的客户端

​ image-20261012161505158

然后找到clash相关,直接扫码用即可

​ image-20261012161616680

对于节点比较卡的解决方案

不过说实话,卡不卡很大程度取决于服务器配置和服务器厂商....

启用BBR TCP拥塞算法

检查当前 TCP 配置

执行:

bash
1
sysctl net.ipv4.tcp_congestion_control net.core.default_qdisc

初始输出:

bash
12
net.ipv4.tcp_congestion_control = cubic
net.core.default_qdisc = fq_codel

说明当前使用的是 CUBIC 拥塞控制算法,默认队列调度器为 fq_codel

检查内核是否支持 BBR

执行

bash
1
sysctl net.ipv4.tcp_available_congestion_control

如果输出中没有 bbr,尝试加载 BBR 模块

bash
12
modprobe tcp_bbr
sysctl net.ipv4.tcp_available_congestion_control

本机加载成功后,输出为:

bash
1
net.ipv4.tcp_available_congestion_control = reno cubic bbr

说明系统现在可以使用 BBR

如果提示找不到模块,需要进一步检查内核版本及对应模块是否已安装

配置开机自动加载 BBR

创建模块自动加载配置:

bash
123
cat > /etc/modules-load.d/tcp_bbr.conf <<'EOF'
tcp_bbr
EOF

这样系统启动时会尝试自动加载 tcp_bbr 模块。

启用 BBR 并持久化配置

创建 sysctl 配置文件

bash
1234
cat > /etc/sysctl.d/99-bbr.conf <<'EOF'
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF

应用配置

bash
1
sysctl --system

这里设置了

  • net.ipv4.tcp_congestion_control=bbr:将 TCP 拥塞控制算法切换为 BBR
  • net.core.default_qdisc=fq:将默认队列调度器设置为 fq

配置保存在 /etc/sysctl.d/99-bbr.conf,正常情况下重启后仍会生成

验证是否启用成功

执行

bash
1
sysctl net.ipv4.tcp_congestion_control net.core.default_qdisc

成功后的输出

bash
12
net.ipv4.tcp_congestion_control = bbr
net.core.default_qdisc = fq

看到这两个结果,即表示当前配置已经生效

注意事项

  • modprobe tcp_bbr 负责加载模块,/etc/modules-load.d/tcp_bbr.conf 负责设置开机自动加载
  • /etc/sysctl.d/99-bbr.conf 用于保存并持久化内核参数
  • 启用 BBR 可能改善部分网络环境下的 TCP 吞吐量,但不保证降低基础延迟或解决跨境线路绕路和丢包等问题

启用2G swap缓存

shell
12345
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

检测是否开启

bash
1
swapon --show

可以看到

bash
12
NAME      TYPE SIZE USED PRIO
/swapfile file   2G   0B   -2