前置需求

  • 一个域名,且已以 A 记录指向服务器

暂时关闭 Nginx 和 Apache

由于 V2Ray 安装过程中会申请 SSL 证书,它会使用 HTTP 的验证方法,简而言之就是临时运行一个网络服务器,在网页上放一个指定的 HTML 文件,证明申请的域名是指向本服务器的。这个过程需要占用 80 端口,即使你的 V2Ray 最终不使用 80 端口。如果你正运行了 Nginx、Apache 或其他应用占用了 80 端口,请关闭。

1
systemctl stop nginx # 关闭 Nginx

安装 Docker

一键脚本安装。如果不行,可以尝试到 Docker 官网上找方法,或者参考另一篇博文

1
bash <(curl -s https://get.docker.com)

安装 V2Ray 服务器端

一行命令,但是有需要修改的参数。

参考:https://github.com/pengchujin/v2rayDocker

1
docker run -d --name v2ray -p 443:443 -p 80:80 -v $HOME/.caddy:/root/.caddy pengchujin/v2ray_ws:0.10 YOURDOMAIN.COM V2RAY_WS && sleep 3s && sudo docker logs v2ray
  • YOURDOMAIN.COM:指向你的服务器 IP 的域名

修改好上述命令后,粘贴到命令行中执行。

三条命令监控 V2Ray:

1
2
3
docker start v2ray      # 启动 v2ray 并重新申请 SSL 证书
docker stop v2ray # 停止 v2ray
docker logs v2ray # 输出日志,可在这里查看 vmess 链接

链接可在 docker logs v2ray 中查看。

logs 中有一个安卓链接,一个 ios 链接,PC 用安卓的链接即可。

部分错误及解决方案

更新 V2Ray 客户端

如果服务器给了 V2Ray 链接,但本地无法使用这个成功连接,可能是镜像中的 V2Ray 版本太老。下面将下载最新的 V2Ray 客户端并替换。

首先进入容器内的命令行:

1
docker exec -it v2ray /bin/sh

在容器中的命令行中依次执行:

1
2
3
4
5
cd /usr/bin
wget https://github.com/v2ray/v2ray-core/releases/latest/download/v2ray-linux-64.zip
unzip v2ray-linux-64.zip v2ray v2ctl
rm v2ray-linux-64.zip
exit

退出容器后,再重启 V2Ray 客户端:

1
docker restart v2ray

配置 BBR

搭上梯子以后,发现有时候丢包率有 40% 左右。

Google 了一下,说是可以开启 BBR 以实现加速。BBR 是什么、为什么能提升代理的速度、如何开启,可以看下面两篇博客。

注意,BBR 是针对 TCP 发包的,也就是说,设置好以后,对于所有代理软件和服务器上的所有网页等都会生效。

BBR是什么?

转载:Ubuntu 18.04/18.10快速开启Google BBR的方法

提示:Ubuntu 18.10 依然可以用该方法开启 BBR,而对于 19.04 和 20.04、貌似官方直接给你开启了 BBR,不需要重复开启了。

  1. 修改系统变量并保存生效
1
2
3
4
sudo su
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p
  1. 查看内核是否已开启 BBR
1
2
3
$ sysctl net.ipv4.tcp_available_congestion_control
# 显示以下即已开启:
net.ipv4.tcp_available_congestion_control = bbr cubic reno
  1. 查看 BBR 是否启动
1
2
3
$ lsmod | grep bbr
# 显示以下即启动成功:
tcp_bbr 20480 14

借助国内的服务器进行中转

有些时候会发现,即使开启了 BBR,速度依旧很慢。但是如果经由国内的服务器中转(即本地客户端 <-> 国内服务器 <-> 国外服务器 <-> Google),速度会快一些。

下面将基于国外服务器已经按上文搭建好 V2Ray 客户端的情形下,在本地客户端进行反向代理。

假设国外服务器的域名为 proxy-server.mydomain.com,国内服务器域名为 transit-server.mydomain.com

国外服务器

国外服务器已经按照上文搭建好服务器,并得到了其 VMESS 链接。

国内服务器

国内服务器需要使用反向代理。可以用 Nginx/Apache 实现,也可以用 Caddy 实现。这里使用 Caddy。

安装 Caddy 后,在 /etc/caddy/Caddyfile 中写入:

1
2
3
4
5
transit-server.mydomain.com {
reverse_proxy proxy-server.mydomain.com:443 {
header_up Host {http.reverse_proxy.upstream.hostport}
}
}

然后重启(或重载) Caddy:

1
2
sudo systemctl stop caddy
sudo systemctl start caddy

本地客户端

将国外服务器的 VMESS 链接导入 V2Ray 客户端后显示,配置的服务器域名为 proxy-server.mydomain.com。将域名改为 transit-server.mydomain.com,其他配置不变即可。