V2Ray伪装配置

来自掘客

学习该教程需要具备初级或以上的Linux技能,你需要掌握:

  • 基础的Linux命令
  • 文本编辑器的使用,如Nano或Vim

安装并配置V2Ray

请看这篇教程:V2Ray服务端安装

跟着V2Ray服务端安装这篇教程安装配置完毕之后,你就有一个没有伪装的V2Ray服务端了,接下来开始正式配置伪装。

DNS解析

V2Ray的伪装就是设置一个伪装网站,而网站需要一个域名,因此你先要购买一个域名,最好购买.com、.net这种常见后缀的域名,DNS解析会比其他小众后缀快。

买完域名之后在域名管理后台设置域名的DNS解析,你只需要设置一个A记录即可,然后IP写你服务器IP。

类似这样
记录类型 IP地址/目标主机
A 1.1.1.1

设置完解析之后等待10分钟左右,等待生效。


安装acme.sh并签发证书

我们的伪装网站需要一个SSL证书,这样才能使用HTTPS加密,这会让我们的伪装网站更不容易被GFW识别。

SSL证书的签发需要DNS解析,请确保你完成了上一步的DNS解析。

下面我们需要安装一个申请证书用的命令行工具,名为acme.sh。

1.安装Curl

我们需要使用curl来安装acme.sh,Ubuntu 22系统默认没有安装curl,需要手动安装一下。

apt update && apt install -y curl

这行命令会先执行更新软件包列表,然后再安装Curl

2.安装acme.sh

curl https://get.acme.sh | sh

3.安装Socat

在安装完成acme.sh时,它会提示我们安装Socat,这里就安装,因为后面申请证书时要用。

apt-get install -y socat

4.更换CA

CA呢就是指证书颁发机构,acme.sh默认使用ZeroSSL作为证书颁发机构,ZeroSSL在签发证书时需要邮箱,比较麻烦,因此可以用下面的命令把CA换成Let’s Encrypt。

~/.acme.sh/acme.sh --set-default-ca --server letsencrypt

5.开启自动更新

由于ACME协议和Let’s Encrypt CA都在频繁的更新,因此建议开启acme.sh的自动升级:

~/.acme.sh/acme.sh  --upgrade  --auto-upgrade

6.设置防火墙规则

acme.sh已经安装完成了,接下来就是要签发证书了,但在这之前,需要设置防火墙允许80端口,因为签发证书时验证需要80端口开启。

ufw allow 80/tcp

7.签发证书

让acme.sh自己监听80端口进行验证:

~/.acme.sh/acme.sh --issue -d 域名 --standalone

运行完这行命令后,证书就成功发放了,准备就绪可以安装了,但是在安装证书之前需要先安装Nginx才行。

安装并配置Nginx

Nginx是一个Web服务器软件,有了它才能正常运行伪装网站。 接下来将会安装Nginx,然后修改伪装网站的配置文件。

1.安装Nginx

apt -y install nginx

2.设置Nginx开机自启

systemctl enable nginx

3.安装证书

~/.acme.sh/acme.sh --install-cert -d 域名 \
--key-file       /etc/nginx/conf.d/域名.key  \
--fullchain-file /etc/nginx/conf.d/域名.pem \
--reloadcmd     "service nginx force-reload"

请把这个命令一次执行,不要分次执行! 这个命令的作用就是安装证书的公钥和私钥到Nginx的配置目录,然后重启Nginx。

4.打开Nginx网站配置文件

nano /etc/nginx/sites-enabled/default

这行命令是用Nano编辑器打开Nginx默认站点的配置文件。

5.编辑Nginx网站配置文件

server {
    listen 80;
    server_name 域名;  
    rewrite ^(.*) https://$server_name$1 permanent;
}

server {
    listen       8080 ssl http2;
    server_name 域名;
    charset utf-8;

    # ssl配置
    ssl_protocols TLSv1.2 TLSv1.3; 
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;
    ssl_certificate /etc/nginx/conf.d/域名.pem; 
    ssl_certificate_key /etc/nginx/conf.d/域名.key; 

    access_log  /var/log/nginx/xxxx.access.log;
    error_log /var/log/nginx/xxx.error.log;

    root /usr/share/nginx/html;
    location / {
        index  index.html;
    }
}

把原有的配置删除,换成以上配置。

需要注意的点:

  • 把域名改成你所使用的域名!
  • SSl证书的公钥和私钥的位置就是之前安装证书的位置。
  • https端口推荐不要用443,可以选一个8000-9000之间的端口号,比如8080。

6.测试并重启Nginx

运行nginx -t测试配置是否正确,没有报错就运行systemctl restart nginx来重启Nginx。

提一嘴,对Nginx配置文件进行任何更改后都需要重启,否则配置不会生效。

将Nginx于V2Ray结合

终于到了激动人心的结合时间了,之前的前戏都是准备,现在才是高潮!

首先要想一个伪装路径,例如/fuckme 或 /suckmy

1.编辑Nginx网站配置文件

nano /etc/nginx/sites-enabled/default

打开配置文件之后呢,在第二个Server段里添加以下内容:

location /suckmy { 
      proxy_redirect off;
      proxy_pass http://127.0.0.1:8848; 
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

这里的/suckmy就是伪装路径,根据你的实际情况填。

然后8848这个端口是你V2Ray的监听端口,如果你的和我不一样,可以更改。

配置完成后记得重启Nginx! systemctl restart nginx

2.编辑V2Ray配置文件

nano /usr/local/etc/v2ray/config.json

打开配置文件后,删除所有内容,然后把下面这些贴进去:

{
  "log": {
    "loglevel": "warning",
    "access": "/var/log/v2ray/access.log",
    "error": "/var/log/v2ray/error.log"
   },
  "inbounds": [{
    "port": 8848,
    "protocol": "vmess",
    "settings": {
      "clients": [
        {
          "id": "xxxxx", 
          "level": 1
        }
      ]
    },
    "streamSettings": {     
        "network": "ws",
        "wsSettings": {
          "path": "/suckmy"  
        }
      },
    "listen": "127.0.0.1" 
  }],
  "outbounds": [{
    "protocol": "freedom",
    "settings": {}
  },{
    "protocol": "blackhole",
    "settings": {},
    "tag": "blocked"
  }],
  "routing": {
    "rules": [
      {
        "type": "field",
        "ip": ["geoip:private"],
        "outboundTag": "blocked"
      }
    ]
  }
}

配置文件里的监听端口记得和Nginx保持一致,然后用户ID就是之前用/usr/bin/v2ray/v2ctl uuid生成的那个。

伪装路径也要和Nginx里设置的伪装路径一致!

配置完毕之后systemctl restart v2ray重启V2Ray

3.开启防火墙

输入ufw status可以列出当前开放了哪些端口。 你目前应该开放了以下端口:

  • 22/tcp SSH登录用
  • 80/tcp acme.sh验证用
  • 8848/tcp (可能不一样,以你设置的V2Ray监听端口为准)V2Ray监听端口

然后呢还需要开放443和8080端口,443是HTTPS必须的端口,8080是我们伪装网站需要的端口。

ufw allow 443/tcp
ufw allow 8080/tcp

完成

现在V2Ray的伪装应该已经生效了,用浏览器打开 https://你的域名:8080/suckmy(根据实际情况调整端口号和路径)应该会显示Bad Request,这就代表你的伪装配置成功了!