V2Ray之TLS+WebSocket+Nginx+CDN翻墙方法

如果你的VPS IP 被墙了,或者你直接连接VPS的速度不理想,可以试试本文介绍的方法。

本文以Cloudflare CDN为例配置,据传,如果你不是使用 移动宽带 的用户,那么使用 Cloudflare 中转的速度相对来说是比较慢的,这个是因为线路的问题,无解。如果你使用的话,那么 Cloudflare 的中转节点可能会在,速度也许会不错 (不完全保证)。

体验了本文介绍的方法,如果速度不理想,可以考虑用国内的CDN替换Cloudflare,据说能体验飞一般的速度,正好 已经支持 HTTP/2 了,又拍云、七牛、阿里都不错,腾讯的 h2 还在内测,百度不清楚。据传国内CDN中转法速度提升非常大,也非常稳定,毫无压力,在重点 IP 段也无所畏惧。

会用 Cloudflare,其它的 CDN 应该也许也不会有问题。但有一点,如果是为了复活被墙IP,则只能用Cloudflare等国外的CDN。

本文以自建V2ray服务器简明教程 为基础,V2ray基本安装配置请参照此简明教程。

本文介绍的方法不太复杂,但对小白来说也不是很容易,如果你懒得折腾,那就用我们提供的免费翻墙软件吧:
安卓手机翻墙Chrome一键翻墙包火狐firefox一键翻墙包XX-Net禁闻版

或者也可以购买现成的搬瓦工服务(跟本库无关哦,为支持我们,可考虑年付):
搬瓦工翻墙 Just My Socks

本文目录

注册一个域名

如果已经注册有域名了可以跳过。 TLS 需要一个域名,域名有免费的和有付费的,如果你不舍得为一个域名每年花点钱,用个免费域名也可以,但总体来说付费的会优于免费的,我看到有网友因为用了免费域名,结果出现域名解析故障而翻墙失败。所以,还是推荐买个便宜点的域名。关于域名注册商,推荐namesilo ,这家域名商有不少便宜的域名选择,比如.xyz域名,一年才0.99美元,很便宜,而且可选择免费域名。为了方便,在本文中我就忽略如何注册购买域名了。关于如何获取域名,具体可搜索相关文章教程。

注册好域名之后务必记得添加一个 A 记录指向你的 VPS!

另外,为了避免主域名被封锁,推荐先使用子域名,但本文以主域名为例!

以下假设注册的域名为 mydomain.me,请将之替换成自己的域名。

域名添加到Cloudflare

确保在Cloudflare DNS 设置处启用CDN,就是Proxy Status 那一列,那个金黄金黄的云彩图标要点亮,A记录指向你的VPS IP地址。

另外,在 Cloudflare 的 SSL/TLS 设置中启用 Flexible 模式,并关掉 TLS 1.3 。

大概这样就可以了。等待一会儿,ping 域名试试看,如果ping 出的ip变成了 Cloudflare ip,那么我们已经成功给我们的域名套上了Cloudflare CDN。

证书生成

我们采用最简略的配置,VPS端无需自己生成证书,直接使用Cloudflare CDN 自动生成的证书。所以这一步你需要做的就是 do nothing. 这样配置不但超简易,而且配合Cloudflare SSL/TLS 的 Flexible 模式,比Full模式速度更快。

VPS 安装配置Nginx

apt=get update
apt-get -y install nginx

然后替换/etc/nginx.conf为如下配置,此配置文件是通用配置,不管什么域名都可以使用,直接下载覆盖即可:

wget https://raw.githubusercontent.com/bannedbook/fanqiang/master/v2ss/server-cfg/nginx.conf -O -> /etc/nginx/nginx.conf

下面是nginx.conf的内容,为方便大家,制作了这个nginx通用配置文件并上传到github,大家可以直接使用上面的命令下载覆盖即可。

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
worker_rlimit_nofile  655350;
events {
        use epoll;
        worker_connections 65536;
}

http {
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;
        access_log /var/log/nginx-access.log;
        error_log /var/log/nginx-error.log;

        gzip on;
        server {
                listen 80 default_server;
                listen [::]:80 default_server;
                root /var/www/html;
        
                index index.html index.htm index.nginx-debian.html;
        
                server_name _;
        
                location / {
                        try_files $uri $uri/ =404;
                }
                
    location /bannedbook { #  V2Ray 配置中的 path 保持一致
            proxy_redirect off;
            proxy_pass http://127.0.0.1:10000; #假设WebSocket监听在环回地址的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;  
    }       
        }
}

然后,测试nginx配置: nginx -t

重新载入配置: nginx -s reload

配置 V2Ray

V2Ray配置

{
  "log": {
    "loglevel": "warning",
    "access": "/dev/null",
    "error": "/dev/null"
  },
  "inbounds": [{
    "listen":"127.0.0.1",
    "port": 10000,
    "protocol": "vmess",
    "settings": {
      "clients": [
        {
          "id": "de20d937-ca8f-af14-ea07-20b45447d371",
          "level": 1,
          "alterId": 64
        }
      ]
    },
        "streamSettings": {
        "network": "ws",
        "wsSettings": {
        "path": "/bannedbook"
        }
    }
  }],
  "outbounds": [
    {
      "protocol": "freedom",
      "settings": {},
      "tag": "allowed"
    },
    {
      "protocol": "blackhole",
      "settings": {},
      "tag": "blocked"
    }
  ],
  "routing": {
    "rules": [
      {
        "type": "field",
        "ip": [
          "geoip:private"
        ],
        "outboundTag": "blocked"
      }
    ]
  }
}

修改配置后记得测试配置:/usr/bin/v2ray/v2ray -test -config /etc/v2ray/config.json

重启v2ray: service v2ray restart

相关教程

V2Ray客户端配置

{
  "inbounds": [
    {
      "port": 1080,
      "listen": "127.0.0.1",
      "protocol": "socks",
      "sniffing": {
        "enabled": true,
        "destOverride": ["http", "tls"]
      },
      "settings": {
        "auth": "noauth",
        "udp": false
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "vmess",
      "settings": {
        "vnext": [
          {
            "address": "mydomain.me",
            "port": 443,
            "users": [
              {
                "id": "de20d937-ca8f-af14-ea07-20b45447d371",
                "alterId": 64
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "ws",
        "security": "tls",
        "wsSettings": {
          "path": "/bannedbook"
        }
      }
    }
  ]
}

V2ray伪装

这一步不是必须,只是为了隐藏和伪装的更好。说是伪装,其实我们安装了nginx web服务器,也就是已经安装了一个真正的网站,试试用浏览器打开你的域名,会看到nginx的默认首页。为了隐藏和伪装的更逼真,你可以考虑弄一些英文网页放到vps 的/var/www/html目录下,当然,必须包括一个index.html , 这样会使你的网站看起来更象一个真实的网站。

真实网站+加装v2ray

更往前想一步,如果你已经有一个真正的网站,而网站域名没有被墙,那么完全可以利用本文介绍的方法,在原有的真实网站基础上,开辟一个path,加装V2ray用来翻墙。这就是完全以真实网站为掩护来翻墙了。

原文链接:V2Ray之TLS+WebSocket+Nginx+CDN配置方法