配置V2ray

下列操作均基于5.16.1版本V2ray。

首先是开幕雷击:

/etc/systemd/system/v2ray.service: Special user nobody configured, this is not safe!

原因是默认的 v2ray.service 中配置 User=nobody ,新版systemd并不建议这么做,建议使用 DynamicUser=yes ,然后必须:

sudo systemctl daemon-reload

不要忘了:

sudo systemctl enable v2ray.service

在5.1.0版本就有有人在GitHub上发issue了↗,但并没有什么回应。

在配置开始前前注意,V2Ray 对于时间有比较严格的要求,要求服务器和客户端时间差绝对值不能超过90秒,与时区无关。配置文件使用JSON格式↗但从 v2.11 起新增了一个注释功能,配置文件允许 // 和 /**/ 注释↗,此注释格式不包含在JSON 的标准格式内,因此JSON编辑器对此注释格式不兼容,会报错。

首先是较复杂的客户端配置↗,位置在/usr/local/etc/v2ray/config.json

{
  "inbounds": [
    {
      "port": 1080, // 监听端口
      "protocol": "socks", // 入口协议为 SOCKS 5,此外还支持HTTP
      "sniffing": {
        "enabled": true,
        "destOverride": ["http", "tls"]
      },
      "settings": {
        "auth": "noauth"  //认证设置,noauth 代表不认证,由于客户端通常处于内网环境,所以这里不认证
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "vmess", // 出口协议
      "settings": {
        "vnext": [
          {
            "address": "serveraddr.com", // 服务器地址,填入IP或域名
            "port": 16823,  // 服务器端口
            "users": [
              {
                "id": "b831381d-6324-4d53-ad4f-8cda48b30811",  // 用户 ID,必须与服务器端配置相同
                "alterId": 0 // 此处的值也应当与服务器相同
              }
            ]
          }
        ]
      }
    }
  ]
}

具体的内容格式还是需要参照官方手册↗

此处记不清外部地址可以使用下列命令:

curl ip.sb

ip.sb是一个免费网站,还请不要滥用,另外还有在线UUID生成工具

下面是服务端配置,位置同样在/usr/local/etc/v2ray/config.json

{
  "inbounds": [
    {
      "port": 16823, // 服务器监听端口
      "protocol": "vmess",    // 主传入协议
      "settings": {
        "clients": [
          {
            "id": "b831381d-6324-4d53-ad4f-8cda48b30811",  // 用户 ID,客户端与服务器必须相同
            "alterId": 0
          }
        ]
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",  // 主传出协议
      "settings": {}
    }
  ]
}

配置完成后可以使用如下命令测试:

客户端入站使用http协议
curl -x http_proxy://x.x.x.x:1080 ip.sb
客户端入站使用socks5协议
curl -x socks5://x.x.x.x:1080 ip.sb

注意,curl代理选项-x默认使用http协议。

服务器端配置与客户端类似,从此可以看到v2ray的通用设计思路,但出站协议支持表和入站支持表有所不同。

入站:SOCKS、VMess、VLite、Shadowsocks、HTTP、Dokodemo、Trojan、VLESS

出战:SOCKS、VMess、VLite、Shadowsocks、Shadowsocks2022、Freedom、Loopback、Blackhole、DNS、Trojan、VLESS

可以显著的看到其中不同协议体现出的设计,即传输只设计了vmess这一底层协议,其他以兼容为主,加密主要依赖TLS。具体的协议解释请参照Proxy 代理协议↗

更详细的配置请参考高级篇↗

最后,别忘记打开对应端口:

打开服务器端口
sudo ufw allow 16823
打开客户端端口
sudo ufw allow 1080

如果更追求安全,可以先确定自身所在网络的NAT出口IP,一般其前两位很稳定,所以可以根据这个特征放行特定IP。

获取外部地址
curl ip.sb
服务器放行对应IP
sudo ufw allow from x.x.0.0/16 to any port 16823
测试
curl -x x.x.x.x:1080 ip.sb