VPS

V2ray和中转基础指南

ssr,ss,vps

Views:  times Updated on April 4, 2023 Posted by elmagnifico on August 14, 2018

Foreword

之前一直用ss或者ssr,但是由于其热度逐年增高导致目前防火墙也会针对这两个协议,为了更安全更自由的翻墙,那么有必要使用一些其他手段。

https://www.v2ray.com/

V2Ray 是 Project V 下的一个工具。Project V 是一个包含一系列构建特定网络环境工具的项目,而 V2Ray 属于最核心的一个。 官方中介绍Project V 提供了单一的内核和多种界面操作方式。内核(V2Ray)用于实际的网络交互、路由等针对网络数据的处理,而外围的用户界面程序提供了方便直接的操作流程。不过从时间上来说,先有 V2Ray 才有 Project V。 如果还是不理解,那么简单地说,V2Ray 是一个与 Shadowsocks 类似的代理软件,可以用来科学上网(翻墙)学习国外先进科学技术。

SETUP

先记录一下如何安装,使用的是CentOS 7

bash <(curl -L -s https://install.direct/go.sh)

运行该指令下载并安装 V2Ray。当 yum 或 apt-get 可用的情况下,此脚本会自动安装 unzip 和 daemon。这两个组件是安装 V2Ray 的必要组件。如果你使用的系统不支持 yum 或 apt-get,请自行安装 unzip 和 daemon

yum install zip unzip
yum update -y && yum install curl -y

一般来说就能正常安装了,如果还有其他问题可以去手册上看,用的人也多各种解决方法也有。

然后 /etc/v2ray/config.json 是V2ray的配置文件

运行 service v2ray start 来启动 V2Ray 进程

使用下面的命令控制 V2Ray 的运行:

sudo systemctl start v2ray
sudo systemctl stop v2ray
sudo systemctl restart v2ray
sudo systemctl status v2ray

CONFIG

记录一下v2ray的服务器配置

{
  "log" : {
    "access": "/var/log/v2ray/access.log",
    "error": "/var/log/v2ray/error.log",
    "loglevel": "warning"
  },
  "inbound": {
    "port": 4396,
    "protocol": "vmess",
    "settings": {
      "clients": [
        {
          "id": "asdfoij2-712b-4b19-b3ab-fasdfksadf0",
          "level": 1,
          "alterId": 64
        }
      ]
    }
  },
  "inboundDetour":[
    {
      "protocol":"shadowsocks",
      "port":1207,
      "settings":{
        "method":"aes-256-cfb",
        "password":"password",
        "udp":true
       }
    }
  ],

  "outbound": {
    "protocol": "freedom",
    "settings": {}
  },
  "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"
        }
      ]
    }
  }
}

首先v2ray使用的是json的格式,所以很容易修改。

可以使用下面的命令来检查你写的json格式是否正确:

/usr/bin/v2ray/v2ray -test -config /etc/v2ray/config.json

log中的access记录的是连接的情况,而error则是记录的程序启动关闭以及各种出错的情况。

我这里支持了两种协议,一个是v2ray自带的vmess一个是shadowssocks,在shadowssocks中开启了udp支持。

vmess

使用vmess协议只要设定好端口和各id就行了。

这里的id不是随便填的,可以在下面的网址生成随机的id,作为密钥。

https://www.uuidgenerator.net/

其他要连入这个vmess的用户就是靠这个id来连接的,同一个id可以多人同时使用。

alterId

一般建议服务器和客户都都配置的相同,但是不同也一样可以正常工作,这个不是bug。

时间同步

vmess有一个要求服务器和客户都时间同步的,时间不要求一模一样,但是要至少保证时间差在1分钟以内。

首先执行

rm /etc/localtime

然后执行

ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

就可以时区设置为东八区,如果还有时间差,手动设置时间

date --s "07/30/2017 17:32:59"

当然如果想要更准确的时间,那就要去参考ntpdate来获取更加准确的时间,一般来说上面的方法就已经够用了。

shadowsocks

V2ray他并不是一个单一的协议,他同时可以开启很多其他的协议,更多的协议则需要写在 inboundDetour 中

所以这里加配了一个shadowsocks,使用端口1207,并且开启了udp,这样使用shadowsocks的客户端就能直接翻墙了。

通过上面的配置就可以达到既可以使用v2ray自带的客户端也可以使用shadowsocks来翻墙。

需要注意修改了config配置以后需要重启服务端与客户端才能正常工作。

国内中转

有些时候使用人的网络情况并不相同,如果只有一个国外vps的话,那么就会出现不同网络运营商连接到同一个vps,使用体验会一个天上一个地下,为了缓解这种情况,或者说改变使用者网络环境,可以先让国内使用者连接到一个国内的vps上,然后再统一通过国内的vps将其消息转发到国外的vps,通过这样中转一下让翻墙体验的差别控制在国内网络差异的范围内。

要做到国内中转就需要在国内的vps上也开启v2ray,然后修改转出的部分,不再是free,而是指向国外的vps。

"outbound": {
  "protocol": "vmess",
  "settings": {
    "vnext": [
      {
        "address": "xxx.xx.xx.x",
        "port": 4396,
        "users": [
          {
            "id": "a23sa2-712b-4b19-b3ab-f1sdf1fsdba70",
            "alterId": 64,
            "security": "aes-128-gcm"
          }
        ]
      }
    ]
  }
},

这里有一份参考别人的配置,他就是多个入口通过国内腾讯云中转,然后到国外vps,进而翻墙。 (我这里出现了一个小问题:我腾讯云是1m带宽,理论上通过中转以后我的带宽应该被限制在1m以内,然而实际上并没有,略小于不中转的方案,不知道是不是腾讯云的漏洞)

  • 使用socks作为主传入连接,该连接可进行游戏加速或者透明代理
  • 包含一个额外的vmess传入连接,该连接可进行路由选择(国内直连,国外中转)
  • 包含一个额外的ss传入连接,该连接会把所有数据转发到墙外服务器(即全部中转)
  • socks配置中,如果开启UDP,需使用腾讯云服务器的内网IP,而不是公网IP。
{
  "log" : {
    "access": "/var/log/v2ray/access.log",
    "error": "/var/log/v2ray/error.log",
    "loglevel": "warning"
  },
  "inbound": {
    "port": 8866,
    "listen": "0.0.0.0",
    "protocol": "socks",
    "settings": {
      "auth": "password",
      "accounts": [
        {
          "user": "my-socks",
          "pass": "my-password"
        }
      ],
      "udp": true,
      "ip": "腾讯云内网IP地址"
    },
    "tag": "socks-in"
  },
  "outbound": {
    "protocol": "shadowsocks",
    "settings": {
      "servers": [
        {
          "email": "ss2@v2ray.com",
          "address": "225.255.255.255",
          "port": 6656,
          "method": "aes-256-cfb",
          "password": "my-password",
          "ota": false
        }
      ]
    },
    "tag": "ss-out"
  },
  "inboundDetour": [
    {
      "port": 8800,
      "listen": "0.0.0.0",
      "protocol": "vmess",
      "settings": {
        "clients": [
          {
            "id": "4119f123-3863-4d3e-aaf6-379fdda3a371",
            "level": 1,
            "alterId": 64,
            "email": "vmess@v2ray.com"
          }
        ]
      },
      "tag": "v2ray-in"
    },
    {
      "port": 8899,
      "listen": "0.0.0.0",
      "protocol": "shadowsocks",
      "settings": {
        "email": "ss1@v2ray.com",
        "method": "aes-256-cfb",
        "password": "my-password",
        "udp": true,
        "level": 0,
        "ota": false
      },
      "tag": "ss-in"
    }
  ],
  "outboundDetour": [
    {
      "protocol": "freedom",
      "settings": {},
      "tag": "direct"
    },
    {
      "protocol": "blackhole",
      "settings": {},
      "tag": "blocked"
    },
    {
      "protocol": "vmess",
      "settings": {
        "vnext": [
          {
            "address": "v2ray.cool",
            "port": 10086,
            "users": [
              {
                "id": "a3482e88-686a-4a58-8126-99c9df64b7bf",
                "alterId": 64,
                "security": "auto"
              }
            ]
          }
        ]
      },
      "mux": {
        "enabled": true
      },
      "tag": "v2ray-out"
    }
  ],
  "dns": {
    "servers": [
      "114.114.114.114",
      "114.114.115.115",
      "localhost"
    ]
  },
  "routing": {
    "strategy": "rules",
    "settings": {
      "domainStrategy": "IPIfNonMatch",
      "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"
        },
        {
          "type": "field",
          "inboundTag": [
            "ss-in"
          ],
          "outboundTag": "ss-out"
        },
        {
          "type": "field",
          "domain": [
            "baidu.com",
            "qq.com"
          ],
          "outboundTag": "direct"
        },
        {
          "type": "chinaip",
          "outboundTag": "direct"
        },
        {
          "type": "chinasites",
          "outboundTag": "direct"
        }
      ]
    }
  }
}

2023.4.4 中转还有更简单一些的配置

首先在inbouds中的配置上加一个tag

	"inbounds": [
		{
			"tag": "mid-in",

增加一个outbounds,里面是落地的配置,同样也加一个tag

	"outbounds": [
			{
			"tag": "mid",
			"port": 443,
			"protocol": "vmess",
			"settings": {

最后的路由中加一个规则,一切从mid-in进来的流量全都走mid出去,就直接完成了中转的操作

	"routing": {
		"domainStrategy": "IPOnDemand",
		"rules": [
			{
				"type": "field",
				"inboundTag": [
				  "mid-in"
				],
				"outboundTag": "mid"
			},

如果有多个入口,记得每个都要指定出口,否则会出现默认走第一个

客户端

v2rayN

有了v2ray服务端,自然还需要一个客户端。v2ray本身是有windows的release版本的,但是由于是console的模式,不是很好用,所以有个UI会更好一点。

我试用了v2ray上推荐的一些客户端,目前只有v2rayN算是比较好用的了。

直接导入配置,就按照上面的服务器的配置方式,填入各个参数即可,然后重启服务器即可使用。

有几个问题需要注意,v2rayN会自动设置对应的internet里的局域网设置,退出的时候会自动恢复。

v2rayN同时也支持扫描二维码导入/导出配置(勾选显示分享内容),当然剪贴板导入配置也是可以的。

v2rayNG

有了windows版本的,还需要一个安卓版本的,v2rayNG是比较不错的,可以直接扫描v2rayN的配置导入,然后也可以只使用shadowsocks,算是比较好用的了。

Summary

v2ray基本就是这些了,日后还有什么再补充,更高阶的配置需要查看v2ray的手册来,一两句也说不清。

Quote

https://www.v2ray.com/ui_client/windows.html

https://toutyrater.github.io/basic/vmess.html

https://www.daehub.com/archives/2156.html

https://www.hyperapp.fun/zh/proxy/V2ray+Websocket.html

https://axu.me/linux/20170820/cvm-v2ray.html