v2ray
ufw
本文字数:4.1k 字 | 阅读时长 ≈ 16 min

v2ray

ufw
本文字数:4.1k 字 | 阅读时长 ≈ 16 min

1. V2Ray 客户端命令行教程

1.1 macOS

首先,安装 macOS 下的 Homebrew 包管理工具。然后通过 Homebrew 执行以下命令完成安装:

brew tap v2ray/v2ray
brew install v2ray-core

1.2 Linux

参考 V2Ray 官方文档,运行以下命令完成安装:

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

1.3 配置

新建 config.json 文件,并将以下内容复制并粘贴到文件中。记得修改节点地址和 V2Ray UUID(你可以在 AgentNEO 服务详情的“服务设置”一栏中找到服务唯一的 UUID)。

{
  "inbounds": [
    {
      "port": 1080,
      "protocol": "socks",
      "sniffing": {
        "enabled": true,
        "destOverride": ["http", "tls"]
      },
      "settings": {
        "auth": "noauth"
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "vmess",
      "settings": {
        "vnext": [
          {
            "address": "**节点地址**",
            "port": 443,
            "users": [
              {
                "id": "**V2Ray UUID**",
                "alterId": 1
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "ws",
        "security": "tls",
        "wsSettings": {
          "path": "/v2"
        }
      }
    }
  ]
}

运行

确认你保存的 config.json 文件路径,例如 /home/root/config.json。然后运行以下命令启动 V2Ray 客户端:

v2ray -config /home/root/config.json

启动客户端后,你会看到本地 SOCKS 代理的端口为 1080。接下来,只需在你的系统或应用程序中配置代理指向本地端口(127.0.0.1:1080)即可。

下面给一个配置文件的例子

{
  "inbounds": [
    {
      "port": 1080,
      "protocol": "socks",
      "sniffing": {
        "enabled": true,
        "destOverride": ["http", "tls"]
      },
      "settings": {
        "auth": "noauth"
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "vmess",
      "settings": {
        "vnext": [
          {
            "address": "www.mychat.cc",
            "port": 443,
            "users": [
              {
                "id": "18df4cf5-5360-403e-888d-cdf1a1854bf4",
                "alterId": 1,
                "security": "auto"  // 使用 AEAD 加密
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "ws",
        "security": "tls",
        "wsSettings": {
          "path": "/IpKiziciWbqBhbyNMGgs1"
        }
      },
      "tlsSettings": {
        "allowInsecure": true  // 跳过证书验证
      }
    }
  ]
}

这段配置是 V2Ray 的配置文件,涉及到通过 WebSocket (WS) 协议与 TLS (传输层安全) 加密连接的 VMess 协议配置。每一部分的解释如下:

inbounds

inbounds 部分定义了 V2Ray 的入口(客户端请求接入点)。在本例中,配置了一个 SOCKS 代理服务。

"inbounds": [
    {
      "port": 1080,
      "protocol": "socks",
      "sniffing": {
        "enabled": true,
        "destOverride": ["http", "tls"]
      },
      "settings": {
        "auth": "noauth"
      }
    }
  ]
•	port: 该配置项设置了 V2Ray 代理服务监听的端口,端口 1080 表示本地通过 SOCKS 协议访问 V2Ray 代理服务。
•	protocol: 设置该入口使用的协议,"socks" 代表 SOCKS5 协议,是常用的代理协议。
•	sniffing: 该部分配置了 V2Ray 的流量嗅探功能。启用了 sniffing 后,V2Ray 会尝试分析经过代理的流量,并判断协议类型。
•	enabled: 设置为 true,启用嗅探功能。
•	destOverride: 如果嗅探到目标是 HTTP 或 TLS 流量,V2Ray 会根据这些类型进行相应的处理。
•	settings: 配置 SOCKS 代理的设置。
•	auth: 设置为 noauth,表示无需认证就可以连接该 SOCKS 代理。

outbounds

outbounds 部分定义了 V2Ray 向外发起连接的方式,通常是配置如何连接到远程的 VMess 服务器。这里配置了通过 WebSocket + TLS 与远程服务器连接。

"outbounds": [
    {
      "protocol": "vmess",
      "settings": {
        "vnext": [
          {
            "address": "www.mychat.cc",
            "port": 443,
            "users": [
              {
                "id": "18df4cf5-5360-403e-888d-cdf1a1854bf4",
                "alterId": 1,
                "security": "auto"  // 使用 AEAD 加密
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "ws",
        "security": "tls",
        "wsSettings": {
          "path": "/IpKiziciWbqBhbyNMGgs1"
        }
      },
      "tlsSettings": {
        "allowInsecure": true  // 跳过证书验证
      }
    }
  ]
•	protocol: 配置了 V2Ray 使用 vmess 协议,表示客户端和服务器使用 VMess 协议进行通信。VMess 是 V2Ray 的主要协议之一,用于加密和传输数据。

settings 部分
• vnext: 该字段是 VMess 协议的核心配置,用来定义和配置远程服务器的地址和用户信息。
• address: 远程服务器的地址,这里是 “www.mychat.cc”,表示连接到该域名的服务器。
• port: 远程服务器的端口,这里是 443,通常用于 TLS 加密通信。
• users: 该部分是用来配置 VMess 协议用户的信息,包括:
• id: 用户的唯一标识符(UUID),18df4cf5-5360-403e-888d-cdf1a1854bf4 是你为该 VMess 连接配置的 UUID。
• alterId: 备用 ID(备用身份),通常设置为 1。在 VMess 协议中,alterId 用于增加安全性和混淆流量。
• security: 设置加密方式,“auto” 会自动选择安全的加密方式。AEAD 是推荐的加密方式,因为它提供更高的安全性。

streamSettings 部分
• network: 设置为 ws,表示使用 WebSocket 协议传输数据。WebSocket 是一种持久的双向通信协议,适用于防火墙穿透。
• security: 设置为 tls,表示使用 TLS 加密通信。TLS 是安全传输层协议,确保数据传输的安全性和完整性。
• wsSettings:
• path: WebSocket 请求的路径,/IpKiziciWbqBhbyNMGgs1 是 WebSocket 连接的 URL 路径。该路径是 WebSocket 的一部分,用于标识和区分不同的连接。

tlsSettings 部分
• allowInsecure: 设置为 true,表示允许在没有验证 SSL/TLS 证书的情况下进行连接。通常在使用自签名证书或无有效证书时使用。警告: 在生产环境中,建议将其设置为 false,以确保连接的安全性。

总结

这段配置文件中,inbounds 部分配置了本地 SOCKS 代理,V2Ray 会监听本地 1080 端口,接受来自客户端的请求。outbounds 部分配置了 V2Ray 使用 WebSocket 和 TLS 协议与远程服务器 www.mychat.cc 建立加密连接,使用 VMess 协议进行通信。配置了 UUID 和 alterId 作为用户身份,并且在 WebSocket 和 TLS 设置中指定了路径和安全选项。

在V2Ray中,启动和停止服务的命令通常依赖于你的操作系统和V2Ray的安装方式。如果你是通过systemd来管理V2Ray服务的话,下面是一些常用的命令:

启动V2Ray服务:

sudo systemctl start v2ray

停止V2Ray服务:

sudo systemctl stop v2ray

重启V2Ray服务:

sudo systemctl restart v2ray

查看V2Ray服务状态:

sudo systemctl status v2ray

如果你是通过其他方式直接运行V2Ray二进制文件(例如:通过v2ray run命令),可以使用以下命令:

启动V2Ray:

/path/to/v2ray/v2ray run

停止V2Ray:

你可以通过查找V2Ray的进程并杀死它,命令如下:

ps aux | grep v2ray # 查找V2Ray进程
kill # 停止V2Ray进程,替换为进程ID

如果有安装管理工具,也可以使用如下命令:

v2ray stop

这些命令适用于一般情况下的V2Ray启动和停止。

要指定V2Ray的启动文件(即配置文件),你可以在启动V2Ray时通过命令行参数明确指定配置文件的位置。以下是几种方法来指定启动文件:

  1. 使用 systemd 启动并指定配置文件

如果你是通过 systemd 管理 V2Ray 服务,可以修改 v2ray.service 文件,来指定 V2Ray 配置文件的位置。
1. 打开 v2ray.service 文件(通常在 /etc/systemd/system/ 或 /lib/systemd/system/ 路径下,具体路径可能根据你的安装方式有所不同):

sudo nano /etc/systemd/system/v2ray.service

2.	在 ExecStart 这一行,修改配置文件路径,例如:

ExecStart=/usr/local/bin/v2ray -config /etc/v2ray/config.json

3.	保存并退出编辑器。
4.	重新加载 systemd 配置并启动 V2Ray 服务:

sudo systemctl daemon-reload
sudo systemctl start v2ray

  1. 使用命令行启动并指定配置文件

如果你手动启动 V2Ray,可以直接使用 -config 参数来指定配置文件。例如:

/path/to/v2ray/v2ray -config /path/to/your/config.json

这样,V2Ray会使用你指定的配置文件 /path/to/your/config.json。

  1. 在V2Ray的配置文件中指定配置路径

如果你修改了V2Ray的启动文件,你可以在 config.json 文件中指定一个特定的配置文件路径。

  1. 使用V2Ray的默认配置文件

V2Ray在默认情况下会使用 /etc/v2ray/config.json,如果配置文件放置在默认路径下,则不需要额外指定。

通过这些方法,你可以指定V2Ray的启动文件,使其使用自定义的配置文件。

如果你直接使用 path/to/v2ray/v2ray -config /path/to/your/config.json 命令来启动 V2Ray,它通常会在当前终端会话中运行,而不会自动在后台运行。为了让它在后台运行,你可以使用以下几种方法:

方法 1:使用 & 将 V2Ray 放到后台运行

你可以在命令末尾加上 &,这样它会在后台运行,命令行会立即返回。

/path/to/v2ray/v2ray -config /path/to/your/config.json &

这会将 V2Ray 进程放到后台,命令行会继续工作,你也可以关闭终端而不停止 V2Ray。

方法 2:使用 nohup 来在后台运行并忽略挂起信号

nohup 可以使程序在退出终端时继续运行,并将输出写入文件。

nohup /path/to/v2ray/v2ray -config /path/to/your/config.json > /path/to/logfile.log 2>&1 &

•	nohup:让程序即使退出终端也继续运行。
•	> /path/to/logfile.log 2>&1:将输出(包括错误信息)重定向到日志文件。
•	&:在后台运行。

方法 3:使用 screen 或 tmux

如果你希望能够随时访问和控制 V2Ray 进程,可以使用 screen 或 tmux 来创建一个新的会话,这样你可以在会话中运行命令,并随时重新连接。
1. 启动 screen 会话:

screen -S v2ray

2.	在 screen 会话中启动 V2Ray:

/path/to/v2ray/v2ray -config /path/to/your/config.json

3.	按下 Ctrl + A,然后按 D 将会话分离。
4.	你可以随时通过以下命令重新连接到会话:

screen -r v2ray

方法 4:使用 systemd 来管理后台进程

如果你想要 V2Ray 在后台运行并且随着系统启动自动启动,建议使用 systemd 来管理 V2Ray 进程。你可以像前面提到的那样创建一个 systemd 服务来实现这一点,这样 V2Ray 会在后台运行并且能够自动重启。

小结
• 使用 & 或 nohup 可以快速将进程放到后台。
• 使用 screen 或 tmux 可以在后台运行并随时连接到进程。
• 使用 systemd 可以确保 V2Ray 在系统启动时自动启动并在后台运行。

这个错误信息 [🡕] /etc/systemd/system/v2ray.service:7: Special user nobody configured, this is not safe! 表示在你的 systemd 服务文件中,使用了一个被标记为 “不安全” 的用户 nobody,系统对此发出警告。通常,nobody 用户是一个系统用户,通常用于没有特定权限的进程。然而,在某些情况下,nobody 用户可能具有过于宽泛的权限,这使得系统认为它不适合用于运行服务,尤其是安全性要求较高的进程。

解决方案

  1. 使用专门的非特权用户

为了提高安全性,最好为 V2Ray 创建一个专门的用户(例如 v2ray 用户),而不是使用 nobody 用户。你可以通过以下步骤来更改这个设置。
1. 创建一个新的用户(如果尚未创建):

sudo useradd -r -s /bin/false v2ray

这将创建一个新的系统用户 v2ray,并且不允许该用户登录(-s /bin/false)。

2.	修改 v2ray.service 文件:

编辑 /etc/systemd/system/v2ray.service 文件,找到以下行(通常在 User= 字段中):

User=nobody

将其修改为:

User=v2ray

3.	更新服务文件:

确保文件权限正确,执行以下命令:

sudo chown root:root /etc/systemd/system/v2ray.service
sudo chmod 644 /etc/systemd/system/v2ray.service

4.	重新加载 systemd 配置并启动服务:

sudo systemctl daemon-reload
sudo systemctl start v2ray

  1. 其他方式

如果你不想更改用户配置,可以选择忽略这个警告,但这不推荐,尤其是在生产环境中。

要强制继续使用 nobody 用户,你可以在 v2ray.service 中添加 AmbientCapabilities=CAP_NET_BIND_SERVICE 这一行,以允许 nobody 用户进行网络操作,但这仍然存在潜在的安全隐患。

User=nobody
AmbientCapabilities=CAP_NET_BIND_SERVICE

不过,还是建议你使用 专门的用户 来提高系统的安全性。

总结

最推荐的做法是创建一个专门的用户(如 v2ray 用户)来运行 V2Ray,而不是使用 nobody 用户,这样可以减少安全风险。

如果你希望在不同的时刻使用不同的配置文件,并且希望保持灵活性,最好的方法是创建多个 systemd 服务配置文件,或者使用脚本来启动 V2Ray 服务,并动态指定配置文件路径。以下是几种解决方案:

  1. 使用多个 systemd 服务配置文件

你可以为不同的配置文件创建多个 systemd 服务配置文件,分别用于不同的场景。这将允许你根据需求启动不同的配置。

步骤:
1. 创建多个 systemd 服务文件:
假设你有两个配置文件,分别是 /home/yonghuiwang/data/v2ray/config1.json 和 /home/yonghuiwang/data/v2ray/config2.json。
创建 v2ray1.service 配置文件:

sudo cp /etc/systemd/system/v2ray.service /etc/systemd/system/v2ray1.service
sudo nano /etc/systemd/system/v2ray1.service

修改 ExecStart 为使用 config1.json:

ExecStart=/usr/local/bin/v2ray run -config /home/yonghuiwang/data/v2ray/config1.json

创建 v2ray2.service 配置文件:

sudo cp /etc/systemd/system/v2ray.service /etc/systemd/system/v2ray2.service
sudo nano /etc/systemd/system/v2ray2.service

修改 ExecStart 为使用 config2.json:

ExecStart=/usr/local/bin/v2ray run -config /home/yonghuiwang/data/v2ray/config2.json

2.	启动和停止不同的服务:
•	启动 config1.json 配置文件的 V2Ray 服务:

sudo systemctl start v2ray1

•	启动 config2.json 配置文件的 V2Ray 服务:

sudo systemctl start v2ray2

这样,你可以灵活地根据需求切换不同的配置。

3.	管理服务:

使用 systemctl 命令来查看、停止或重启这些服务:

sudo systemctl status v2ray1
sudo systemctl status v2ray2
sudo systemctl stop v2ray1
sudo systemctl stop v2ray2

  1. 使用脚本动态传递配置文件路径

你还可以创建一个简单的脚本来启动 V2Ray 并动态指定配置文件路径。这样你可以通过命令行快速启动并切换不同的配置文件。

示例脚本:

创建一个名为 start_v2ray.sh 的脚本:

nano ~/start_v2ray.sh

在脚本中添加以下内容:

#!/bin/bash

CONFIG_FILE=$1

if [ -z “$CONFIG_FILE” ]; then
echo “请指定配置文件路径,例如:./start_v2ray.sh /path/to/config.json”
exit 1
fi

/usr/local/bin/v2ray run -config $CONFIG_FILE

使用脚本:
1. 给脚本添加执行权限:

chmod +x ~/start_v2ray.sh

2.	使用脚本启动 V2Ray,传递不同的配置文件路径:

~/start_v2ray.sh /home/yonghuiwang/data/v2ray/config1.json
~/start_v2ray.sh /home/yonghuiwang/data/v2ray/config2.json

这样,你可以在不同的时刻启动 V2Ray,并灵活指定不同的配置文件。

  1. 修改 systemd 服务文件中的 ExecStart 以支持动态配置

如果你不想每次都修改服务文件,可以在 systemd 服务文件中使用环境变量来传递配置文件路径。然后,你可以在运行时通过环境变量来切换不同的配置文件。

步骤:
1. 修改 /etc/systemd/system/v2ray.service 中的 ExecStart,例如:

ExecStart=/usr/local/bin/v2ray run -config $V2RAY_CONFIG

2.	创建环境文件 /etc/systemd/system/v2ray.service.d/env.conf,并添加环境变量 V2RAY_CONFIG:

sudo mkdir -p /etc/systemd/system/v2ray.service.d
sudo nano /etc/systemd/system/v2ray.service.d/env.conf

内容:

[Service]
Environment=V2RAY_CONFIG=/home/yonghuiwang/data/v2ray/config1.json

3.	使用不同的配置时,修改 /etc/systemd/system/v2ray.service.d/env.conf 文件中的 V2RAY_CONFIG 环境变量为不同的配置文件路径,然后重新加载并重启服务:

sudo systemctl daemon-reload
sudo systemctl restart v2ray

总结:
• 多个 systemd 服务文件:适合长期需要不同配置的场景,比较容易管理。
• 脚本动态传递配置:适合临时使用不同配置的需求,操作简单。
• systemd 环境变量:适合通过修改环境变量灵活切换配置,但需要重新加载服务。

根据你的需求,你可以选择最适合的方法。

5月 06, 2025
4月 06, 2025
ufw
3月 10, 2025