沪ICP备2021032517号-1

Cloudflare+V2ray+Nginx+SSL

  |   0 评论   |   0 浏览

背景: 由于国内复杂的网络环境,出墙很多时候不顺利,外网VPS IP 和 cloudflare 的 CDN地址都是一段时间被墙。此时客户端要灵活选择间接走cloudflare还是 直接通过域名访到 VPS。

目的:

1、VPS ip在没有被墙且丢包不严重时走直接走 VPS (域名--->VPS ip)

2、VPS ip被墙或者丢包严重时走cloudflare (域名--->cloudflare--->VPS ip)

两手选择大大提高出墙成功概率

这里实现方式是通过Nginx的不同域名不同路径代理到后端的 v2ray端口 从而实现上面的目的

比如申请了一个 test.com域名

步骤:

1、注册cloudflare并添加你申请的顶级域名test.com

2、将你的域名管理平台上DNS服务器地址修改成cloudflare提供的地址,一般是两个地址

3、在cloudflare上添加A记录指向VPS,比如添加www和wwv的A记录,后面就可以使用www/v.test.com通过nginx代理到后端v2ray的端口, 

域名配置步骤参考这边文章的域名配置部分

4、配置自签名SSL证书

mkdir /usr/local/ssl

cd /usr/local/ssl
openssl genrsa -out tls.key 2048

openssl req -new -x509 -key tls.key -out tls.crt -subj /C=CN/ST=Beijing/L=Beijing/O=DevOps/CN=www.test.com

5、安装和配置v2ray

域名解析生效后再开始配置

v2ray 安装参考这篇文章

bash <(curl -s -L https://git.io/v2ray.sh)

安装过程中填写域名时 www.test.com wwv.test.com 两个写一个就可以

说明:上面的参考文章是使用Caddy实现TLS,本教程是使用Nginx 在安装过程中到提示“是否开启TLS,自己配置了Nginx或Caddy这步时,选择不开启TLS(因为后面用Nginx实现,开启了也没关系,到时systemctl stop caddy systemctl disable caddy 后,在配置Nginx也可以)


6、配置Nginx使用SSL

www.test.com

server {
    listen               443 ssl http2 default_server;
    root                 /usr/share/nginx/html;
    server_name         www.test.com;
    ssl_certificate      /usr/local/ssl/tls.crt; #可以使用openssl自签
    ssl_certificate_key  /usr/local/ssl/tls.key; #可以使用openssl自签
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout   10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    location / {
         proxy_pass            http://127.0.0.1:1256;  #代理到v2ray端口
         proxy_connect_timeout 600;
         proxy_read_timeout    600;
         proxy_http_version    1.1;
         proxy_set_header      Upgrade     $http_upgrade;
         proxy_set_header      Connection  "upgrade";
    }
}

wwv.test.com

server {
    listen               443 ssl http2 default_server;
    root                 /usr/share/nginx/html;
    server_name         wwv.test.com;
    ssl_certificate      /usr/local/ssl/tls.crt; #可以使用openssl自签
    ssl_certificate_key  /usr/local/ssl/tls.key; #可以使用openssl自签
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout   10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    location /dev {
         proxy_pass            http://127.0.0.1:1256/;  #代理到v2ray端口
         proxy_connect_timeout 600;
         proxy_read_timeout    600;
         proxy_http_version    1.1;
         proxy_set_header      Upgrade     $http_upgrade;
         proxy_set_header      Connection  "upgrade";
    }
}

注意 localtion /dev 路径是 wwv.test.com后面客户端的访问路径

客户端配置

Cloudflare解析时 www选择 Cloudflare ;wwv不走Cloudflare

image.png

www.test.com配置如下

image.png

wwv.test.com配置如下

image.png

这样配置完成后就可以实现 一个域名不同的A记录可选择直接走VPS还是经过Cloudflare。

Proxy SwitchyOmega PAC设置

此方法是客户端使用代理软件时用到,路由层实现代理不需要该方法

下载pac文件

https://github.com/zhiyi7/gfw-pac/archive/master.zip

下载解压后会有一个 gfw.pac文件

将第一行换成如下

var proxy = "SOCKS5 127.0.0.1:1080; fallback";

其他保持不变即可


标题:Cloudflare+V2ray+Nginx+SSL
作者:zifuy
地址:https://www.zifuy.cn/articles/2019/11/16/1573873645776.html