根据 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
:
如果是 CentOS ,则是 firewalld
:
1 systemctl stop firewalld
2 systemctl disable firewalld
关闭selinux CentOS、RedHat、Fedora一般都会默认安装 SELinux ,Debian 默认不安装,而 SELinux 配置起来比防火墙更麻烦,如果只是简单使用一些服务,能够使用好防火墙就足够了,SELinux 可以直接关掉:
1 setenforce 0
2 sed -ri 's/.*(SELINUX).*/\1=disabled/' /etc/selinux/config
根据服务商不同,除了这些之外可能还需要其他的设置,这些设置就需要自己去查了。
域名 使用 TLS 加密方式需要用到域名,域名的投入不需要太大,如果原本就有网站域名,那么可以直接使用,如果没有,需要另行购买,挑最便宜的下手即可。
我目前使用的是 NameCheap ,可以找到相对便宜的域名。搜索域名之后可以点击 Exlpore More
,然后选择 $2 or less
就可以看到不少很便宜的域名 (以前还是 $1 or less,最近才涨价的)
不推荐使用 freenom 的免费域名,问题太多,用没几天突然被收回的帖子也是一搜一大把,而只要花了钱,基本上 10 块钱左右可以安心用一年,还是不要贪图便宜的好。
如果域名一年到期了,续费就需要 $10+ 了,只是用来挂代理的话没有必要续费,到期前重新低价买个新的即可。
域名购买完成后需要添加 A 记录解析。
时间校准 V2Ray 数据包的加密用到了当前时间,所以需要确保服务端和客户端的时间同步,否则连接上也无法认证成功
客户端也需要进行时间同步,Linux 可直接使用以上命令,其他设备直接打开同步时间即可。 开启 BBR(可选) BBR 可以优化 V2Ray 的网络传输,也就是可以提高网速,在 Linux 4.9 以上,BBR 已经默认集成在内核中了,所以只要保证内核在 4.9 以上即可直接启用,可以使用以下命令查看内核版本:
如果内核版本较低,则需要升级内核,一般 debian 10 以上已经满足条件,而 CentOS 使用的是 3.x 版本,则需要另外升级内核:
1 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
2 rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
3 yum --enablerepo= elrepo-kernel install kernel-ml -y
然后启用内核
1 sudo egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'
2
3 # 例如最新内核是第一个
4 sudo grub2-set-default 0
5
6 # 重启生效
7 reboot
更多说明可见 CentOS加入BBR内核模块,极大提高服务器网络速度 | 温锦瑜的博客
启用 BBR
1 echo 'net.core.default_qdisc=fq' | sudo tee -a /etc/sysctl.conf
2 echo 'net.ipv4.tcp_congestion_control=bbr' | sudo tee -a /etc/sysctl.conf
3 sudo sysctl -p
服务端部署 实际上 V2Ray 不区分服务端和客户端,如果两端都是使用 Linux,则可以使用同样的方法安装,只不过配置文件有所不同。
需要说明的是,原本的 v2ay/v2ray-core 项目的作者已经停更很长时间了,目前由社区的 v2ly/v2ray-core 继续更新,可以说是原有项目的延续,不过习惯上还是称为 V2Ray。
V2Ray 可以使用多种方式配置,具体可参见 Project V 官方网站 (已被墙) ,比较流行的方式包括:
TCP mKCP (最快) 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 配置 可通过一键脚本安装:
1 bash <( curl -L -s https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)
将安装以下文件:
V2Ray 的配置文件位于 /usr/local/etc/v2ray/config.json
(旧版位于 /etc/v2ray/config.json )
1 vim /usr/local/etc/v2ray/config.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 即可:
1 systemctl restart v2ray
2 systemctl enable v2ray
获取 SSL 证书 使用 TLS 需要用到 SSL 证书,这个需要自己获取,可以通过 Let`s encrypt 获取:
安装
1 # CentOS
2 yum install letsencrypt python2-certbot-nginx
3
4 # Ubuntu 或者 Debian
5 apt-get install letsencrypt python3-certbot-nginx
获取证书
1 letsencrypt certonly --standalone --email 邮箱 -d 域名
其中的邮箱用于证书过期的提醒,因为使用 Let’s encrypt 获取的证书有 3 个月的有效期,到期前需要续期,如果没有及时续期则证书会不可用 续期可以添加自动任务:
1 touch /var/spool/cron/crontabs/root
2 echo "0 5 * * 6 /usr/bin/certbot --nginx renew" >> /var/spool/cron/crontabs/root
Nginx 配置 Nginx 通过源安装即可,没有版本要求:
1 # Debian/Ubuntu
2 apt-get install nginx
3
4 # CentOS
5 yum install nginx
安装完成后,添加一个配置文件:
1 vim /etc/nginx/conf.d/v2ray.conf
内容如下:
1 server {
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 中的一样即可 然后新建日志文件:
1 touch /var/log/nginx-v2ray-access.log;
2 touch /var/log/nginx-v2ray-error.log;
3 chown nginx:nginx /var/log/nginx-v2ray-access.log;
4 chown nginx:nginx /var/log/nginx-v2ray-error.log;
添加完成后即可启动 Nginx
1 systemctl start nginx
2 systemctl enable nginx
没有问题的话,这个节点现在就可以用了。
客户端配置 可用的客户端不少,可以参考官网 列出的内容。
我目前在用 V2RayNG
(安卓) + 原版
(Linux) + V2RayN
(Windows) 。
客户端填写内容大同小异,基本包含以下几项,照着配置填就行了:
如果是 Linux 平台,可以考虑使用原版客户端,安装和服务端一样:
1 bash <( curl -L -s https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)
然后更改配置文件
1 vim /usr/local/etc/v2ray/config.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 }
添加日志文件,否则启动会报错
1 touch /var/log/v2ray-access.log
2 touch /var/log/v2ray-error.log
3 chown nobody:nogroup /var/log/v2ray-access.log
4 chown nobody:nogroup /var/log/v2ray-error.log
然后重启并添加自启动
1 systemctl start v2ray
2 systemctl enable v2ray
此时使用的 SOCKS5 端口为 10800,HTTP 端口为 10801
对接 SSRPanel 之前写过一篇文章:ssrpanel:搭建shadowsocksr流量监控和用户管理面板 | 温锦瑜的博客 ,讲了如何使用前端面板 SSRPanel 管理 SSR/V2Ray 节点,不少人对如何对接 SSRPanel 不理解,所以这里添加一节说明。
如果只需要使用 V2Ray,而不用 SS/SSR 的话,可以直接使用针对 V2Ray 的面板:v2ray-web-manager
要对接 SSRPanel,需要先安装 v2ray-poseidon 插件:
1 curl -L -s https://raw.githubusercontent.com/ColetteContreras/v2ray-poseidon/master/install-release.sh | sudo bash
V2Ray 的配置文件也需要做一些更改:
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:
SSRPanel 上的配置参考 ssrpanel:搭建shadowsocksr流量监控和用户管理面板 | 温锦瑜的博客 即可。