Project V 是一个工具集合,它可以帮助你打造专属的基础通信网络。Project V 的核心工具称为V2Ray,其主要负责网络协议和功能的实现。

Project V is a set of network tools that helps you to build your own computer network. It secures your network connections and thus protects your privacy.

V2Ray手册

你知道V2ray吗?V2ray最近为什么这么火?说到V2ray大家肯定都不陌生,但是你知道V2ray到底是什么吗?相信大家对V2ray都很熟悉,V2ray就是我们每天都会经常遇到的,但是V2ray是怎么回事呢?今天小编就带大家来看看究竟是怎么一回事。

开始之前

声明

本指南仅用于学习V2Ray+TLS+WebSockets的原理,丰富网络经验,请勿用于搭建通信信道尤其是商业性质的国际通信信道。违反此规定所产生的一切后果由个人承担,感谢理解。

官方文档

Project V是一个成熟的项目,有着完善的官方文档。这些文档结构完整,通俗易懂并有很多案例,在实用性和规范性上远远超过本文,建议传送至官方文档查看:

传送锚点:V2fly官方白话文指南

由于严重的地脉阻塞,这两个锚点无法在geoip:cn地区打开

项目地址

本文所使用的工具均为官方工具,这些东西可以在GitHub上找到。使用这些工具需要能直面电脑的命令行,至少不会看到命令行就头痛。

由于官方对移动端的适配并不好,所以请自行使用更加方便的第三方app解决。

传送锚点:GitHub

由于轻微的地脉阻塞,这个锚点有时无法在geoip:cn地区打开。

镜像锚点:https://github.astrophel.org

刚刚开始

准备

由于本文的特殊性,在此默认你具有基础的网络知识。

部署V2Ray+TLS+WebSockets之前,我们要准备好一些东西:

少量摩拉、域名一个(建议在cloudflare购买)、位于非中国大陆地区的服务器一台、合适的文本编辑器一个

服务器建议使用Debian GNU/LinuxUbuntu。当然,Windows server或Mac OS服务器也可以(?

选择一个喜欢的二级域名添加A记录解析到服务器IP,直接使用一级域名也不是不行。

以上步骤可以在网上找到丰富的教程。

准备好了

使用任意方式连接服务器,比如ssh。建议使用root账户,然后部署nginx或Apache。

这是最好的方式,不过有点麻烦。所以我会用宝塔面板代替。

在宝塔官网寻找合适的安装脚本执行安装:https://www.bt.cn/new/download.html。安装时间会比较长,请耐心等待。

A few Moments Later

根据安装完成的指示登陆宝塔面板,在LNMP安装页面仅安装nginx即可。多装了也没事

核心内容

再识V2ray

V2ray是一个很特殊的软件,它并不是传统意义上的服务端——客户端架构。事实上,v2ray的服务端和客户端是同一个软件,区别他们的只有配置文件。

v2ray使用的网络传输协议是vmessvless,本文是基于vmess的。传统意义上的vmess采用TCP协议进行传输,由客户端指定加密并由服务器自动适配。aes-128位加密已经足够安全,但vmess这种小众的TCP流量比较容易辨认,不需要解密也知道你在做什么。

对此,使用一种足以帮助我们隐藏自己的传输方式就显得非常重要。WebSockets是一种不错的选择。

WebSocket是一种在单个TCP连接上进行全双工通信的协议,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

WebSocket百科

WebSocket,允许服务端主动向客户端推送数据,而且是html5标准中很常见的协议,甚至可以配合内容分发网络(CDN),再适合不过了。

TLS,中文名安全传输层协议,是现代互联网主要的信任机制,也是https协议的基础。这个协议可以让我们更好的保护信息安全,也让我们更像普通网页。

至此,你应该明白我们为什么需要V2Ray+TLS+WebSockets了吧。

配置过程——服务端

下载安装:

curl -O https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh
bash install-release.sh

首先打开宝塔面板,创建一个网站,域名使用解析到服务器上的域名。然后上传自己申请的ssl证书。申请方法为使用freessl.cn。该站可以免费申请为期一年的ssl证书。如果不想麻烦,可以使用宝塔面板的let's encrypt免费证书。部署完成后开启强制https。

然后打开站点设置——配置文件——在最后一个大括号前加入如下代码:

 location /ws {
      proxy_redirect off;
      proxy_pass http://127.0.0.1:10086;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_set_header Host $host;
      # Show real IP in v2ray access.log
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

/ws可以替换成自己想要的名字,端口10086可以换成自己想要的端口

配置样例

这段配置文件的目的是把所有对/ws目录的请求转发至设置的端口。代码中是10086,图中则是100

随后打开v2ray的配置文件。该文件默认在/usr/local/etc/v2ray目录。

将目录中内容替换成如下代码:

{
    "inbound": {
        "streamSettings": {
            "network": "ws", 
            "wsSettings": {
                "path": "/ws/", 
                "headers": {
                    "Host": "your host address"
                }
            }
        }, 
        "protocol": "vmess", 
        "port": 1108,       
        "settings": {
            "clients": [
                {
                    "alterId": 0, 
                    "id": "0752ffa1-ea16-4f74-9e61-784949d2d26f"
                }
            ]
        }
    }, 
   "outbounds": [
    {
      "protocol": "freedom",  
      "settings": {}
    }
  ]
}

uuid可以使用这个工具生成:https://1024tools.com/uuid

在服务器执行systemctl start v2ray启动v2ray

现在,用浏览器访问你的网站,可以看到一个初始页面,访问转发子目录,可以看到返回Bad Request

注意,子目录格式为/ws/,有两条斜线

至此,服务端配置结束

配置过程——客户端

打开客户端配置文件config.json,加入以下代码:

{
  "inbounds": [
    {
      "port": 1080,
      "listen": "127.0.0.1",
      "protocol": "socks",
      "sniffing": {
        "enabled": true,
        "destOverride": ["http", "tls"]
      },
      "settings": {
        "auth": "noauth",
        "udp": false
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "vmess",
      "settings": {
        "vnext": [
          {
            "address": "your server address",
            "port": 443,
            "users": [
              {
                "id": "0752ffa1-ea16-4f74-9e61-784949d2d26f",
                "alterId": 0
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "ws",
        "security": "tls",
        "wsSettings": {
          "path": "/ws/"
        }
      }
    },
	{
	  "protocol": "freedom",
	  "settings": {},
	  "tag": "direct" //如果要使用路由,这个 tag 是一定要有的,在这里 direct 就是 freedom 的一个标号,在路由中说 direct V2Ray 就知道是这里的 freedom 了
	}
  ],
  "routing": {
    "domainStrategy": "IPOnDemand",
    "rules": [
      {
        "type": "field",
        "outboundTag": "direct",
        "domain": ["geosite:cn"] // 中国大陆主流网站的域名
      },
      {
        "type": "field",
        "outboundTag": "direct",
        "ip": [
          "geoip:cn", // 中国大陆的 IP
          "geoip:private" // 私有地址 IP,如路由器等
        ]
      }
    ]
  }
}

确保两边的uuid一致,也不要忘记把your server address替换成自己的域名

以上配置文件的具体意义,可以在官方文档中了解。总的来说,只要具有inboundsoutbounds,v2ray就可以正确配置。routing是为了跳过大陆网站。

现在,打开电脑或浏览器的代理设置,使用socks代理,地址为本机环回ip:127.0.0.1,端口为1080(要求与配置文件一致)

如果没什么问题,配置过程到这里就结束了。

更多内容,请参考官方文档:https://www.v2fly.org

还要做什么

网页!网页!

现在,你可以流畅的魔法上网,但是别忘了,折腾这么多,目的是为了隐蔽。你的网页现在还是一片空白或是一张初始界面,这显然不利于隐藏。

解决方案很简单,做一个网页上传上去。既充分利用了服务器资源,又便于伪装自己。

CDN

如果你在此时ping一下自己的域名,可以明明白白看到IP地址。作为一个刚刚建成的网站,每天有如此大的流量是不合常理的。为了IP的安全,套一层CDN非常重要。如果你是在cloudflare注册的域名,只需要将小云彩点成橙色即可。如果在其他地方注册的域名,也可以使用cloudflare的免费CDN服务,不过需要重设DNS解析。


“好久不见,Handler One”