1.v2ray简介

使用v2ray可以很方便的构建代理,理解v2ray的核心是理解v2ray的数据流向,理解了v2ray的流向,配置就简单了

详细可以参考v2ray官方文档新 V2Ray 白话文指南v2ray GitHub

image-20230323110843442

浏览器输入www.google.com,然后浏览器以socks协议将数据转化并发送给v2ray客户端(客户端的inbond),之后v2ray客户端(客户端的outbond)以vmess协议将数据转化并发送给v2ray服务器端(服务器端inbond),之后v2ray服务器再将数据解密(vmess协议加密的数据)并发送给目标网站,完成整个请求过程。

2.docker安装v2ray

参考:Docker 部署 V2Ray

使用docker-compose部署docker,需要注意的是:

  1. 如果没有指定网络,会默认生成一个$(docker-compose所在目录的网络)_default,参考透過 Docker Compose 設定 network
  2. mkcp协议使用udp传输,因此要绑定udp,如果用tcp,可以不指定
  3. v2ray 5默认配置文件位置不再是/etc/v2ray/config.json,因此需要加入command
cd /data/docker_data
mkdir v2ray
cd v2ray
mkdir log
mkdir config
docker network create all_net
vi docker-compose.yml
version: "3"

services:
  v2ray:
    image: v2fly/v2fly-core
    container_name: v2ray
    restart: on-failure:3
    volumes:
      - /data/docker_data/v2ray/config/config.json:/etc/v2ray/config.json
      - /data/docker_data/v2ray/log:/var/log/v2ray
    command: "run -config=/etc/v2ray/config.json"
    ports:
      - "6038:6038"
      - "6038:6038/udp"
    environment:
      - TZ=Asia/Shanghai
networks:
  default:
    name: all_net
    external: true
docker-compose up -d
docker-compose logs

3.三种常用配置

v2ray配置文件在线生成

v2ary常用配置模板集合

UUID生成器

3.4.VMESS+TCP

服务器端配置:

{
    "log": {
        "access": "/var/log/v2ray/access.log",
        "error": "/var/log/v2ray/error.log",
        "loglevel": "warning"
    },
    "inbound": {
        "port": 12345,
        "protocol": "vmess",
        "settings": {
            "clients": [
                {
                    "id": "cb76a5c7-51e5-84d1-d0ff-da110e3f3c32"
                }
            ]
        }
    },
    "outbound": {
        "protocol": "freedom",
        "settings": {}
    },
    "inboundDetour": [],
    "outboundDetour": [
        {
            "protocol": "blackhole",
            "settings": {},
            "tag": "blocked"
        }
    ],
    "routing": {
        "strategy": "rules",
        "settings": {
            "rules": [
                {
                    "type": "field",
                    "ip": [
                        "0.0.0.0/8",
                        "10.0.0.0/8",
                        "100.64.0.0/10",
                        "127.0.0.0/8",
                        "169.254.0.0/16",
                        "172.16.0.0/12",
                        "192.0.0.0/24",
                        "192.0.2.0/24",
                        "192.168.0.0/16",
                        "198.18.0.0/15",
                        "198.51.100.0/24",
                        "203.0.113.0/24",
                        "::1/128",
                        "fc00::/7",
                        "fe80::/10"
                    ],
                    "outboundTag": "blocked"
                }
            ]
        }
    }
}

客户端配置:

image-20230325121843667

image-20230325121746728

3.2.vmess+mkcp

vmess+mkcp,mkcp对于丢包严重的网络进行了优化,同时可以伪装(BT下载,视频通话),伪装不代表你可以为所欲为,保持个人的判断,对信息有明确的甄别,学习先进的技术才是根本

服务器端配置:

{
        "log": {
                "access": "/var/log/v2ray/access.log",
                "error": "/var/log/v2ray/error.log",
                "loglevel": "warning"
        },
        "inbound": {
                "port": 6038,
                "protocol": "vmess",
                "settings": {
                        "clients": [{
                                "id": "4552a7f9-dc8d-a0c9-422f-032ea2a3783f"
                        }]
                },
                "streamSettings": {
                        "network": "kcp",
                        "kcpSettings": {
                                "header": {
                                        "type": "srtp"
                                }
                        }
                }
        },
        "outbound": {
                "protocol": "freedom",
                "settings": {}
        },
        "inboundDetour": [],
        "outboundDetour": [{
                "protocol": "blackhole",
                "settings": {},
                "tag": "blocked"
        }],
        "routing": {
                "strategy": "rules",
                "settings": {
                        "rules": [{
                                "type": "field",
                                "ip": [
                                        "0.0.0.0/8",
                                        "10.0.0.0/8",
                                        "100.64.0.0/10",
                                        "127.0.0.0/8",
                                        "169.254.0.0/16",
                                        "172.16.0.0/12",
                                        "192.0.0.0/24",
                                        "192.0.2.0/24",
                                        "192.168.0.0/16",
                                        "198.18.0.0/15",
                                        "198.51.100.0/24",
                                        "203.0.113.0/24",
                                        "::1/128",
                                        "fc00::/7",
                                        "fe80::/10"
                                ],
                                "outboundTag": "blocked"
                        }]
                }
        }
}

客户端配置:

image-20230325121211275

image-20230325121014442

3.3.WebSocket+TLS+Web

3.3.1.配置v2ray

docker-compose.yml,不再开放端口

version: "3"

services:
  v2ray:
    image: v2fly/v2fly-core
    container_name: v2ray
    restart: on-failure:3
    volumes:
      - /data/docker_data/v2ray/config/config.json:/etc/v2ray/config.json
      - /data/docker_data/v2ray/log:/var/log/v2ray
    command: "run -config=/etc/v2ray/config.json"
    environment:
      - TZ=Asia/Shanghai
networks:
  default:
    name: all_net
    external: true

服务器端配置:

{
    "log": {
        "access": "/var/log/v2ray/access.log", 
        "error": "/var/log/v2ray/error.log", 
        "loglevel": "warning"
    }, 
    "inbounds": [
        {
            "port": 10000,  
            "protocol": "vmess", 
            "settings": {
                "clients": [
                    {
                        "id": "b831381d-6324-4d53-ad4f-8cda48b30811"
                    }
                ]
            }, 
            "streamSettings": {
                "network": "ws", 
                "wsSettings": {
                    "path": "/ray"
                }
            }
        }
    ], 
    "outbounds": [
        {
            "protocol": "freedom", 
            "settings": { }
        }
    ]
}
3.3.2.安装NPM
cd /data/docker_data
mkdir npm
cd npm
mkdir letsencrypt
mkdir data
vi docker-compose.yml
version: '3'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: npm
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    environment:
      - TZ=Asia/Shanghai
networks:
  default:
    name: all_net
    external: true    
docker-compose up -d
docker-compose logs
3.3.3.进入NPM设置

浏览器输入http://域名:81进入后台管理页面,默认用户名/密码为admin@exampel.com/changeme,登陆后需要修改密码,建议用密码生成工具生成强密码

image-20230326085237745

image-20230325130309828

3.3.4.客户端配置

image-20230326085718252

3.3.5. 常见异常

[Warning] [3354002692] app/proxyman/outbound: failed to process outbound traffic > proxy/vmess/outbound: failed to find an available destination > common/retry: [transport/internet/websocket: failed to dial WebSocket > transport/internet/websocket: failed to dial to (wss://xxx.xxx.top/ray): > read tcp 192.168.31.95:1523->xxx.xxx.xxx.xxx:443: wsarecv: An existing connection was forcibly closed by the remote host.

客户端发生上述错误后,查看VPS端NPM日志,发现没有接到任何客户端的请求(说明不是v2ray的错误,因为NPM还没有转发请求)

客户端配置传输层安全为空后,发现NPM日志接收到了客户端的请求,不过是http的(说明问题发生在https上,要么vps 443端口没开,要么证书有问题)

经过排查后,发现443端口是开放的,然后NPM重新申请证书,还是不可以,最后更换域名重新申请证书后,问题解决。