V2ray 是一个新型的工具,由于官网说明的很多地方说的不够直白,所以本文记录了一些使用方法
本实例采取 V2Ray、Cloudflare、Nginx、WebSocket 和 TLS 技术搭建一个科学上网的环境,以便绕过防火墙的封锁,并实现安全、隐蔽的网络连接。
Project V 是一个工具集合,它可以帮助你打造专属的基础通信网络。Project V 的核心工具称为 V2Ray,其主要负责网络协议和功能的实现,与其它 Project V 通信。V2Ray 可以单独运行,也可以和其它工具配合,以提供简便的操作流程。
科学上网担心 IP 被墙? 你可以使用 Cloudflare 中转 V2Ray WebSocket 的流量来避免 IP 被墙。简单说就是使用 V2Ray 的 WebSocket + TLS 传输协议,并且由于使用了 Cloudflare 中转,所以墙根本不知道背后的 IP 是多少,还怎么墙你的 IP 呢?
V2ray 官网:https://www.v2ray.com/
本次部署主要采用 V2ray+Nginx+CloudFlare+WwebSocket+TLS 方式,所以准备内容略多,但是效果显著,可以利用 CDN 让被墙的服务器 80% 血量复活。(我的测试之后满血复活)
准备条件
- CentOS 7
- freenom (域名)
- Cloudflare (CDN)
- Nginx
- V2ray
- SSL证书 (acme.sh)
安装和配置 V2Ray 服务端
一键安装脚本 官方安装说明
bash <(curl -L -s https://install.direct/go.sh)
go.sh 参数
-p
或--proxy
: 使用代理服务器来下载 V2Ray 的文件,格式与 curl 接受的参数一致,比如socks5://127.0.0.1:1080
或http://127.0.0.1:3128
-f
或--force
: 强制安装。在默认情况下,如果当前系统中已有最新版本的 V2Ray,go.sh 会在检测之后就退出。如果需要强制重装一遍,则需要指定该参数。--version
: 指定需要安装的版本,比如v1.13
。默认值为最新版本。--local
: 使用一个本地文件进行安装。如果你已经下载了某个版本的 V2Ray,则可通过这个参数指定一个文件路径来进行安装。
示例:
-
使用地址为
127.0.0.1:1080
的 SOCKS 代理下载并安装最新版本:./go.sh -p socks5://127.0.0.1:1080
-
安装本地的 v1.13 版本:
./go.sh --version v1.13 --local /path/to/v2ray.zip
配置文件修改
编辑 /etc/v2ray/config.json
配置文件,修改监听端口、UUID 和 WebSocket 设置等。
{
"inbounds": [{
"port": 10000, // 设置监听端口
"listen":"127.0.0.1", // 要指定监听内网地址
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "ef5af5fe-96f9-4072-b393-4f3b392af0a2", // UUID 填在这里, 用在线生成的即可
"level": 1,
"alterId": 64
}
]
},
"streamSettings": {
"network": "ws", // 设置WebSocket 模式
"wsSettings": {
"path": "/ray"
}
}
}],
"outbounds": [{
"protocol": "freedom",
"settings": {}
},{
"protocol": "blackhole",
"settings": {},
"tag": "blocked"
}],
"routing": {
"rules": [
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "blocked"
},
{
"type": "field",
"outboundTag": "block", // 禁止BT下载
"protocol": [
"bittorrent"
]
}
]
}
}
复制配置文件, 然后替换前 4 个注释的内容即可
freenom 域名注册
- 注册域名成功后把 DNS 服务器设置成 Cloudflare 提供的 DNS
- 登陆 Cloudflare 添加域名, 它会提供 DNS 服务器地址
- 在 freenom 修改 nameserver 之后, 稍等10分钟
- 在 Cloudflare 选择申请验证 DNS 服务器. 等待 5 分钟左右
- 验证成功后会收到 Cloudflare 的邮件, 告诉你 DNS 修改成功, 可以开始使用了
配置 SSL 证书
在 Cloudflare 的个人资料里面找到 API Keys
–> Global API Key
创建一个 API key 留作备用.
使用 acme.sh
工具获取免费的 Let’s Encrypt SSL 证书
curl https://get.acme.sh | sh
alias acme.sh=~/.acme.sh/acme.sh
acme.sh --upgrade --auto-upgrade
# 替换成你自己的 API key
export CF_Key="o0xrmni6602i4sbeq13b4i5uwn2hswk3"
# 换成你的 Cloudflare 登录邮箱
export CF_Email="email@example.com"
# example.com 换成自己的域名 下面的也要换
acme.sh --issue --dns dns_cf -d example.com
acme.sh --install-cert -d example.com --fullchain-file /etc/v2ray/v2ray.crt --key-file /etc/v2ray/v2ray.key --reloadcmd "nginx -s reload"
配置 Nginx 反向代理
本部分的官网文档: WebSocket
修改 Nginx 配置文件 /etc/nginx/nginx.conf
,首先把文件里面默认开启的 80 和 443 的服务器注释掉
创建新的配置文件来代理 V2Ray WebSocket 流量, 在 /etc/nginx/conf.d
目录下新建一个文件 v2ray.conf
server {
listen 443 ssl;
ssl on;
ssl_certificate /etc/v2ray/v2ray.crt;
ssl_certificate_key /etc/v2ray/v2ray.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
server_name example.com; #替换成自己的域名
location / {
default_type application/json;
add_header Content-Type "text/plain;charset=utf-8";
return 200 "OK~!";
}
location /ray {
proxy_redirect off;
proxy_pass http://127.0.0.1:10000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
# Show realip in v2ray access.log
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
注意事项
-
V2Ray 暂时不支持 TLS 1.3,如果开启并强制 TLS 1.3 会导致 V2Ray 无法连接
-
如果在设置完成之后不能成功使用,可能是由于 SElinux 机制 (如果你是 CentOS 7 的用户请特别留意 SElinux
这一机制) 阻止了 Nginx 转发向内网的数据。如果是这样的话,在 V2Ray 的日志里不会有访问信息,在 Nginx
的日志里会出现大量的Permission Denied
字段,要解决这一问题需要在终端下键入以下命令:setsebool -P httpd_can_network_connect 1
-
请保持服务器和客户端的 wsSettings 严格一致,对于 V2Ray,/ray 和 /ray/ 是不一样的
-
不安全的因素在于人,自己的问题就不要甩锅,哪怕我把示例中的 path 改成一个 UUID,依然有不少人原封不动地 COPY
Apache 配置
<VirtualHost *:443>
ServerName example.com
SSLCertificateFile /etc/v2ray/v2ray.crt
SSLCertificateKeyFile /etc/v2ray/v2ray.key
SSLProtocol -All +TLSv1 +TLSv1.1 +TLSv1.2
SSLCipherSuite HIGH:!aNULL
<Location "/ray/">
ProxyPass ws://127.0.0.1:10000/ray/ upgrade=WebSocket
ProxyAddHeaders Off
ProxyPreserveHost On
RequestHeader append X-Forwarded-For %{REMOTE_ADDR}s
</Location>
</VirtualHost>
配置 Cloudflare CDN
修改默认配置,以下是必须调整的
- Network 中的 Websocket,必须开启
- DNS 中的对应域名的解析,必须套用 CDN,即黄色
DNS and HTTP proxy(CDN)
- Cloudflare 的 Crypto 选项卡的 SSL 为
Full
可能的要调整的,具体是否有影响,不清楚。
- Crypto 中,Authenticated Origin Pulls 应该要关闭 (我没关)
- Opportunistic Encryption 应该要关闭(我关了)
测试
注意,注意,完成配置后确认无误,仍然需要等待 10-20 分钟让 CDN 反应,允许 websocket。所以期间不要着急. 刚刚配置完的延迟会非常高. 要等待 24-48 小时左右匹配到最佳线路. 延迟才会下降.
数据流向为
V2 客户端 –> CDN:443 –> Nginx:443 –> V2 服务端:10000
- 不要使用伪装 http 报头
- 加密协议为
none
或者aes-128-cfb
- 开启 UDP 与 KCP
使用客户端连接,套 CDN 无 Error,可访问 Google,速度大约在 500KB 左右。并且此方式突破 GFW 封锁 IP 地址,但是不排除封域名。24小时之后, 速度可以达到 22m/s (满血复活)
客户端配置
官方推荐的工具: 神一样的工具们
以 V2RayN 为例, 服务器配置文件没有加密方式和伪装类型。
而 GUI 界面的客户端使用者需要填以下内容
地址 example.com
端口 443
用户 ID ef5af5fe-96f9-4072-b393-4f3b392af0a2
AlterID 64
加密方式 客户端控制 # 建议aes-128-gcm
传输协议 ws
伪装类型 客户端控制 # 默认none
伪装域名 /ray
底层传输 tls
扩展阅读
内置的域名文件 geosite.dat
在下载 V2Ray 的时候,下载的压缩包有一个 geosite.dat。这个文件是在路由功能里用到的,文件内置了许多常见的网站域名。配置方式如下,geosite 指 geosite.dat 文件,后面的 cn 是一个标签,代表着使用 geosite.dat 文件里的 cn 规则
{
"type": "field",
"outboundTag": "direct",
"domain": [
"geosite:cn"
]
}
通过它可以设定这些国内域名走直连, 这样就相当把规则的域名写到一个文件里,然后在配置中引用这个域名文件,其中有一个好处是配置比较简洁,看起来比较清爽。
外置的域名文件 (自定义的 geosite.dat)
很多时候,V2Ray 内置的国内域名不能满足使用。不过 V2Ray 可以使用外部自定义的像 geosite.dat 这样的域名文件,刚好我也制作了一个,可以供大家使用
-
到 github.com/ToutyRater/V2Ray-SiteDAT/tree/master/geofiles 下载
h2y.dat
文件放到 V2Ray 运行文件的目录下 -
按需要写路由规则,格式为
ext:h2y.dat:tag
。ext
表示使用外部文件h2y.dat
是具体的文件名tag
泛指标签,有哪些标签由文件提供
-
步骤 1 下载的
h2y.dat
文件目前只有ad
和gfw
两个标签,ad 包含着常见的广告域名,gfw 包含着常见的被 gfw 屏蔽的域名。它们各自所包含的域名在这里可以看到。这个域名文件每星期自动更新,如果你使用了我提供的域名文件也请定期更新。 -
路由配置示例如下
"rules": [ { "type": "field", "outboundTag": "block", // 拦截广告相关域名 "domain": [ "ext:h2y.dat:ad" ] }, { "type": "field", "outboundTag": "proxy", // 被 gfw 屏蔽的域名走代理 "domain": [ "ext:h2y.dat:gfw" ] }, { "type": "field", "network": "tcp,udp", "outboundTag": "direct" // 默认直连 } ]
因为使用了 gfw 列表的用户,通常是想要默认情况下直连,但有时候习惯上在 outbounds 的第一个是代理的出站,所以在上面的配置中,最后加了一条直连的规则。那个
"network": "tcp,udp"
是为了让所有流量都能匹配上。 -
运行 V2Ray
需要注意的是,目前所有第三方的 V2Ray GUI 客户端都不支持加载外置的域名文件
禁止 BT 流量
国外版权意识比较重,如果下载盗版的影音文件很有可能会吃官司,所以大多数国外的 VPS 的使用条例都不允许下载 BT。但是一些人并不清楚这点,经常使用朋友分享给他的翻墙账号进行 BT 下载最终导致 VPS 被提供商封禁。
尽管有时候说了不能使用代理下载 BT,对方也表示明白了清楚了,但总是有软件喜欢设置系统代理,也总有软件喜欢使用系统代理,好像也有不少人把路由器翻墙当成了不可或缺的,最终还是逃不了封禁的厄运。
这个问题似乎从进入到 VPS 翻墙时代就困扰这大家,于是各种禁止 BT 的一键脚本也随之应运而生,也时常有人在讨论哪个脚本比较好用,其实最根本的几乎全是 IPTABLES 的字符串匹配。
在 V2Ray, 修改配置文件的路由配置即可禁用 BT。单从禁用 BT 来说的话,也许 IPTABLES 的方式会好一些,也可能不是。但是别忘了,V2Ray 的路由功能可不是只能禁止连接而已,本质应该是转发。也就是说,如果你有一台无视版权的 VPS,那么大可将 BT 流量转到这台 VPS 上。
服务器配置
"routing": {
"domainStrategy": "AsIs",
"rules": [
{
"type": "field",
"outboundTag": "block",
"protocol": [
"bittorrent"
]
}
]
}
注意: inbound 的 sniffing 必须开启
原文