对于 V2Ray,它的验证方式包含时间,就算是配置没有任何问题,如果时间不正确,也无法连接 V2Ray 服务器的,服务器会认为你这是不合法的请求。所以系统时间一定要正确,只要保证时间误差在一分钟之内就没问题。
1.2. 服务器端安装
下载安装脚本
curl -O https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh
执行安装:
bash install-release.sh
如果安装不成功脚本会有红色的提示语句,这个时候你应当按照提示除错,除错后再重新执行一遍脚本安装 V2Ray。
设置开机自启动 V2Ray:
使用以下命令启动 V2Ray:
systemctl start v2ray
停止运行 V2Ray:
重启 V2Ray:
在首次安装完成之后,V2Ray 不会自动启动,需要手动运行上述启动命令。而在已经运行 V2Ray 的 VPS 上再次执行安装脚本,安装脚本会自动停止 V2Ray 进程,升级 V2Ray 程序,然后自动运行 V2Ray。在升级过程中,配置文件不会被修改。
更新 V2Ray 的方法是再次执行安装脚本!
1.3.注册一个域名
如果已经注册有域名了可以跳过。 域名有免费的有付费的,总体来说付费的会优于免费的。
1.4. 证书生成
使用 TLS 需要证书,证书也有免费付费的,同样的这里使用免费证书,证书认证机构为 Let's Encrypt。 证书的生成有许多方法,这里使用的是比较简单的方法:使用 acme.sh 脚本生成,本部分说明部分内容参考于此处。
证书有两种,一种是 ECC 证书(内置公钥是 ECDSA 公钥),一种是 RSA 证书(内置 RSA 公钥)。简单来说,同等长度 ECC 比 RSA 更安全,也就是说在具有同样安全性的情况下,ECC 的密钥长度比 RSA 短得多(加密解密会更快),强烈建议使用 ECC 证书。
证书生成只需在服务器上操作。
1.4.1. 安装 acme.sh
执行以下命令,acme.sh 会安装到 ~/.acme.sh 目录下。
curl https://get.acme.sh | sh
可以创建 一个 bash 的 alias, 方便使用
alias acme.sh=~/.acme.sh/acme.sh
可能要安装依赖
apt install socat -y
1.4.2. 使用 acme.sh 生成证书
选择安装证书的类型:由于acme.sh将默认安装的证书类型从letsencrypt换成了zerossl,想要继续使用 letsencryp 证书,有两种解决方案。
第一种是签发证书时指定 CA
acme.sh --issue -d mydomain.me --server letsencrypt
另一种是直接更改默认 CA,本博文使用这种方式。
acme.sh --set-default-ca --server letsencrypt
如果设置了默认的 CA,以后就算版本升级也将一直默认使用指定的 CA。
证书生成
以下的命令会临时监听 80 端口,请确保执行该命令前没有被占用
acme.sh --issue -d mydomain.me --standalone -k ec-256
-k 表示密钥长度,后面的值可以是 ec-256 、ec-384、2048、3072、4096、8192,带有 ec 表示生成的是 ECC 证书,没有则是 RSA 证书。在安全性上 256 位的 ECC 证书等同于 3072 位的RSA 证书。
证书更新
由于 Let's Encrypt 的证书有效期只有 3 个月,因此需要 90 天至少要更新一次证书,acme.sh 脚本会每 60 天自动更新证书。也可以手动更新。
手动更新 ECC 证书,执行:
acme.sh --renew -d mydomain.me --force --ecc
如果是 RSA 证书则执行:
acme.sh --renew -d mydomain.me --force
1.4.3. 安装证书和密钥
证书生成以后, 接下来需要把证书 copy 到真正需要用它的地方(目录可以自己选择)
mkdir -p /root/cert
acme.sh --installcert -d mydomain.me --ecc \
--key-file /root/cert/private.key \
--fullchain-file /root/cert/cert.crt
以上是80 端口空闲的申请方式,不便之处是80端口被占用的话,是不能自动更新证书的。
更方便的是DNS方式申请,参考这里 第五点。
1.5. 配置 V2Ray
1.5.1. 服务器端json配置文件
编辑配置文件 vi /usr/local/etc/v2ray/config.json
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"port": 443,
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "23ad6b10-8d1a-40f7-8ad0-e3e35cd38297",
"alterId": 0
}
]
},
"streamSettings": {
"network": "tcp",
"security": "tls",
"tlsSettings": {
"certificates": [
{
"certificateFile": "/root/cert/cert.crt",
"keyFile": "/root/cert/private.key"
}
]
}
}
}
],
"outbounds": [
{
"protocol": "freedom",
"settings": {}
}
]
}
1.5.2. 客户端json配置文件
{
"inbounds": [
{
"port": 1080,
"protocol": "socks",
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls"]
},
"settings": {
"auth": "noauth"
}
}
],
"outbounds": [
{
"protocol": "vmess",
"settings": {
"vnext": [
{
"address": "mydomain.me",
"port": 443,
"users": [
{
"id": "23ad6b10-8d1a-40f7-8ad0-e3e35cd38297",
"alterId": 0
}
]
}
]
},
"streamSettings": {
"network": "tcp",
"security": "tls"
}
}
]
}