安装配置 v2ray
v2ray 的安装很简单,安装脚本来自 fhs-install-v2ray,如要移除,请参考 README。
安装好之后我们可以用 systemctl start v2ray 和 systemctl stop v2ray 来开启和关闭 v2ray。
该脚本安装的 v2ray 的配置文件路径是 /usr/local/etc/v2ray/config.json,如果忘记了可以用 systemctl status v2ray 来查看。下面我们编写配置文件
直接赋值这个内容粘贴到 v2ray 的配置文件中即可,只有两个地方时要修改的,一个的端口(也可以不修改),一个是 id。id 的生成可以到 https://www.uuidgenerator.net
证书的生成和自动续签
TLS 是需要证书的,这里我们使用 certbot 来帮我们申请免费的 Let's Encrypt 证书,Let's Encrypt 是一家免费,开放,自动化的证书颁发机构,官方文档参考 Let’s Encrypt 快速入门。Let's Encrypt 官方建议使用 certbot 来进行证书的获取。安装 certbot 需要先安装 epel 仓库,命令如下:
由于我们的 VPS 上并没有一个真实运行的网站(只是用来进行流量的伪装),所以我们需要用 certbot 的 standalone 参数来运行一个独立的网页服务器进行身份验证(certbot 需要确定你拥有域名指向的服务器的所有权),该网页服务器会使用 VPS 的 80 端口,所以你需要关闭 VPS 上的 web 服务器(比如 nginx)。申请证书的命令如下
这里注意,如果出现红字说生成失败,那么要检查一下域名解析填的 IP 是否正确,也可以在 VPS 中 ping 一下你的域名看看能不能 ping 通,并且指向的 IP 是不是当前 VPS 的 IP。
如果你的域名解析正确并且能够在 VPS 上 ping 通,但是还是一直红字提示失败,那么你需要检查一下 VPS 的防火墙,可以用 systemctl status firewalld 来查看是否开启了防火墙。一般来说出现这种情况都是因为防火墙的开启,比较简单的解决方法就是关闭防火墙:
如果你不想关闭防火墙可以试一试让防火墙开放指定端口(我是直接关闭防火墙的,该方法没有实际测试),以下命令均来自 Linux CentOS7 开启80,443端口外网访问权限
Let's Encrypt 的证书是免费的,但是每次证书的有效期只有 90 天,也就是我们至少在 90 天以内更新一次我们的证书,你可以到 VPS 上手动更新,命令时 certbot renew,还是要注意更新证书的时候需要关闭 nginx,否则会报 80 端口被占用。你用可以先用 certbot renew --dry-run 来检验是否能够成功更新,该命令只是检测,不会真的生成证书。
还有一个需要注意的点就是默认情况下只有证书有效期小于
30天的时候才能进行更新,如果有效期超过30天则会更新失败。
如果每次手动更新太麻烦了,我们可以使用 crond 帮我们定期执行更新命令,首先进行安装并启动(vultr 的 VPS 默认已经安装了)
crontab 可以用 cron 表达式帮我们定期执行一些命令,输入 crontab -e 就可以输入我们要定期执行的表达式了:
表达式的前五个 * 或者数字是 cron 表达式,分别代表 分 时 日 月 年,* 就代表 每 的意思,比如上面的 1 0 15 * * 表示每年每月的 15 号的 00 : 01 执行后面的命令。--pre-hook 和 --post-hook 则是 certbot 的两个参数表示在执行 renew 之前和之后的两个命令钩子,此处表示我们先关闭 nginx 在执行 renew,renew 完成后再启动 nginx。
安装配置 nginx
配置了 TLS 需要一个 web 服务器,这里可以选择 nginx,apache 或者 caddy,我使用的是 nginx。
nginx 的配置文件默认是 /etc/nginx/nginx.conf,不过我建议是在 /etc/nginx/conf.d 中创建一个独立的配置文件 v2ray.conf,方便管理。nginx.conf 会读取 conf.d 中的所有 conf 文件。创建好配置文件后写入如下配置
需要修改的地方我已经在注释中表名,请仔细修改,注意分号。编写完成后我们用 nginx -t 来测试配置文件是否有语法错误,一般如果显示如下命令则表示语法没问题,我们可以重启 nginx
caddy是一个比较新的用golang实现的web服务器,我不是很熟悉,不过它可以自动签发https证书,这一点来说比较方便,如果你不想自己配置证书可以使用caddy。caddy的配置参考 新 V2Ray 白话文指南
SELinux
上面的步骤都执行完了,一般来说我们的配置就已经完成了,此时在客户端上正确配置就能够访问 Google 了。如果此时你的 v2ray 客户端显示服务器连接正常,但是你还是不能访问 Google,很可能是 SELinux 的问题,此时我们只要去 /var/log/nginx/ 查看 access.log 可以看到很多的 Permission Denied,说明 VPS 收到了我们的请求但是由于 SELinux 无法转发给 v2ray,此时我们可以关闭 SELinux,也可以直接执行 setsebool -P httpd_can_network_connect 1 来开启内网转发的权限。
关于
SELinux的介绍可以参考 阿里云
clash
我原来在 Mac 上一直用的是 V2rayU 作为客户端的图形界面代理工具,这个工具一直都用的挺好。最近看了看 clash 相关的图形界面代理工具,包括 Clash for Windows,ClashX 和 ClashX Pro,其中 ClashX 是开源的,其他都是闭源的,clash 有个 premium-core 也是闭源的。我当时就是觉得界面比较好看所以试了试 ClashX Pro,不过使用后遇到了不少问题,首先是没有文档,全部靠 clash 自身的文档,ClashX 的 Github 仓库也不能提 issue,ClashX Pro 更是仓库都没有,只是在微软的 App Center 里面有下载和 release note,遇到问题只能到 Github 仓库中提一个 discussion 里面提一个,大概率没人管。
ClashX Pro 支持 clash premium-core,主要是支持一个 tun mode,可以代理电脑中所有的 tcp 和 udp 流量。这个我使用需求不大,需要代理的软件单独设置就可以。另一个功能就是支持一个 rule provider 功能,这个比较有用,之前用 V2rayU 的时候有 pac 模式,有一个默认的 GFW list ,基本上我们配置完 vmess 就可以使用了。在 clash 这里基本每个规则都得自己配置,rule provider 让我们可以用一些别人配置好的 rule-set,这样就比较方便,有些 rule-set 是可以自己更新的(SS-Rule-Snippet 和 clash rules 是两个比较好的 rule 配置)。但是在使用 ClashX Pro 的时候还遇到两个比较严重的问题,一个就是切换有线和无限会由于 fake id 的原因无法上网,还有就是内存占用非常高,刚开就 180m 的内存占用,后面还会一直增加,不知道为什么一个代理工具这么高的内存你占用。使用 ClashX 则相对较低只有几十兆,V2rayU 只有十几兆。目前我使用的是 ClashX ,比较麻烦的就是 rule,得自己手填一堆。M1 芯片的电脑还有个方法就是安装手机上用的 shadowrocket,必须用美服 apple id 才能下载。
最后就是配置终端代理,原来我都是用 curl cip.cc 进行测试,其实这个测试结果完全就是看你 curl 这个地址是否走了代理,如果在代理工具中配置了这个地址直连,那么得到的结果肯定还是真实的 IP 而不是代理服务器 IP,可以参考 请问clashx怎么设置终端代理呢? 这个 issue,用 curl -vv https://www.google.com 来进行测试。
总结
这个新版本的 v2ray 的配置总结了我最近配置时候遇到的一些问题,按照这一套走下来应该是没有什么问题,如果你还有其他疑问,欢迎评论或者给我邮件。
