v2ray高级篇①——认识配置文件

一、前言

本篇面向v2ray新手,主要介绍v2ray配置文件基本结构,不介绍v2ray如何配置各种协议,如果你已经对v2ray的配置文件比较熟悉了,想学习如何使用v2ray更高级的功能,那么请关注我的博客,这个系列将会逐步更新下去。

阅读本篇需要你先在服务器安装好v2ray,并且掌握如何在Linux中编辑文件。

如果未安装v2ray,请先看这篇文章:V2RAY新手搭建使用教程

如果不熟悉如何在Linux中编辑文件,请看这篇文章:VIM简单实用教程

二、JSON概述

本部分是看懂和编辑v2ray配置文件的基础,可以粗读,但是不能不读,若之后忘记了JSON基础,可以回来复习复习。如果你已经很熟悉JSON格式了,那么可以跳过本节。

v2ray目前主要使用JSON格式的配置文件来配置所有的功能,JSON是一种轻量级的数据传输格式,方便阅读、书写。

一个JSON配置文件只有两种大结构:JSON对象、JSON数组。意思就是一个JSON配置文件要么是一个JSON对象,要么是一个JSON数组。

JSON对象

一个JSON对象由一对大括号括起来,大括号内包含0个或若干个键值对键值对的格式为:键:值(中间是一个英文冒号,注意不要写成中文的冒号)。JSON对象中的每个键值对用一个逗号分隔(同样的,这个逗号也是英文的逗号),如下示例:

{"key1":"value1","key2":"value2","key3":"value3"}

如果都写在一行,这样可以压缩文件的体积,但是不便于书写和阅读,所以一般使用下面的格式,下面的格式和上面的格式对于程序来说是等价的,但是对人来说更方便进行书写和阅读。

{
  "key1": "value1",
  "key2": "value2",
  "key3": "value3"
}

可以看到,上面格式的大括号各占了一行,并且顶格书写,表示这是一个JSON对象。JSON对象中的每一个键值对比大括号缩进了两格,这样层次就更加鲜明,可以很好的反应上下两级的关系。键值对中间的冒号后加了一个空格(不要看成了中文冒号),是为了方便区分。一个键值对占一行,除了最后一个以外,每个键值对末尾都有一个逗号

键值对末尾的逗号尤其要注意,书写的时候经常会忘记加上逗号,或者在最后一个键值对后面加上了逗号,这都会导致v2ray读取配置文件失败。

键值对

键代表着一个配置的名称,通常是一个有意义的名称。

键值对的格式为:键:值,中间用英文冒号分隔,一个键必须是字符串,要用英文双引号括起来,比如以下的键值对的是错误的写法:

key: "value"
1: "value"
“key”: "value"

以下的则是正确的:

"key": "value"
"1": "value"

值代表着对应的的取值,可以有多种类型,包括:

  • 字符串:由英文双引号括起来,中间可以写任何内容,例如:“address”: “blog.sprov.xyz”
  • 布尔值:只有truefalse两种,代表真和假。例如:“enable”: true
  • 数值:写一个数字即可,例如:“money”: 100
  • 一个JSON对象:没错,值也可以是一个JSON对象,例如:“another json”: { … }
  • 一个JSON数组:同样的,值也可以是一个JSON数组,例如:“json array”: [ … ]

以上JSON对象和JSON数组括号里的是省略号,表示省略里面的内容了,并不是真的这么写。

JSON数组

一个JSON数组用一对中括号括起来,中括号内包含多个,每一个之间用逗号分隔,最后一个值后面没有逗号,举例:

[123, "abc", false, { ... }, [ ... ]]

没错,数组里面也可以嵌套更多的JSON对象和JSON数组。

将各种类型混合起来放入JSON数组里阅读性会大大降低,并且配置也太过复杂,一般都会通过良好的配置文件设计来避免这些问题。

所以一般来说,一个JSON数组里面包含的类型是单一的,比如要么都是字符串,要么都是数字,要么都是布尔值,要么都是JSON对象,要么都是JSON数组。

以下是JSON数组举例:

["abc", "bcd", "cde"]
[1, 2, 3, 4, 5]
[true, false, true, false]
[{ ... }, { ... }, { ... }]
[[ ... ], [ ... ], [ ... ]]

三、v2ray配置文件

好了,说了这么多,该进入这篇文章的正题了,首先v2ray的配置文件默认的路径为 /etc/v2ray/config.json,如果你不是通过官方一键脚本安装的,那么有可能配置文件不在这个位置,可以先检查一下配置文件是否在这个位置:

cat /etc/v2ray/config.json

运行上面的命令,如果配置文件在这个位置的话,那么就会输出配置文件的内容。如果不在,那就会提示你 cat: /etc/v2ray/config.json: No such file or directory。

如果配置文件不存在的话,请到你使用的一键脚本的文档弄清楚配置文件的路径,这里我无法给出解决方案。

以下是我安装的v2ray的配置文件的内容,你的跟我的肯定会有些不一样,但是基本结构肯定是一样的。

{
  "inbounds": [{
    "port": 39961,
    "protocol": "vmess",
    "settings": {
      "clients": [
        {
          "id": "7f8fe42e-5f85-4c61-9b4a-9792229439a6",
          "level": 1,
          "alterId": 64
        }
      ]
    }
  }],
  "outbounds": [{
    "protocol": "freedom",
    "settings": {}
  },{
    "protocol": "blackhole",
    "settings": {},
    "tag": "blocked"
  }],
  "routing": {
    "rules": [
      {
        "type": "field",
        "ip": ["geoip:private"],
        "outboundTag": "blocked"
      }
    ]
  }
}

配置文件基本结构

根据上面的配置文件内容可以看到,v2ray配置文件是一个JSON对象,其中包含了名称为inboundsoutboundsrouting的键值对,inboundsoutbounds的值是一个JSON数组,routing的值是一个JSON对象。

一个完整的v2ray的配置文件格式如下:

{
  "log": {},
  "api": {},
  "dns": {},
  "stats": {},
  "routing": {},
  "policy": {},
  "reverse": {},
  "inbounds": [],
  "outbounds": [],
  "transport": {}
}
  • log:日志配置,配置v2ray如何输出日志。
  • api:远程控制API,没有配置则不开启远程控制。
  • dns:内置的DNS服务器,没有配置则不开启。
  • stats:统计信息,没配置则不统计信息。
  • routing:路由配置,官方一键脚本会生成默认的配置。
  • policy:本地策略,可为不同等级的用户设置不同的策略,默认所有用户都相等。
  • inbounds(重要):一个JSON数组,配置入站协议,每一个入站协议就是一个JSON对象,官方一键脚本会自动生成一个VMess入站协议,并且随机设置端口和UUID。
  • outbounds:一个JSON数组,配置出站协议,每一个出站协议就是一个JSON对象,默认使用freedom出站协议。
  • transport:配置全局的底层传输方式。

v2ray官方在2018.11.05更新版本v4.1后对配置文件的格式稍微做了些调整,我上面所写的是v4.1之后的新格式,之后的教程也都会基于新格式。如果你仍然使用的是旧版本的格式,推荐你尽快升级到新格式,虽然目前新版本的v2ray还兼容旧格式的配置文件,但是v2ray官方表示将来会不再支持旧格式。

如何确定自己的配置文件是新格式还是旧格式呢,如果你是在2018年11月5日之后用官方脚本装的v2ray,或者看我的教程装的v2ray,那肯定是新格式。如果不确定的话,可以使用下面的命令直接重装一遍最新版本,注意这会导致你之前的配置文件被删除

rm /etc/v2ray/config.json -f
bash <(curl -L -s https://install.direct/go.sh) -f

inbounds

inbounds用来配置入站协议,说白了就是配置用什么协议去连接v2ray,并且配置协议的细节,比如添加一个VMess入站协议,也是默认的v2ray协议,至少需要配置一个端口(port)、一个用户ID(id)和一个额外ID(alterId),这样,你就可以用这些信息来连接v2ray了。

"inbounds": [{
  "port": 39961,
  "protocol": "vmess",
  "settings": {
    "clients": [
      {
        "id": "7f8fe42e-5f85-4c61-9b4a-9792229439a6",
        "alterId": 64
      }
    ]
  }
}]

我们可以看到inbounds是一个数组,数组中每一个JSON对象就是一个inbound,说明可以配置多个入站协议,每一个入站协议包含portprotocolsettingsport用来配置这个协议使用的端口,protocol用来配置选用哪个入站协议,这里是vmess协议,而settings则是配置协议的细节,可以看到是一个JSON对象,不同的协议的配置内容不一样,但是都可以用JSON对象来表达。

vmess协议的settings里包含一个clients数组,每一个client是一个JSON对象,配置了idalterId两个连接所需要的信息,那么实际上可以配置多个client,也就是vmess的单端口多用户,这样就可以在同一个端口使用不同的id了。

四、总结

以上就是对v2ray配置文件的基本介绍,之后我会着重于inbounds(重点)、outbounds、routing等配置来阐述如何更优秀的使用v2ray。

这篇文章有 2 个评论

  1. 头像

    求更新

  2. 头像

    博主还更新嘛

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

关闭菜单