【Network】V2Ray

Posted by 西维蜀黍 on 2022-03-29, Last Modified on 2023-10-27

Install

Server

Refer to https://www.v2fly.org/guide/install.html#macos-%E5%AE%89%E8%A3%85%E6%96%B9%E5%BC%8F

Linux

安装和更新 V2Ray

// 安装可执行文件和 .dat 数据文件
# sudo bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)

$ sudo systemctl enable v2ray; sudo systemctl start v2ray

Refer to https://github.com/v2fly/fhs-install-v2ray/blob/master/README.zh-Hans-CN.md

masOS

$ brew install v2ray

随命令一起下载的 geosite.dat 和 geoip.dat 放置在 /usr/local/share/v2ray/ 目录下。

Docker

docker run --rm v2fly/v2fly-core help

docker run --name v2ray v2fly/v2fly-core $v2ray_args (help, eun etc...)

docker run -d --name v2ray -v /path/to/config.json:/etc/v2fly/config.json -p 10086:10086 v2fly/v2fly-core run -c /etc/v2fly/config.json 

# If you want to use v5 format config
docker run -d --name v2ray -v /path/to/config.json:/etc/v2fly/config.json -p 10086:10086 v2fly/v2fly-core run -c /etc/v2fly/config.json -format jsonv5

Ref https://github.com/v2fly/docker

Config

Server

在 Linux 中,配置文件通常位于 /etc/v2ray//usr/local/etc/v2ray/ 目录下。运行 v2ray --config=/etc/v2ray/config.json,或使用 systemd 等工具将 V2Ray 作为服务在后台运行。

# 查看配置文件的路径
$ sudo systemctl status v2ray

配置

# 生成一个uuid,一替代下面的uuid
$ v2ray uuid 
$ sudo vim /usr/local/etc/v2ray/config.json
{
    "inbounds": [
        {
            "port": 10086, 
            "protocol": "vmess",
            "settings": {
                "clients": [
                    {
                        "id": "b831381d-6324-4d53-ad4f-8cda48b30811"
                    }
                ]
            }
        }
    ],
    "outbounds": [
        {
            "protocol": "freedom"
        }
    ]
}

服务器的配置中需要确保 id 和端口与客户端一致,就可以正常连接了。

Client

在你的 PC(或手机)中,需要用以下配置运行 V2Ray

$ vim ~/Downloads/v2ray.json
{
    "inbounds": [
        {
            "port": 1081, // SOCKS 代理端口,在浏览器中需配置代理并指向这个端口
            "listen": "127.0.0.1",
            "protocol": "socks",
            "settings": {
                "udp": true
            }
        }
    ],
    "outbounds": [
        {
            "protocol": "vmess",
            "settings": {
                "vnext": [
                    {
                        "address": "server", // 服务器地址,请修改为你自己的服务器 ip 或域名
                        "port": 10086, // 服务器端口
                        "users": [
                            {
                                "id": "b831381d-6324-4d53-ad4f-8cda48b30811"
                            }
                        ]
                    }
                ]
            }
        },
        {
            "protocol": "freedom",
            "tag": "direct"
        }
    ],
    "routing": {
        "domainStrategy": "IPOnDemand",
        "rules": [
            {
                "type": "field",
                "ip": [
                    "geoip:private"
                ],
                "outboundTag": "direct"
            }
        ]
    }
}

$ v2ray run -c /usr/local/share/v2ray/config.json

上述配置唯一要更改的地方是你的服务器 IP,配置中已注明。上述配置会把除局域网(比如访问路由器)以外的所有流量转发至你的服务器。

配置文件参数

https://www.v2ray.com/chapter_02/

运行

  • 在 Windows 和 macOS 中,配置文件通常是 V2Ray 同目录下的 config.json 文件。直接运行 v2rayv2ray.exe 即可。
  • 在 Linux 中,配置文件通常位于 /etc/v2ray//usr/local/etc/v2ray/ 目录下。运行 v2ray run -c /etc/v2ray/config.json,或使用 systemd 等工具将 V2Ray 作为服务在后台运行。
$ v2ray run -c /usr/local/share/v2ray/config.json

Logs

通过下面的配置,可以更好的debug

{
    "log": {
        "loglevel": "debug"
    }
}

路由

路由规则设定

Refer to https://toutyrater.github.io/routing/configurate_rules.html

GFWList 黑名单模式

{
  "routing": {
    "domainStrategy": "IPOnDemand",
    "rules": [
      // 第一条规则
      {
        "type": "field",
        "outboundTag": "proxy", // 代理的 tag
        "domain": ["ext:h2y.dat:gfw"] // 中国大陆网站
      },
      // 第二条规则
      {
        "type": "field",
        "outboundTag": "direct", // freedom 的 tag
        "network": "udp,tcp"
      }  
    ]
  }
}

如上面的配置,就是简单的白名单模式。规则从上往下一次匹配,首先是 ext:h2y.dat:gfw,这可以认为是 GWFList 的另一种形式,使用方式见域名文件小节。第一条规则中,outboundTag 是 proxy,则表明中国大陆网站直连。在第二条规则中,netwrok 为 udp,tcp,而且没有指定 domain 和 IP,这条规则本身表示所有流量,但是它位于第一条规则之后,也就是代表着除 GFWList 之外的所有域名都会匹配第二条规则,这样只指定了"network": “udp,tcp”,并且指定"outboundTag": “direct”,我们可以理解为上面所有规则都不匹配的情况下则默认为 direct。这正是前面说的黑名单模式:如果访问的网站被收录在 GFWList 里,那么访问这个网站会走代理,否则直连。这种黑名单模式我认为比较适合于主要上国内网站,只是偶尔上一下国外且是知名大公司的网站,这种情况下遇到不收录在 GFWList 的国外域名概率比较低。

这里解释一句,从 V2Ray 项目发起至今,有许多网友请求集成 GFWList,但 V2Ray 始终没有做,这是有原因的。一是因为 GFWList 是 GPL 许可,没法直接用;二是因为 Raymond 认为 GFWList 项目形式不利于维护(大致意思,不是原话)。

ChinaList 白名单模式

{
  "routing": {
    "domainStrategy": "IPOnDemand",
    "rules": [
      // 第一条规则
      {
        "type": "field",
        "outboundTag": "direct", // freedom 的 tag
        "domain": ["geosite:cn"] // 中国大陆网站
      },
      // 第二条规则
      {
        "type": "field",
        "outboundTag": "proxy",
        "network": "udp,tcp"
      }  
    ]
  }
}

如上面的配置,就是简单的白名单模式。规则从上往下一次匹配,首先是 geosite:cn,geosite 是 Project V 下 domain list community 项目生成的域名列表文件,收录了许多主要网站的域名,此处的 geosite:cn 表示其中收录的中国大陆网站的域名。第一条规则中,outboundTag 是 direct,则表明中国大陆网站直连。在第二条规则中,“network”: “udp,tcp”,并且指定"outboundTag": “direct”,即不匹配 ChinaList 时走代理。这正是前面说的白名单模式。这种白名单模式我认为比较适合于主要上国外网站的,国内的几乎是上大公司的网站,这种情况下遇到不收录在 geosite:cn 的国内域名概率比较低。

域名文件

外置的域名文件

很多时候,V2Ray 内置的国内域名不能满足使用。不过 V2Ray 可以使用外部自定义的像 geosite.dat 这样的域名文件,刚好我也制作了一个,可以供大家使用。

  1. https://github.com/ToutyRater/V2Ray-SiteDAT/tree/master/geofiles 下载 h2y.dat 文件放到 V2Ray 运行文件的目录下。

  2. 按需要写路由规则,格式为 “ext:h2y.dat:tag”。ext 表示使用外部文件;h2y.dat 是具体的文件名;tag 泛指标签,有哪些标签由文件提供。步骤 1 下载的 h2y.dat 文件目前只有 adgfw 两个标签,ad 包含着常见的广告域名,gfw 包含着常见的被 gfw 屏蔽的域名。它们各自所包含的域名在这里可以看到。这个域名文件每星期自动更新,如果你使用了我提供的域名文件也请定期更新(打开 https://github.com/ToutyRater/V2Ray-SiteDAT/tree/master/geofiles 看到的都是当时的最新版本)。路由配置示例如下。

  3. 运行 V2Ray。

    "rules":[
     {
         "type": "field",
         "outboundTag": "block", //拦截广告相关域名
         "domain": [
             "ext:h2y.dat:ad"
         ]
     },
     {
         "type": "field",
         "outboundTag": "proxy", //被 gfw 屏蔽的域名走代理
         "domain": [
             "ext:h2y.dat:gfw"
         ]
     },
     {
         "type": "field",
         "network":"tcp,udp",
         "outboundTag": "direct" // 默认直连
     }
    ]
    

    因为使用了 gfw 列表的用户,通常是想要默认情况下直连,但有时候习惯上在 outbounds 的第一个是代理的出站,所以在上面的配置中,最后加了一条直连的规则。那个

    network:"tcp,udp"
    

    是为了让所有流量都能匹配上。

生成 site.dat 文件

下载

使用:

# 修改/添加sites文件夹下的域名文件

# 运行,以生成geosite.dat
$ chmod 777 v2sitedat; ./v2sitedat 

# 把生成的 geosite.dat 重命名,并复制到 /usr/local/Cellar/v2ray/4.44.0/share/v2ray/ 下

Ref

DNS

Reference