根据 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
:
1ufw disable
如果是 CentOS ,则是 firewalld
:
1systemctl stop firewalld
2systemctl disable firewalld
关闭selinux
CentOS、RedHat、Fedora一般都会默认安装 SELinux ,Debian 默认不安装,而 SELinux 配置起来比防火墙更麻烦,如果只是简单使用一些服务,能够使用好防火墙就足够了,SELinux 可以直接关掉:
1setenforce 0
2sed -ri 's/.*(SELINUX).*/\1=disabled/' /etc/selinux/config
根据服务商不同,除了这些之外可能还需要其他的设置,这些设置就需要自己去查了。
域名
使用 TLS 加密方式需要用到域名,域名的投入不需要太大,如果原本就有网站域名,那么可以直接使用,如果没有,需要另行购买,挑最便宜的下手即可。
我目前使用的是 NameCheap,可以找到相对便宜的域名。搜索域名之后可以点击 Exlpore More
,然后选择 $2 or less
就可以看到不少很便宜的域名 (以前还是 $1 or less,最近才涨价的)


- 这里开个玩笑,最好还是不要用这么显眼的域名。
不推荐使用 freenom 的免费域名,问题太多,用没几天突然被收回的帖子也是一搜一大把,而只要花了钱,基本上 10 块钱左右可以安心用一年,还是不要贪图便宜的好。
如果域名一年到期了,续费就需要 $10+ 了,只是用来挂代理的话没有必要续费,到期前重新低价买个新的即可。
域名购买完成后需要添加 A 记录解析。
时间校准
V2Ray 数据包的加密用到了当前时间,所以需要确保服务端和客户端的时间同步,否则连接上也无法认证成功
1ntpdate 1.pool.ntp.org
- 客户端也需要进行时间同步,Linux 可直接使用以上命令,其他设备直接打开同步时间即可。
开启 BBR(可选)
BBR 可以优化 V2Ray 的网络传输,也就是可以提高网速,在 Linux 4.9 以上,BBR 已经默认集成在内核中了,所以只要保证内核在 4.9 以上即可直接启用,可以使用以下命令查看内核版本:
1uname -r
升级内核
如果内核版本较低,则需要升级内核,一般 debian 10 以上已经满足条件,而 CentOS 使用的是 3.x 版本,则需要另外升级内核:
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
然后启用内核
1sudo egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'
2
3# 例如最新内核是第一个
4sudo grub2-set-default 0
5
6# 重启生效
7reboot
启用 BBR
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 官方网站 (已被墙) ,比较流行的方式包括:
- 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 配置
可通过一键脚本安装:
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.service | systemd守护进程,以nobody权限运行 |
/etc/systemd/system/v2ray@.service | systemd守护进程,可自定义运行用户 |
V2Ray 的配置文件位于 /usr/local/etc/v2ray/config.json
(旧版位于 /etc/v2ray/config.json )
1vim /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 即可:
1systemctl restart v2ray
2systemctl enable v2ray
获取 SSL 证书
使用 TLS 需要用到 SSL 证书,这个需要自己获取,可以通过 Let`s encrypt 获取:
安装
1# CentOS
2yum install letsencrypt python2-certbot-nginx
3
4# Ubuntu 或者 Debian
5apt-get install letsencrypt python3-certbot-nginx
获取证书
1letsencrypt certonly --standalone --email 邮箱 -d 域名
- 其中的邮箱用于证书过期的提醒,因为使用 Let’s encrypt 获取的证书有 3 个月的有效期,到期前需要续期,如果没有及时续期则证书会不可用
续期可以添加自动任务:
1touch /var/spool/cron/crontabs/root
2echo "0 5 * * 6 /usr/bin/certbot --nginx renew" >> /var/spool/cron/crontabs/root
Nginx 配置
Nginx 通过源安装即可,没有版本要求:
1# Debian/Ubuntu
2apt-get install nginx
3
4# CentOS
5yum install nginx
安装完成后,添加一个配置文件:
1vim /etc/nginx/conf.d/v2ray.conf
内容如下:
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 中的一样即可
然后新建日志文件:
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
1systemctl start nginx
2systemctl enable nginx
没有问题的话,这个节点现在就可以用了。
客户端配置
可用的客户端不少,可以参考官网列出的内容。
我目前在用 V2RayNG
(安卓) + 原版
(Linux) + V2RayN
(Windows)。
客户端填写内容大同小异,基本包含以下几项,照着配置填就行了:
项目 | 内容 |
---|---|
名称 | 随意 |
地址 | 上面使用的域名 |
端口 | 443 |
用户ID | 上面生成的UUID |
额外ID | 64 |
加密方式 | none |
传输协议 | ws |
伪装类型 | none |
伪装域名 | |
路径 | 上面所填路径 |
底层传输安全 | tls |
允许不安全连接 | false |
Linux 使用原版客户端
如果是 Linux 平台,可以考虑使用原版客户端,安装和服务端一样:
1bash <(curl -L -s https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)
然后更改配置文件
1vim /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}
添加日志文件,否则启动会报错
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
然后重启并添加自启动
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 插件:
1curl -L -s https://raw.githubusercontent.com/ColetteContreras/v2ray-poseidon/master/install-release.sh | sudo bash
- 目前该插件已闭源,限制有效用户最多 50 人,超了会不可用,详细了解可看:03 社区版和商业版的区别 · ColetteContreras/v2ray-poseidon Wiki
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:
1systemctl restart v2ray
SSRPanel 上的配置参考 ssrpanel:搭建shadowsocksr流量监控和用户管理面板 | 温锦瑜的博客 即可。