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,这就代表你的伪装配置成功了!