使用TLS+WS方式的V2Ray简单搭建说明:一个目前较为稳定的科学上网方式

使用TLS+WS方式的V2Ray简单搭建说明:一个目前较为稳定的科学上网方式

根据 V2Ray 官方网站 的介绍,V2Ray 是一个可以打造专属的基础通信网络的工具集合,功能很强大,是目前主流的科学上网工具之一。

前言关于 V2Ray 就不做过多说明,在此就简单说一下这些工具的发展流程,可以了解一下 V2Ray 会成为主流工具的原因。

以前的墙只能通过解析传输的数据内容进行判断,如果发现流量请求的内容包含黑名单网站,则会被墙,SS 使用加密混淆的方式进行代理,让墙解析不到内容,这在前期墙还不高的时候很有用,因为解析不出来就理所当然没法判断是否该墙了。

但是随着 SS 使用人数上升,这种被加密的数据包越来越多,无法解析情况越来越明显,于是墙改变了判断标准,无法解析的就干扰,同时加大解密力度,所以那段时间的使用感受就是:刚搭建好还能用,但是很慢,过几天就挂了。

后来 SSR 出现了,在 SS 的基础上加上了混淆,也就是不单对数据包加密,还伪装成其他的数据流量,例如伪装成访问普通网站 / 微信视频通话的流量,这种伪装见效明显,解决了加密数据包目标太明显的问题,但是依靠简单伪装终究不是真正解决问题的办法。

而 V2Ray 在伪装可以做得比 SS/SSR 更好,因为 V2Ray 可以直接使用 web 服务器作为前置代理 (现在ss/ssr其实也支持此功能了),如果墙发现了这个访问境外网站的数据包,然后按照普通网址的方式溯源,就会访问到作为障眼法的虚假网站,或者直接得到 404 网页 (这一点取决于有没有设置网站目录) ,同时数据包经过 https 加密,又无法将数据内容解密 (准确的说是就算解密一个数据包都需要耗费大量的资源) ,所以就无法判断这个用户是否在翻墙,而且这些流量看起来就像在访问正常网站一样,所以墙的成本变高了,稳定性就提升了。

不过,道高一尺魔高一丈,之前就有人提出过要实行白名单制,也就是说现在是指定了一些网站不能访问 (Google、Facebook等),要改成只能访问官方指定的外网 (如指定只能访问微软的网站),如果这样的话,这种用nginx作为前置代理的方式又会无法使用了。

目前来说 V2Ray 确实最稳定的,我个人已经用了两年时间没挂过。 (甚至在墙加强时期因为被墙的人变多,网速还因为带宽没那么拥堵而变快了)

其实 V2Ray 这么稳定,也有一个不算原因的原因,那就是因为部署难度较大,不是安装上去就可以完事了,还需要一系列较为复杂的配置,所以用的人相对较少,被关注的也少,也间接降低了被墙的概率。

而也正是因为配置多样复杂,所以本文也无法面面俱到,只是挑其中较为推崇也是最稳定的一种方式:TLS+WS 进行说明,至于其他很实用的限速、路由表等功能不是刚入门就能搞懂的,就不多做说明了。

准备在安装 V2Ray 之前需要简单做些环境准备,保证安装完后可以跑起来,没有特殊说明的情况下,以下命令均在 root 权限下运行。

关闭防火墙防火墙可用来减少网络侵入的风险,不过规则设置复杂,许多人都不愿过多了解,所以以下提供直接禁用的方法,但还是建议学习防火墙的使用。

不同的 Linux 发行版的防火墙可能不一样,Debian/Ubuntu 的防火墙是 ufw:

BASH

1ufw disable如果是 CentOS ,则是 firewalld:

BASH

1systemctl stop firewalld

2systemctl disable firewalld关闭selinuxCentOS、RedHat、Fedora一般都会默认安装 SELinux ,Debian 默认不安装,而 SELinux 配置起来比防火墙更麻烦,如果只是简单使用一些服务,能够使用好防火墙就足够了,SELinux 可以直接关掉:

BASH

1setenforce 0

2sed -ri 's/.*(SELINUX).*/\1=disabled/' /etc/selinux/config根据服务商不同,除了这些之外可能还需要其他的设置,这些设置就需要自己去查了。

域名使用 TLS 加密方式需要用到域名,域名的投入不需要太大,如果原本就有网站域名,那么可以直接使用,如果没有,需要另行购买,挑最便宜的下手即可。

我目前使用的是 NameCheap,可以找到相对便宜的域名。搜索域名之后可以点击 Exlpore More ,然后选择 $2 or less 就可以看到不少很便宜的域名 (以前还是 $1 or less,最近才涨价的)

$2 or less低价域名这里开个玩笑,最好还是不要用这么显眼的域名。不推荐使用 freenom 的免费域名,问题太多,用没几天突然被收回的帖子也是一搜一大把,而只要花了钱,基本上 10 块钱左右可以安心用一年,还是不要贪图便宜的好。

如果域名一年到期了,续费就需要 $10+ 了,只是用来挂代理的话没有必要续费,到期前重新低价买个新的即可。

域名购买完成后需要添加 A 记录解析。

时间校准V2Ray 数据包的加密用到了当前时间,所以需要确保服务端和客户端的时间同步,否则连接上也无法认证成功

BASH

1ntpdate 1.pool.ntp.org客户端也需要进行时间同步,Linux 可直接使用以上命令,其他设备直接打开同步时间即可。开启 BBR(可选)BBR 可以优化 V2Ray 的网络传输,也就是可以提高网速,在 Linux 4.9 以上,BBR 已经默认集成在内核中了,所以只要保证内核在 4.9 以上即可直接启用,可以使用以下命令查看内核版本:

BASH

1uname -r

升级内核如果内核版本较低,则需要升级内核,一般 debian 10 以上已经满足条件,而 CentOS 使用的是 3.x 版本,则需要另外升级内核:

BASH

1rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

2rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

3yum --enablerepo=elrepo-kernel install kernel-ml -y然后启用内核

BASH

1sudo egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'

2

3# 例如最新内核是第一个

4sudo grub2-set-default 0

5

6# 重启生效

7reboot更多说明可见 CentOS加入BBR内核模块,极大提高服务器网络速度 | 温锦瑜的博客

启用 BBR

BASH

1echo 'net.core.default_qdisc=fq' | sudo tee -a /etc/sysctl.conf

2echo 'net.ipv4.tcp_congestion_control=bbr' | sudo tee -a /etc/sysctl.conf

3sudo sysctl -p服务端部署实际上 V2Ray 不区分服务端和客户端,如果两端都是使用 Linux,则可以使用同样的方法安装,只不过配置文件有所不同。

需要说明的是,原本的 v2ay/v2ray-core 项目的作者已经停更很长时间了,目前由社区的 v2ly/v2ray-core 继续更新,可以说是原有项目的延续,不过习惯上还是称为 V2Ray。

V2Ray 可以使用多种方式配置,具体可参见 Project V 官方网站 (已被墙) ,比较流行的方式包括:

TCPmKCP (最快)WS+TLS (最稳定)

…实际可用的方式不止这些,其中的 mKCP 速度较快,不过是需要消耗更多的冗余流量来保证速度,而 WS+TLS 的方式是最稳定的,不过在速度上会慢一些,以下只以 WS+TLS 方式作为举例。

思路WS+TLS 方式较为复杂,概括来讲就是使用 Nginx 作为前置代理,如果有代理请求,则将流量转发给 V2Ray,访问流程大体如下:

请求 ⇒ Nginx (443) ⇒ Nginx (WS路径) ⇒ Nginx (42348) ⇒ V2Ray (42348) ⇒ V2Ray (用户验证)

其中,括号内的数字为端口号。所以,虽然 V2Ray 中设置的代理端口为 42348,但实际上在客户端需要填写的端口号是 443,因为需要先访问 Nginx。

V2Ray 配置可通过一键脚本安装:

BASH

1bash <(curl -L -s https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)将安装以下文件:

文件说明/usr/local/bin/v2ray主程序/usr/local/bin/v2ctl辅助工具/usr/local/share/v2ray/geoip.dat路由规则文件,以IP为准/usr/local/share/v2ray/geosite.dat路由规则文件,以域名为准/usr/local/etc/v2ray/config.json配置文件/var/log/v2ray/access.log访问日志/var/log/v2ray/error.log错误日志/etc/systemd/system/v2ray.servicesystemd守护进程,以nobody权限运行/etc/systemd/system/v2ray@.servicesystemd守护进程,可自定义运行用户V2Ray 的配置文件位于 /usr/local/etc/v2ray/config.json (旧版位于 /etc/v2ray/config.json )

BASH

1vim /usr/local/etc/v2ray/config.json下面是一个较为简单的配置例子,需要更改的内容已经标明:

JSON

1{

2 "inbounds": [

3 {

4 "listen": "127.0.0.1",

5 "port": 42348,

6 "protocol": "vmess",

7 "tag": "proxy",

8 "settings": {

9 "clients": [

10 {"id": "用户ID", "email": "邮箱", "level": 0, "alterId": 64},

11 {"id": "用户ID", "email": "邮箱", "level": 0, "alterId": 64}

12 ]

13 },

14 "streamSettings": {

15 "network": "ws",

16 "wsSettings": {

17 "path": "/路径"

18 }

19 }

20 }

21 ],

22

23 "outbounds": [{

24 "protocol": "freedom",

25 "settings": {}

26 }],

27

28 "log": {

29 "access": "/var/log/v2ray/access.log",

30 "error": "/var/log/v2ray/error.log",

31 "loglevel": "warning"

32 }

33}需要更改的有3处地方:

用户ID : 此 ID 为 UUID,可通过命令生成:cat /proc/sys/kernel/random/uuid邮箱 : 主要用来区分用户,需要填的不一定是邮箱,可以直接用名字代替,例如:wenjinyu ,一般在查询用户已使用流量时会用到路径 : 加了路径后,实际访问地址就变成了 example.com/path ,这样的话,主网址 example.com 可以用来放伪装网站,不过不放也行,访问的时候就是404页面注意:如果需要添加 2 个以上用户,则要在用户配置项后面加上逗号,但最后一个不加,可比较上面高亮的 2 行

更改完成后重启 V2Ray 即可:

BASH

1systemctl restart v2ray

2systemctl enable v2ray获取 SSL 证书使用 TLS 需要用到 SSL 证书,这个需要自己获取,可以通过 Let`s encrypt 获取:

安装

BASH

1# CentOS

2yum install letsencrypt python2-certbot-nginx

3

4# Ubuntu 或者 Debian

5apt-get install letsencrypt python3-certbot-nginx获取证书

BASH

1letsencrypt certonly --standalone --email 邮箱 -d 域名其中的邮箱用于证书过期的提醒,因为使用 Let’s encrypt 获取的证书有 3 个月的有效期,到期前需要续期,如果没有及时续期则证书会不可用续期可以添加自动任务:

BASH

1touch /var/spool/cron/crontabs/root

2echo "0 5 * * 6 /usr/bin/certbot --nginx renew" >> /var/spool/cron/crontabs/rootNginx 配置Nginx 通过源安装即可,没有版本要求:

BASH

1# Debian/Ubuntu

2apt-get install nginx

3

4# CentOS

5yum install nginx安装完成后,添加一个配置文件:

BASH

1vim /etc/nginx/conf.d/v2ray.conf内容如下:

BASH

1server {

2 listen 443 ssl;

3 ssl on;

4 server_name 域名;

5 ssl_certificate /etc/letsencrypt/live/域名/fullchain.pem;

6 ssl_certificate_key /etc/letsencrypt/live/域名/privkey.pem;

7 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

8 ssl_ciphers HIGH:!aNULL:!MD5;

9

10 location /PATH {

11 proxy_redirect off;

12 proxy_pass http://127.0.0.1:42348;

13 proxy_http_version 1.1;

14 proxy_set_header Upgrade $http_upgrade;

15 proxy_set_header Connection "upgrade";

16 proxy_set_header Host $http_host;

17 proxy_set_header X-Real-IP $remote_addr;

18 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

19 }

20

21 access_log /var/log/nginx-v2ray-access.log;

22 error_log /var/log/nginx-v2ray-error.log;

23}其中需要更改的有:第 4、5、6 行的域名:使用自己的域名第 10 行的路径:可以任意用一个单词,只要和 v2ray 中的一样即可然后新建日志文件:

BASH

1touch /var/log/nginx-v2ray-access.log;

2touch /var/log/nginx-v2ray-error.log;

3chown nginx:nginx /var/log/nginx-v2ray-access.log;

4chown nginx:nginx /var/log/nginx-v2ray-error.log;添加完成后即可启动 Nginx

BASH

1systemctl start nginx

2systemctl enable nginx没有问题的话,这个节点现在就可以用了。

客户端配置可用的客户端不少,可以参考官网列出的内容。

我目前在用 V2RayNG (安卓) + 原版 (Linux) + V2RayN (Windows)。

客户端填写内容大同小异,基本包含以下几项,照着配置填就行了:

项目内容名称随意地址上面使用的域名端口443用户ID上面生成的UUID额外ID64加密方式none传输协议ws伪装类型none伪装域名路径上面所填路径底层传输安全tls允许不安全连接false

Linux 使用原版客户端如果是 Linux 平台,可以考虑使用原版客户端,安装和服务端一样:

BASH

1bash <(curl -L -s https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)然后更改配置文件

BASH

1vim /usr/local/etc/v2ray/config.json内容修改如下:

JSON

1{

2"inbounds": [{

3 "port": 10800,

4 "listen": "127.0.0.1",

5 "protocol": "socks",

6 "sniffing": {

7 "enabled": true,

8 "destOverride": ["http", "tls"]

9 },

10 "settings": {

11 "auth": "noauth",

12 "udp": false

13 }

14}],

15

16"inboundDetour": [

17{

18 "port": 10801,

19 "listen": "127.0.0.1",

20 "protocol": "http",

21 "settings": {

22 "timeout": 0

23 }

24}],

25

26"outbounds":

27[

28 {

29 "protocol": "vmess",

30 "settings": {

31 "network": "tcp,udp",

32 "vnext": [{

33 "address": "域名",

34 "port": 443,

35 "users": [{

36 "id": "用户ID", "level": 0, "alterId": 64, "security": "none"

37 }]

38 }]

39 },

40 "streamSettings": {

41 "network": "ws",

42 "security": "tls",

43 "wsSettings": {

44 "path": "/路径"

45 },

46 "tlsSettings": {

47 "serverName": "",

48 "allowInsecure": true

49 }

50 }

51 },{

52 "protocol": "freedom",

53 "settings": {},

54 "tag": "direct"

55 }

56],

57

58"routing": {

59 "domainStrategy": "IPOnDemand",

60 "rules": [{

61 "type": "field",

62 "outboundTag": "direct",

63 "domain": ["geosite:cn"]

64 },{

65 "type": "field",

66 "outboundTag": "direct",

67 "ip": [

68 "geoip:cn",

69 "geoip:private"

70 ]

71 }

72 ]

73},

74"log": {

75 "access": "/var/log/v2ray-access.log",

76 "error": "/var/log/v2ray-error.log",

77 "loglevel": "warning"

78}

79}添加日志文件,否则启动会报错

BASH

1touch /var/log/v2ray-access.log

2touch /var/log/v2ray-error.log

3chown nobody:nogroup /var/log/v2ray-access.log

4chown nobody:nogroup /var/log/v2ray-error.log然后重启并添加自启动

BASH

1systemctl start v2ray

2systemctl enable v2ray此时使用的 SOCKS5 端口为 10800,HTTP 端口为 10801

对接 SSRPanel之前写过一篇文章:ssrpanel:搭建shadowsocksr流量监控和用户管理面板 | 温锦瑜的博客 ,讲了如何使用前端面板 SSRPanel 管理 SSR/V2Ray 节点,不少人对如何对接 SSRPanel 不理解,所以这里添加一节说明。

如果只需要使用 V2Ray,而不用 SS/SSR 的话,可以直接使用针对 V2Ray 的面板:v2ray-web-manager

要对接 SSRPanel,需要先安装 v2ray-poseidon 插件:

BASH

1curl -L -s https://raw.githubusercontent.com/ColetteContreras/v2ray-poseidon/master/install-release.sh | sudo bash目前该插件已闭源,限制有效用户最多 50 人,超了会不可用,详细了解可看:03 社区版和商业版的区别 · ColetteContreras/v2ray-poseidon WikiV2Ray 的配置文件也需要做一些更改:

JSON

1{

2 "inbounds": [

3 {

4 "listen": "127.0.0.1",

5 "port": 42348,

6 "protocol": "vmess",

7 "tag": "proxy",

8 "settings": {

9 "clients": [

10 {"id": "用户ID", "email": "邮箱", "level": 0, "alterId": 64}

11 ]

12 },

13 "streamSettings": {

14 "network": "ws",

15 "wsSettings": {

16 "path": "/路径"

17 }

18 }

19 },{

20 "listen": "127.0.0.1",

21 "port": 10085,

22 "protocol": "dokodemo-door",

23 "settings": {

24 "address": "127.0.0.1"

25 },

26 "tag": "api"

27 }

28 ],

29

30 "outbounds": [{

31 "protocol": "freedom",

32 "settings": {}

33 }],

34

35 "log": {

36 "access": "/var/log/v2ray-access.log",

37 "error": "/var/log/v2ray-error.log",

38 "loglevel": "warning"

39 },

40

41 "stats": {},

42

43 "api": {

44 "tag": "api",

45 "services": [

46 "HandlerService",

47 "LoggerService",

48 "StatsService"

49 ]

50 },

51

52 "routing": {

53 "rules": [{

54 "type": "field",

55 "inboundTag": [ "api" ],

56 "outboundTag": "api"

57 }],

58 "strategy": "rules"

59 },

60

61 "policy": {

62 "levels": {

63 "0": {

64 "handshake": 4,

65 "connIdle": 300,

66 "uplinkOnly": 2,

67 "downlinkOnly": 5,

68 "statsUserUplink": true,

69 "statsUserDownlink": true,

70 "bufferSize": 10240

71 }

72 },

73 "system": {

74 "statsInboundUplink": true,

75 "statsInboundDownlink": true

76 }

77 },

78

79 "ssrpanel": {

80 "nodeId": 2,

81 "checkRate": 60,

82 "user": {

83 "inboundTag": "proxy",

84 "level": 0,

85 "alterId": 64,

86 "security": "none"

87 },

88 "mysql": {

89 "host": "localhost",

90 "port": 3306,

91 "user": "ssrpanel",

92 "password": "ssrpanel",

93 "dbname": "ssrpanel"

94 }

95 }

96}需要添加的内容为 19-26 行、41-95 行,添加完成后重启 V2Ray:

BASH

1systemctl restart v2raySSRPanel 上的配置参考 ssrpanel:搭建shadowsocksr流量监控和用户管理面板 | 温锦瑜的博客 即可。