技术类

C 基于 3x-ui 面板搭建 xray 代理服务器

目录

  • 1 3x-ui:支持多协议多用户的 xray 面板
  • 2 安装 3x-ui 面板
    • 2.1 Linux 一键安装 3x-ui 面板
    • 2.2 基于 docker-compose 安装 3x-ui 面板
    • 2.3 配置 nginx 使用 https 访问 3x-ui 面板
  • 3 3x-ui 面板配置
  • 4 添加入站节点和订阅链接
    • 4.1 新建入站节点
  • 4.2 新建客户端
  • 5 客户端订阅软件参考

1 3x-ui:支持多协议多用户的 xray 面板

xray 是一款轻量级网络代理工具,支持多种协议,包括 vmessvlesstrojanshadowsocks 等。

3x-ui 则是一个基于 xray 的管理面板,支持多协议多用户。

2 安装3x-ui面板

2.1 Linux 一键安装 3x-ui 面板

执行如下命令一键安装或升级 3x-ui

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

安装过程中会提示输入端口号,安装完成后会给出面板访问地址以及随机生成的用户名和密码。然后可以使用浏览器访问面板地址,使用用户名和密码登录。

后续也可以通过 x-ui 命令行工具进行管理:

x-ui --help
# 启用面板
x-ui start

2.2 基于 docker-compose 安装 3x-ui 面板

使用 docker 安装较为省心省事,基本不会遇到不可预知的意外报错等问题。推荐基于 docker-compose.yaml 安装。

mkdir /root/3x-ui
cd /root/3x-ui
vi docker-compose.yaml

然后参考写入如下内容配置:

version: "3"

services:
  3x-ui:
    image: ghcr.io/mhsanaei/3x-ui:latest
    container_name: 3x-ui
    hostname: 3x-ui.lzw.me
    volumes:
      - /root/3x-ui/db/:/etc/x-ui/
      - /root/3x-ui/cert/:/root/cert/
    environment:
      XRAY_VMESS_AEAD_FORCED: false
      X_UI_ENABLE_FAIL2BAN: true
    tty: true
    network_mode: host
    restart: unless-stopped

注意:

  • 这里配置了目录映射:/etc/x-ui/ 用于存放数据库文件,/root/cert/ 用于存放网站域名证书(后续配置 SSL 会用到)。
  • hostname 配置需要绑定的域名,若不配置域名可移除。
  • network_mode: host 配置为使用主机网络,这样 3x-ui 面板和 xray 代理服务会共享同一网络,方便后续配置。
# 启动容器
docker compose up -d

# 停止并删除容器
docker compose down

# 如果需要更新,可执行如下命令更新容器镜像后并重启
docker pull ghcr.io/mhsanaei/3x-ui:latest

Docker 方式部署的相关默认设置如下:

  • 用户名: admin
  • 密码: admin
  • 端口: 2053

应在登录后修改它们,以免被互联网安全扫描工具获取利用

2.3 配置 nginx 使用 https 访问 3x-ui 面板

通过 nginx 配置代理的方式,可以实现使用 https 协议配置域名访问。当然 nginx 配置这一步不是必须的,你也可以使用 公网IP + 端口的方式直接访问。

在 nginx/conf/init.d 目录下新建 3xui.conf 文件。内容参考:

server {
    listen 80;
    listen [::]:80;

    listen 443 ssl;
    listen [::]:443 ssl;
    # 这里是域名证书的配置,具体应修改为你实际的路径
    ssl_certificate /root/3x-ui/cert/fullchain.pem;
    ssl_certificate_key /root/3x-ui/cert/privkey.pem;

    # 修改为你自己的面板访问域名
    server_name 3x-ui.lzw.me;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Range $http_range;
        proxy_set_header If-Range $http_if_range;
        proxy_redirect off;
        # 3x-ui 面板访问端口。对应3x-ui配置: 面板设置 - 常规 - 面板监听端口
        proxy_pass https://127.0.0.1:54321;
    }

    # 反代 websocket
    location /xray {
        proxy_redirect off;
        proxy_pass http://127.0.0.1:10001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Y-Real-IP $realip_remote_addr;
    }

    # 反代订阅。sub 路径可在 3x-ui 中自定义修改: 面板设置 - 订阅设置 - URI 路径
    location /sub/ {
        # 这里 3009 是 3x-ui面板配置的订阅监听端口。查看和自定义: 面板设置 - 订阅设置 - 监听端口
        proxy_pass http://127.0.0.1:3009;
        proxy_redirect off;
        proxy_http_version 1.1;

        set $diy_connection_upgrade "upgrade";
        if ( $http_upgrade = '' ) {
            set $diy_connection_upgrade $connection;
        }

        proxy_set_header Connection $diy_connection_upgrade;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Y-Real-IP $realip_remote_addr;
    }

    access_log /home/wwwlogs/3xui.log main;
    error_log /home/wwwlogs/3xui_error.log;
}

然后执行:

# 测试配置是否正确
nginx -t
# 重新加载配置
nginx -s reload

3 3x-ui面板配置

为了更为安全起见,建议将一些默认设置进行修改。

登录安全:

建议设置较为复杂的登录密码,以防止被别有用心者扫描工具暴力猜解到。 依次点击 面板设置 - 安全设定,设置足够复杂的登录名和密码,并启用安全令牌。可以用工具生成长文本密码,如 随机密码生成器,并备忘在个人电子密码簿中。

自定义订阅设置:

  • 自定义监听端口。面板设置 - 常规 - 面板监听端口,若为 docker 部署会使用默认端口 54321,这里建议修改为自定义端口。
  • 自定义面板访问 URL 根路径。可选,修改后面板访问地址需附加该路径。设置路径:面板设置 - 常规 - 面板 url 根路径
  • 自定义订阅服务监听端口。修改后记得同时修改 nginx 配置中的代理转发端口。设置路径:面板设置 - 订阅设置 - 监听端口
  • 自定义订阅服务使用的 URI 路径。可选,安全起见建议修改一下。需同时修改 nginx 代理配置对应的部分。设置路径:面板设置 - 订阅设置 - URI 路径

4 添加入站节点和订阅链接

4.1 新建入站节点

首先新建一个支持 reality 的入站节点。操作路径:入站列表 - 添加入站。主要填写内容:

  • 协议:vless
  • 监听端口:使用默认随机生成的或自定义均可
  • 传输:TCP(RAW)
  • 安全:选中 reality
  • 点击 Get New Cert 按钮随机生成私钥和公钥
  • 其他配置项默认即可
    然后关于私钥和公钥,点一下下面的 Get New Cert按钮就可以随机获取私钥和公钥。

然后点击右下角的添加,就完成了一个reality节点的搭建。

4.2 新建客户端

在入站节点配置完成后,需要生成一个订阅链接,以便客户端可以通过该链接连接到节点。在刚创建的入站节点行的菜单列单击,弹出菜单中点击新建客户端,基本按默认配置即可,然后点添加客户端按钮。

最后即可在客户端列表中获取订阅链接,用于客户端订阅使用。可以用客户端的扫码功能快速添加。

需要注意的是,如果多人使用,建议分别建立独立的入站节点以使用独立的端口。不要将同一个客户端链接分享给多人同时使用,这可能会因为被检测到而导致节点被封。

5 客户端订阅软件参考

  • 安卓
    • Sing-Box(免费)
    • v2rayNG: 谷歌应用市场、或者:https://github.com/2dust/v2rayNG/releases
    • NekoBox: https://github.com/MatsuriDayo/NekoBoxForAndroid/releases
    • Hiddify
    • Surfboard
  • IOS
    • 小火箭 Shadowrocket(收费,3.99美元,可找免费账号下载)
    • Karing(免费)
    • Potatso(免费且简单)
    • Sing-Box(免费)
    • Hiddify(支持下载 ipa 自签名安装)
    • QuantumultX(不支持 hysteria2 和 reality)
    • FoXray(收费)
    • Loon(收费)
    • Stash(收费)
    • Surge(收费)
  • 支持 windows / IOS / Linux
    • Clash-verge-rev:https://github.com/clash-verge-rev/clash-verge-rev/releases
    • Sing-Box:https://sing-box.sagernet.org/zh/clients/
    • Hiddify:https://github.com/hiddify/hiddify-next
    • V2rayN:https://github.com/2dust/v2rayN/releases
    • mihomo-party: https://github.com/mihomo-party-org/mihomo-party/releases
    • Nekoray:https://matsuridayo.github.io/
    • FLClash:https://github.com/chen08209/FlClash/releases
    • GUI.for.Singbox:https://github.com/GUI-for-Cores/GUI.for.SingBox
  • Mac OS
    • ClashX:https://en.clashx.org/download/
    • Surge(收费)
  • 软路由
    • OpenWrt 可使用 PassWallopenwrt-passwall2OpenClash