V2Ray on Linux: 从零开始的配置教程


V2Ray on Linux: 从零开始的详尽配置指南

在当今复杂的网络环境中,保护个人隐私、突破地域限制以及确保数据传输安全变得越来越重要。V2Ray 作为 Project V 下的一个核心工具,以其强大的功能、灵活的配置和优秀的性能,成为了许多用户首选的网络代理软件。它支持多种协议和传输方式,能够有效地伪装流量,提高连接的稳定性和隐蔽性。

本教程旨在为 Linux 用户提供一份从零开始、详尽的 V2Ray 服务器端配置指南。无论您是希望搭建个人代理服务,还是想深入了解 V2Ray 的工作原理,本文都将引导您一步步完成安装、配置、优化和维护的全过程。我们将从基础概念讲起,涵盖安装、核心配置、安全性增强(如 TLS 加密和 WebSocket 伪装),以及日常管理和故障排查,力求内容全面且易于理解。

目标读者: 本文主要面向有一定 Linux 基础(了解基本命令行操作)的用户,希望在自己的 Linux 服务器(通常是 VPS)上部署 V2Ray 服务。

文章结构:

  1. V2Ray 简介与核心概念
  2. 准备工作:获取服务器与环境
  3. 安装 V2Ray
  4. 理解 V2Ray 配置文件 (config.json)
  5. 基础配置:VMess over TCP
  6. 进阶配置:WebSocket + TLS + Web 服务器伪装
    • 申请域名与 DNS 解析
    • 安装 Web 服务器 (Nginx)
    • 申请与配置 TLS 证书 (Let's Encrypt)
    • 配置 V2Ray 使用 WebSocket
    • 配置 Nginx 反向代理
  7. V2Ray 服务管理
  8. 客户端配置简述
  9. 安全加固与优化建议
  10. 常见问题与故障排查
  11. 总结

1. V2Ray 简介与核心概念

在我们开始动手之前,理解 V2Ray 的一些基本概念至关重要,这将有助于我们更好地理解配置文件和排查问题。

  • Project V: 一个包含一系列构建特定网络环境工具的项目,V2Ray 是其中最著名的核心组件。
  • V2Ray: 一个网络代理工具,可以帮助您建立私密、安全的网络连接。它本身是一个可执行文件,通过读取配置文件来运行。
  • 协议 (Protocols): V2Ray 支持多种入站和出站协议,用于客户端和服务器之间,或服务器与其他服务器之间的通信。最常用的是 VMessVLESS
    • VMess: V2Ray 原创的加密传输协议,具有较好的性能和安全性。它依赖于准确的系统时间,客户端和服务器时间差不能超过预设值(默认 90 秒)。
    • VLESS: 一个相对较新的协议,设计目标是提供更高的性能和更好的扩展性。它可以不依赖于系统时间,并且可以与多种加密方式(如 TLS)结合使用。
  • 传输方式 (Transports): V2Ray 的协议数据可以通过不同的方式进行传输,以适应不同的网络环境或进行伪装。常见的传输方式包括:
    • TCP: 标准的 TCP 传输,简单直接,但特征明显。
    • mKCP: 基于 KCP 协议的传输方式,模拟 UDP 实现,可能在丢包严重的环境下有较好表现,但也可能被运营商 QoS 限制。
    • WebSocket (WS): 将 V2Ray 流量封装在标准的 WebSocket 协议中。WebSocket 通常用于 Web 浏览器和服务器之间的实时通信,因此 V2Ray over WebSocket 的流量可以被伪装成普通的 HTTPS 流量(当结合 TLS 时),具有很好的穿透性和隐蔽性。
    • HTTP/2 (h2): 基于 HTTP/2 的传输,同样可以结合 TLS 进行伪装。
    • gRPC: Google 开发的一种高性能 RPC 框架,也可用于 V2Ray 传输,同样可以结合 TLS。
  • 入站 (Inbound): 定义 V2Ray 如何接收来自客户端或其他 V2Ray 服务器的连接。例如,配置一个监听特定端口、使用 VMess 协议的入站连接。
  • 出站 (Outbound): 定义 V2Ray 如何将接收到的数据发送出去。最常见的出站是 freedom(直接连接目标网站)和 blackhole(阻止连接)。
  • 路由 (Routing): V2Ray 强大的路由功能允许用户根据目标地址、来源 IP、端口、协议等多种条件,决定数据包应该通过哪个出站协议发送,或者直接阻止。这可以实现分流(国内外网站走不同线路)、广告拦截等高级功能。
  • UUID (User ID): VMess 和 VLESS 协议中用于身份验证的主要凭证,类似于密码。需要确保其唯一性和保密性。
  • AlterID (额外 ID,仅 VMess): VMess 协议的一个参数,用于增加连接的随机性和抗探测性。客户端和服务器的 AlterID 值必须匹配。新版本 V2Ray (v4.22.0+) 推荐 AlterID 设置为 0。
  • TLS (Transport Layer Security): 传输层安全协议,用于在两个通信应用程序之间提供保密性和数据完整性。在 V2Ray 配置中,通常结合 WebSocket 或 HTTP/2 等传输方式,将 V2Ray 流量加密并伪装成标准的 HTTPS 流量,显著提高安全性与隐蔽性。

2. 准备工作:获取服务器与环境

  • 一台 Linux 服务器: 推荐使用 VPS (Virtual Private Server)。选择服务器时,考虑地理位置(影响延迟)、带宽、流量限制和提供商的信誉。常见的 Linux 发行版如 Ubuntu, Debian, CentOS 均可。
  • Root 或 Sudo 权限: 您需要有足够的权限来安装软件和修改配置文件。
  • 基础 Linux 命令行知识: 熟悉 cd, ls, mkdir, nano (或 vim), systemctl 等基本命令。
  • 域名 (可选但强烈推荐): 如果您计划使用 TLS 加密和 WebSocket 伪装,拥有一个自己的域名是必要的。

在开始之前,建议更新您的系统软件包:

```bash

对于 Debian/Ubuntu 系统

sudo apt update && sudo apt upgrade -y

对于 CentOS/RHEL 系统

sudo yum update -y
```

3. 安装 V2Ray

官方推荐使用脚本进行安装,这会自动处理下载、安装、配置服务等步骤。

执行以下命令下载并运行官方安装脚本:

bash
sudo bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)

这个脚本会:

  1. 检测当前系统架构。
  2. 下载最新稳定版的 V2Ray Core。
  3. 将 V2Ray 相关文件安装到 /usr/local/bin/v2ray/usr/local/etc/v2ray (配置文件目录)。
  4. 将 V2Ray 的 GeoIP 和 GeoSite 数据文件安装到 /usr/local/share/v2ray
  5. 配置 Systemd 或 SysVinit 服务,使 V2Ray 能够开机自启并由系统管理。
  6. 生成一个基础的配置文件 /usr/local/etc/v2ray/config.json

安装完成后,您可以通过以下命令检查 V2Ray 版本:

bash
/usr/local/bin/v2ray -version

并查看服务状态:

bash
sudo systemctl status v2ray

默认情况下,服务应该是 active (running) 状态。

注意: 不同的安装脚本或包管理器(如某些第三方源)可能会将文件安装到不同的路径,例如 /etc/v2ray/config.json。请根据实际安装情况调整后续命令中的路径。本文以官方脚本安装路径 /usr/local/etc/v2ray/ 为例。

4. 理解 V2Ray 配置文件 (config.json)

V2Ray 的所有行为都由一个 JSON 格式的配置文件控制,默认位于 /usr/local/etc/v2ray/config.json。理解其结构是配置的关键。

一个典型的 config.json 文件主要包含以下几个顶级字段:

  • log: 配置日志记录级别和路径。
  • api: (可选) 配置 V2Ray 的 API 接口,用于外部程序控制 V2Ray。
  • dns: (可选) 配置 V2Ray 内建的 DNS 服务器。
  • routing: 配置路由规则。
  • policy: (可选) 配置用户级别的策略,如连接数、速度限制。
  • inbounds: 一个数组,包含一个或多个入站连接的配置。这是服务器接收客户端连接的地方。
  • outbounds: 一个数组,包含一个或多个出站连接的配置。定义 V2Ray 如何将数据发送出去。
  • transport: (可选) 全局传输设置。
  • stats: (可选) 开启内部状态统计。

我们将重点关注 inbounds, outbounds, 和 routing 部分。

5. 基础配置:VMess over TCP

这是最基础的配置方式,不涉及伪装,适合在网络环境相对宽松或作为学习起点。

首先,备份默认配置文件:

bash
sudo cp /usr/local/etc/v2ray/config.json /usr/local/etc/v2ray/config.json.bak

然后,编辑配置文件:

bash
sudo nano /usr/local/etc/v2ray/config.json

将其内容替换为以下示例(请务必替换 your_uuidyour_port):

json
{
"log": {
"loglevel": "warning", // 日志级别:debug, info, warning, error, none
"access": "/var/log/v2ray/access.log", // 访问日志路径 (需要手动创建目录和设置权限)
"error": "/var/log/v2ray/error.log" // 错误日志路径 (需要手动创建目录和设置权限)
},
"inbounds": [
{
"port": your_port, // 替换为您选择的端口,例如 12345
"listen": "0.0.0.0", // 监听所有网络接口
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "your_uuid", // 替换为您生成的 UUID
"alterId": 0, // 推荐设置为 0
"security": "auto" // 加密方式,auto 为自动选择,推荐
}
]
},
"streamSettings": {
"network": "tcp" // 使用 TCP 传输
}
}
],
"outbounds": [
{
"protocol": "freedom", // 直接连接目标地址
"settings": {}
},
{
"protocol": "blackhole", // 阻止连接,通常用于路由规则
"settings": {},
"tag": "blocked"
}
],
"routing": {
"domainStrategy": "AsIs",
"rules": [
{
"type": "field",
"ip": ["geoip:private"], // 阻止私有地址的入站请求
"outboundTag": "blocked"
}
// 在这里可以添加更多路由规则,例如广告拦截等
// {
// "type": "field",
// "domain": ["geosite:category-ads-all"],
// "outboundTag": "blocked"
// }
]
}
}

配置说明:

  • log: 配置了日志级别为 warning,并将访问和错误日志分别输出到 /var/log/v2ray/ 目录下。注意: 您需要手动创建 /var/log/v2ray 目录并赋予 V2Ray 运行用户(通常是 nobodyv2ray)写入权限:
    bash
    sudo mkdir -p /var/log/v2ray
    sudo chown nobody:nogroup /var/log/v2ray # 根据实际运行用户调整
  • inbounds: 定义了一个入站连接。
    • port: V2Ray 监听的端口,客户端需要连接这个端口。请选择一个不常用且未被占用的端口 (1024-65535)。
    • listen: 0.0.0.0 表示监听服务器上所有 IPv4 地址的指定端口。
    • protocol: 使用 vmess 协议。
    • settings.clients: 一个数组,可以配置多个用户。
      • id: 用户的 UUID,这是主要的身份凭证。您可以使用 v2ray uuid 命令生成一个新的 UUID:
        bash
        /usr/local/bin/v2ray uuid

        将生成的 UUID 替换 "your_uuid"每个用户应使用唯一的 UUID。
      • alterId: VMess 的额外 ID,新版本建议设为 0 以提高兼容性和性能。
      • security: 加密方式,auto 通常是最佳选择,它会根据客户端能力自动选择如 aes-128-gcm 等加密。
    • streamSettings.network: 指定传输方式为 tcp
  • outbounds: 定义了两个出站规则。
    • 第一个是默认的 freedom 出站,表示将符合条件的流量直接发送到目标服务器。
    • 第二个是 blackhole 出站,配合路由规则使用,用于丢弃(阻止)特定流量。
  • routing: 配置路由规则。
    • domainStrategy: AsIs 表示域名解析策略保持不变。
    • rules: 路由规则列表。示例中包含了一条规则,将所有目标地址为私有 IP (如 192.168.x.x, 10.x.x.x) 的流量导向 blocked 出站(即阻止),防止内部网络扫描等。您可以根据需要添加更多规则,例如使用 geosite:category-ads-all 来拦截广告域名。

检查与启动:

  1. 检查配置文件语法:
    bash
    /usr/local/bin/v2ray test -config /usr/local/etc/v2ray/config.json

    如果显示 Configuration OK,则表示语法无误。
  2. 重启 V2Ray 服务:
    bash
    sudo systemctl restart v2ray
  3. 设置开机自启:
    bash
    sudo systemctl enable v2ray
  4. 检查防火墙: 确保您选择的端口 (your_port) 在服务器防火墙中是开放的。
    • 如果使用 ufw:
      bash
      sudo ufw allow your_port/tcp
      sudo ufw reload
    • 如果使用 firewalld:
      bash
      sudo firewall-cmd --zone=public --add-port=your_port/tcp --permanent
      sudo firewall-cmd --reload

现在,您的基础 VMess over TCP 服务器已经配置完成。您可以使用支持 VMess 协议的客户端,填入服务器 IP、端口 (your_port)、UUID (your_uuid) 和 AlterID (0) 来连接了。

6. 进阶配置:WebSocket + TLS + Web 服务器伪装

虽然基础配置可用,但在复杂的网络环境下,TCP 流量特征明显,容易被检测和干扰。将 V2Ray 流量伪装成正常的 HTTPS 流量 (WebSocket + TLS) 是目前最推荐、最有效的配置方式之一。

这个配置相对复杂,涉及步骤如下:

  1. 申请域名并解析: 您需要一个域名,并将一个子域名(例如 vps.yourdomain.com)解析到您的服务器 IP 地址。
  2. 安装 Web 服务器: 我们需要一个 Web 服务器(如 Nginx 或 Caddy)来处理 HTTPS 请求,并将特定路径的 WebSocket 流量转发给 V2Ray。Nginx 是一个流行且强大的选择。
  3. 申请和配置 TLS 证书: 使用 Let's Encrypt 可以免费获取 TLS 证书,确保 HTTPS 连接的安全性。
  4. 修改 V2Ray 配置: 将入站协议的传输方式改为 WebSocket,并监听一个本地端口(不对外暴露)。
  5. 配置 Web 服务器: 设置 Nginx 监听 443 端口(HTTPS 默认端口),处理 TLS 握手,并将访问特定路径(例如 /yourpath)的请求反向代理到 V2Ray 监听的本地 WebSocket 端口。

6.1 申请域名与 DNS 解析

  • 购买一个域名(如果还没有)。
  • 登录您的域名注册商或 DNS 服务提供商的管理后台。
  • 添加一条 A 记录,将您选择的子域名(例如 vps.yourdomain.com)指向您的服务器公网 IP 地址。
  • 等待 DNS 生效(可能需要几分钟到几小时)。您可以使用 ping vps.yourdomain.com 或在线 DNS 查询工具检查解析是否生效。

6.2 安装 Web 服务器 (Nginx)

```bash

对于 Debian/Ubuntu 系统

sudo apt update
sudo apt install nginx -y

对于 CentOS/RHEL 系统 (可能需要启用 EPEL 源)

sudo yum install epel-release -y
sudo yum install nginx -y
```

启动 Nginx 并设置开机自启:

bash
sudo systemctl start nginx
sudo systemctl enable nginx

检查防火墙,确保 80 (HTTP) 和 443 (HTTPS) 端口开放:

```bash

ufw

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

firewalld

sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd --reload
```

现在访问 http://your_server_iphttp://vps.yourdomain.com (如果 DNS 已生效),应该能看到 Nginx 的欢迎页面。

6.3 申请与配置 TLS 证书 (Let's Encrypt)

我们使用 certbot 工具来自动化申请和续签 Let's Encrypt 证书。

  1. 安装 Certbot:
    ```bash
    # Debian/Ubuntu (推荐使用 snap)
    sudo snap install core; sudo snap refresh core
    sudo snap install --classic certbot
    sudo ln -s /snap/bin/certbot /usr/bin/certbot

    CentOS 7 (使用 EPEL)

    sudo yum install certbot python2-certbot-nginx -y

    CentOS 8/RHEL 8

    sudo dnf install certbot python3-certbot-nginx -y

    ```
    (请根据您的系统和偏好选择合适的安装方式,snap 通常是跨发行版最一致的方式)

  2. 申请证书 (Nginx 插件): 确保您的域名已正确解析到服务器 IP。
    bash
    sudo certbot --nginx -d vps.yourdomain.com # 替换为您的域名

    Certbot 会:

    • 验证您对域名的所有权。
    • 自动获取证书。
    • 修改 Nginx 配置文件以启用 HTTPS 并设置证书路径。
    • 询问是否将 HTTP 流量重定向到 HTTPS(推荐选择 Redirect)。

    如果一切顺利,证书将被安装,并且 Nginx 会自动重载配置。Certbot 还会自动设置定时任务来续签证书。

    您可以访问 https://vps.yourdomain.com 来测试 HTTPS 是否工作正常(浏览器应显示安全锁标志)。

6.4 配置 V2Ray 使用 WebSocket

现在修改 V2Ray 配置文件,使其监听本地回环地址的一个端口,并使用 WebSocket 传输。

编辑 /usr/local/etc/v2ray/config.json:

bash
sudo nano /usr/local/etc/v2ray/config.json

修改 inbounds 部分,如下所示(保留其他部分如 log, outbounds, routing):

```json
{
// ... log, api, dns, routing, policy ... (保持不变)

"inbounds": [
{
"port": 10086, // V2Ray 监听的本地端口,不对外暴露
"listen": "127.0.0.1", // 只监听本地回环地址
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "your_uuid", // 使用之前生成的或新生成的 UUID
"alterId": 0
// "security": "auto" // security 字段在 VMess + WebSocket 下通常可以省略
}
],
"disableInsecureEncryption": false // 对于 WebSocket+TLS,外层已有 TLS 加密,内层 VMess 加密可选。设为 true 可强制内层加密,但可能略微影响性能。若追求极致隐蔽性,某些场景下会设为 true。通常保持 false 或省略。
},
"streamSettings": {
"network": "ws", // 传输方式改为 WebSocket
"wsSettings": {
"path": "/your_websocket_path" // WebSocket 的路径,需要与 Nginx 配置一致,选择一个隐蔽的路径,例如 "/control-panel-1a2b3c"
// "headers": { // 可以添加自定义 HTTP 头,例如伪装成特定应用
// "Host": "vps.yourdomain.com"
// }
}
}
// "sniffing": { // 流量嗅探,可选功能
// "enabled": true,
// "destOverride": ["http", "tls"]
// }
}
],

"outbounds": [
// ... (保持不变,至少需要 freedom 出站)
{
"protocol": "freedom",
"settings": {}
},
{
"protocol": "blackhole",
"settings": {},
"tag": "blocked"
}
]

// ... transport, stats ... (保持不变)
}
```

关键改动:

  • port: 改为一个本地端口,例如 10086。这个端口不需要在防火墙中打开。
  • listen: 改为 127.0.0.1,这样 V2Ray 只接受来自本机的连接(即来自 Nginx 的反向代理)。
  • protocol: 仍然是 vmess
  • settings.clients.id: 保持或更新您的 UUID。
  • streamSettings.network: 改为 ws (WebSocket)。
  • streamSettings.wsSettings.path: 非常重要,设置一个 WebSocket 连接路径,例如 /your_websocket_path。客户端连接时需要指定这个路径。选择一个不容易被猜到的路径。

保存文件后,检查配置并重启 V2Ray:

bash
/usr/local/bin/v2ray test -config /usr/local/etc/v2ray/config.json
sudo systemctl restart v2ray

6.5 配置 Nginx 反向代理

现在需要配置 Nginx,让它处理来自外网的 HTTPS 请求,并将访问 https://vps.yourdomain.com/your_websocket_path 的流量转发给 V2Ray 监听的 127.0.0.1:10086

编辑 Nginx 的站点配置文件。Certbot 通常会为你创建一个配置文件,路径可能类似 /etc/nginx/conf.d/vps.yourdomain.com.conf/etc/nginx/sites-available/vps.yourdomain.com (然后链接到 sites-enabled)。找到包含 server { listen 443 ssl; ... } 的块。

bash
sudo nano /etc/nginx/sites-available/default # 或者 certbot 创建的特定配置文件

在该 server 块内,添加一个 location 块来处理 WebSocket 代理:

```nginx
server {
listen 443 ssl http2; # 启用 HTTP/2 提升性能
listen [::]:443 ssl http2;

server_name vps.yourdomain.com; # 你的域名

# SSL 证书配置 (Certbot 通常会自动配置好)
ssl_certificate /etc/letsencrypt/live/vps.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/vps.yourdomain.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;

# (可选) HSTS Header - 强制浏览器使用 HTTPS
# add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

# (可选) 简单的根目录,可以放一个静态网页做伪装
root /var/www/html;
index index.html index.htm;

# (可选) 阻止直接访问 IP
# if ($host != $server_name) {
#     return 403;
# }

# === V2Ray WebSocket 反向代理配置 ===
location /your_websocket_path { # 必须与 V2Ray 配置中的 wsSettings.path 一致
    if ($http_upgrade != "websocket") { # 如果不是 WebSocket 升级请求,返回 404
        return 404;
    }
    proxy_redirect off;
    proxy_pass http://127.0.0.1:10086; # 转发到 V2Ray 监听的本地地址和端口

    # WebSocket 必须的 Header
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    # 传递真实 IP 和 Host 等信息给 V2Ray (V2Ray 可能需要这些信息做判断)
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# === V2Ray 配置结束 ===

# (可选) 其他 location 配置,例如 PHP 等
# location ~ \.php$ {
#     ...
# }

# Certbot 自动添加的 acme-challenge 路径,用于证书续签,请勿删除
location ~ /.well-known/acme-challenge/ {
    allow all;
    root /var/www/html; # 或者 Certbot 指定的其他路径
}

# (可选) 隐藏 Nginx 版本号
server_tokens off;

}

(可选) HTTP 到 HTTPS 的重定向 (Certbot 通常也会自动配置)

server {
listen 80;
listen [::]:80;
server_name vps.yourdomain.com;

# Certbot 的 HTTP-01 验证需要 80 端口可访问
location ~ /.well-known/acme-challenge/ {
    allow all;
    root /var/www/html; # 确保与 HTTPS 配置中的一致
}

location / {
    return 301 https://$host$request_uri;
}

}
```

关键配置解释:

  • location /your_websocket_path { ... }: 这个块定义了当访问 https://vps.yourdomain.com/your_websocket_path 时 Nginx 的行为。
  • if ($http_upgrade != "websocket") { return 404; }: 增加一层保护,只允许 WebSocket 升级请求访问这个路径,普通浏览器访问会得到 404 错误。
  • proxy_pass http://127.0.0.1:10086;: 将请求转发给 V2Ray 监听的本地 WebSocket 服务。
  • proxy_http_version 1.1;, proxy_set_header Upgrade $http_upgrade;, proxy_set_header Connection "upgrade";: 这三行是启用 WebSocket 代理的关键,它们负责传递 WebSocket 握手所需的 HTTP 头。
  • proxy_set_header Host $host;, proxy_set_header X-Real-IP $remote_addr;, proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;: 这些头信息将客户端的真实 IP 和请求的 Host 传递给 V2Ray。

检查与重载 Nginx:

  1. 检查 Nginx 配置语法:
    bash
    sudo nginx -t

    确保输出 syntax is oktest is successful
  2. 重载 Nginx 配置:
    bash
    sudo systemctl reload nginx

现在,您的 V2Ray 服务器已经配置为通过 Nginx 使用 WebSocket + TLS 进行伪装。客户端连接时需要配置如下信息:

  • 地址: vps.yourdomain.com
  • 端口: 443
  • 用户 ID (UUID): your_uuid
  • 额外 ID (AlterID): 0
  • 加密方式: auto 或根据客户端选项选择
  • 传输协议: ws (WebSocket)
  • 伪装类型 (Host): vps.yourdomain.com (有些客户端需要填写)
  • 路径 (Path): /your_websocket_path (务必与服务器配置一致)
  • 底层传输安全 (TLS): 开启 (或选择 tls)

7. V2Ray 服务管理

使用 systemctl 管理 V2Ray 服务(假设使用 Systemd):

  • 启动服务: sudo systemctl start v2ray
  • 停止服务: sudo systemctl stop v2ray
  • 重启服务: sudo systemctl restart v2ray
  • 查看状态: sudo systemctl status v2ray
  • 设置开机自启: sudo systemctl enable v2ray
  • 取消开机自启: sudo systemctl disable v2ray
  • 查看实时日志 (如果配置了 systemd journal): sudo journalctl -u v2ray -f
  • 查看配置文件中指定的日志文件: sudo tail -f /var/log/v2ray/error.log

8. 客户端配置简述

V2Ray 拥有众多图形化客户端,适用于 Windows, macOS, Android, iOS 和 Linux。常见的有:

  • Windows: V2RayN, Qv2ray, Clash for Windows (支持 V2Ray 协议)
  • macOS: V2RayX, Qv2ray, ClashX (支持 V2Ray 协议)
  • Linux: Qv2ray, Clash for Linux
  • Android: V2RayNG, BifrostV
  • iOS: Shadowrocket (小火箭), Quantumult X, Kitsunebi (均需付费购买)

配置客户端时,你需要将服务器端配置的参数(地址、端口、UUID、AlterID、传输协议、路径、TLS 设置等)准确地填入客户端对应的字段。许多客户端支持通过 V2Ray 分享链接(vmess://...)或扫描二维码导入配置,这通常更方便。

生成 Vmess 链接:

你可以手动拼接 Vmess 链接,或者使用在线工具/脚本生成。一个典型的 WebSocket + TLS 的 Vmess 链接格式大致如下 (Base64 编码部分包含了详细配置):

vmess://<Base64EncodedJSON>

其中 Base64 解码后的 JSON 结构类似:

json
{
"v": "2",
"ps": "My V2Ray Server", // 备注名
"add": "vps.yourdomain.com", // 地址
"port": "443", // 端口
"id": "your_uuid", // UUID
"aid": "0", // AlterID
"net": "ws", // 网络传输方式
"type": "none", // 伪装类型 (通常不用)
"host": "vps.yourdomain.com", // WebSocket Host
"path": "/your_websocket_path", // WebSocket 路径
"tls": "tls" // 启用 TLS
}

9. 安全加固与优化建议

  • 使用强 UUID: 不要使用默认或容易猜到的 UUID。
  • 保持 V2Ray 和系统更新: 及时应用安全补丁。使用 sudo bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh) 可以更新 V2Ray Core。
  • 配置防火墙: 只开放必要的端口(例如 443 和 SSH 端口)。
  • 使用 WebSocket + TLS: 这是目前推荐的组合,隐蔽性好。
  • 选择隐蔽的 WebSocket 路径: 不要使用 /v2ray /ws 等常见路径。
  • 考虑添加伪装网站: 在 Nginx 配置中,为根路径 / 提供一个简单的静态网页,使得直接访问域名看起来像一个正常的网站。
  • 限制登录尝试 (SSH): 使用 fail2ban 等工具保护 SSH 登录。
  • 定期检查日志: 关注 /var/log/v2ray/error.log 和 Nginx 的错误日志,及时发现问题。
  • 时间同步: V2Ray (尤其是 VMess) 对时间敏感,确保服务器和客户端时间准确。安装并启用 NTP 服务:
    ```bash
    # Debian/Ubuntu
    sudo apt install ntp -y
    sudo systemctl start ntp
    sudo systemctl enable ntp

    CentOS/RHEL

    sudo yum install ntp -y
    sudo systemctl start ntpd
    sudo systemctl enable ntpd

    或者使用 chrony

    sudo yum install chrony -y

    sudo systemctl start chronyd

    sudo systemctl enable chronyd

    ```
    * 考虑 VLESS 协议: 如果追求极致性能和更灵活的加密组合(例如 VLESS + XTLS),可以研究 VLESS 协议的配置。但 VMess + WS + TLS 仍然是非常稳定和可靠的选择。

10. 常见问题与故障排查

  • 客户端无法连接:
    1. 检查服务器 V2Ray 服务状态: sudo systemctl status v2ray,确保是 active (running)
    2. 检查 V2Ray 错误日志: sudo tail -n 50 /var/log/v2ray/error.log。查看是否有明显错误信息,如配置错误、权限问题。
    3. 检查 Nginx 服务状态和日志: sudo systemctl status nginx, sudo tail -n 50 /var/log/nginx/error.log。查看 Nginx 是否正常运行,是否有反向代理相关的错误。
    4. 检查防火墙: 确保端口(基础配置中的 your_port TCP,或 WS+TLS 配置中的 443 TCP)已开放。
    5. 检查域名解析: 确保域名正确解析到服务器 IP。
    6. 检查客户端配置: 仔细核对地址、端口、UUID、AlterID、传输方式、路径、TLS 设置是否与服务器完全一致。大小写、空格等都可能导致问题。
    7. 检查服务器与客户端时间: 时间差过大(超过 90 秒)会导致 VMess 连接失败。使用 date 命令检查并同步时间。
    8. 尝试 ping 服务器域名/IP: 检查网络连通性。
    9. 检查 config.json 语法: v2ray test -config /usr/local/etc/v2ray/config.json
  • 速度慢:
    • 服务器线路问题:尝试更换 VPS 提供商或服务器位置。
    • 服务器性能瓶颈:检查 CPU、内存使用率。
    • 传输协议影响:TCP 在丢包环境下可能表现不佳,mKCP 可能改善但可能被 QoS,WebSocket + TLS 相对稳定。
    • 运营商 QoS:某些时段或协议可能被限速。
    • 客户端网络问题。
  • 证书过期: Certbot 通常会自动续签,但如果失败,需要手动运行 sudo certbot renew 并检查错误。确保证书相关的 Nginx 配置正确,80 端口可访问用于验证。

11. 总结

通过本教程,我们从零开始,在 Linux 服务器上详细配置了 V2Ray 服务。我们首先了解了 V2Ray 的核心概念,然后实践了基础的 VMess over TCP 配置,并进一步学习了更安全、更隐蔽的 WebSocket + TLS + Nginx 伪装方案。同时,我们也涵盖了服务管理、客户端配置、安全建议和故障排查等重要方面。

V2Ray 是一个极其灵活和强大的工具,本文介绍的只是其中的一部分常用配置。你可以进一步探索 V2Ray 的路由功能来实现更复杂的分流策略,尝试 VLESS 等其他协议,或者结合 mKCP、gRPC 等不同的传输方式。

搭建和维护 V2Ray 服务需要持续学习和关注。希望这篇详尽的指南能为您提供坚实的起点,帮助您成功部署并有效利用 V2Ray,在复杂的网络世界中畅游无阻。记住,始终将安全放在首位,并遵守当地法律法规。


THE END