前言
之前介绍过v2ray利用CDN(cloudflare)的方法,本次介绍的方法和上次有不少的相似之处,本次介绍一下将V2RAY隐藏到正常的网站背后,这样访问域名的时候看到的时候正常的网页,但是使用v2ray链接的话则可以实现梯子的功能。当然如果要实现访问域名出现一个正常网站的功能,你需要一个网站,然而自己建立一个网站也太麻烦了,我们可以反代一下别人的网站,这样访问你域名的时候则可以显示别人网站的页面,并且可以在微型小鸡上实现这样的功能。
准备
本次以debian/ubuntu系统为例,当然centos系统的配置差不了太多。
一个域名:可以申请免费域名,freenom.com,将域名A记录指向服务器。
一台服务器:64M内存就可以用了。服务器购买:Vultr,最低2.5刀一月,注册送10刀,支持支付宝。
一个欲反代的网站:选择一个简单点的网站,因为很多大网站会有安全措施,反代起来有点麻烦。
配置nginx
卸载apache。部分服务商提供的系统模版里面自带了apche,但是我们不需要它,并且它会影响到NGINX的使用,所以这里卸载它。
service apache2 stop apt-get remove apche* -y
安装nginx
debian/ubuntu
apt-get install nginx -y
创建dhparam.pem文件
mkdir -p/etc/nginx/ssl openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
设置nginx配置文件,vi /etc/nginx/sites-enabled/你的域名.conf
server { listen 80; #listen [::]:80; server_name 你的域名 ; #将http重定向到https return 301 https://你的域名$request_uri; } server { listen 443 ssl http2; #listen [::]:443 ssl http2; server_name 你的域名 ; ssl on; ssl_certificate /etc/nginx/ssl/你的域名/fullchain.cer; ssl_certificate_key /etc/nginx/ssl/你的域名/privkey.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5"; ssl_session_cache builtin:1000 shared:SSL:10m; # openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048 ssl_dhparam /etc/nginx/ssl/dhparam.pem; access_log off; location / { #向后端传递访客IP proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #设定需要反代的域名,可以加端口号 proxy_pass http://148.251.3.246:22900/; #替换网站内容 sub_filter '你反代的对象' '你的域名'; # websocket设定,V2ray使用,这里的设置要和v2ray的设置一致。 location /phpmyadmin/ { proxy_redirect off; #proxy_pass http://127.0.0.1:10000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; proxy_intercept_errors on; if ($http_upgrade = "websocket" ){ proxy_pass http://127.0.0.1:10000; } } } }
上面设定中的proxy_pass http://148.251.3.246:22900/;
就是设定想要反代的域名的地方,148.251.3.246:22900是我挂的一个探针页面,以作测试用,当然你也可以改成其他的网站,比如https://github.com/,如果你反代的https://github.com那么sub_filter '你反代的对象' '你的域名';
就是sub_filter 'github.com' 'yourdomain.com';
申请证书
安装acme.sh,一个自动化的Let's Encrypt证书申请程序。
apt-get install socat -y curl https://get.acme.sh | sh
以下命令都要在.acme.sh
的目录内执行,root用户的在/root/.acme.sh
之前我介绍过用API申请LET'S证书的方法,但是相对来说比较复杂,这里用一种简单的方法,使用nginx方法来申请证书,使用nginx方法申请证书的话,需要先保证有关于这个域名的nginx配置在本例当中,就是上面那个配置文件。
申请证书
acme.sh --issue --nginx -d 你的域名 -d 你的域名
acme.sh脚本可以一次申请多个域名证书,只需要多家-d参数。
创建目录存放证书。
mkdir -p /etc/nginx/ssl/你的域名
将证书安装到nginx。不建议直接在nginx中使用~/.acme.sh/你的域名
里面的证书,这个目录仅供内部使用,将来可能会改变结构。
acme.sh --install-cert -d 你的域名 \ --key-file /etc/nginx/ssl/你的域名/privkey.key \ --fullchain-file /etc/nginx/ssl/你的域名/fullchain.cer \ --reloadcmd "service nginx force-reload"
这个时候访问你的域名,你应该就能看到被你反代的网站了。
配置v2ray
安装v2ray
使用官方的安装脚本
bash <(curl -L -s https://install.direct/go.sh)
如果提示:-bash: curl: command not found
那么安装curl
apt-get install curl -y
清空/etc/v2ray/config.json
的内容,然后粘贴以下内容进去,vi /etc/v2ray/config.json
{ "log": { "access": "/var/log/v2ray/access.log", "error": "/var/log/v2ray/error.log", "loglevel": "info" }, "inbound": { "port": 10000, "listen": "127.0.0.1", "protocol": "vmess", "allocate": { "strategy": "always" }, "settings": { "clients": [{ "id": "6d8a82b9-94d6-442e-a340-2b9cd5752c77", "level": 1, "alterId": 64, "security": "chacha20-poly1305" }] }, "streamSettings": { "network": "ws", "wsSettings": { "connectionReuse": false, "path": "/phpmyadmin/" } } }, "outbound": { "protocol": "freedom", "settings": {} }, "outboundDetour": [{ "protocol": "blackhole", "settings": {}, "tag": "blocked" }], "routing": { "strategy": "rules", "settings": { "rules": [{ "type": "field", "ip": ["0.0.0.0/8", "10.0.0.0/8", "100.64.0.0/10", "127.0.0.0/8", "169.254.0.0/16", "172.16.0.0/12", "192.0.0.0/24", "192.0.2.0/24", "192.168.0.0/16", "198.18.0.0/15", "198.51.100.0/24", "203.0.113.0/24", "::1/128", "fc00::/7", "fe80::/10"], "outboundTag": "blocked" }] } } }
上面"id": "6d8a82b9-94d6-442e-a340-2b9cd5752c77",
里面的ID可以通过https://www.uuidgenerator.net/这里自助生成,强烈建议修改该值。
客户端的使用
在https://github.com/v2ray/v2ray-core/releases查看并下载适合于自己系统的程序。
(注:V2RAY客户端和服务端一体,只是配置方式的不同,因此此处服务端和客户端在同一个地方下载,但是服务端和客户端的系统可能不同,因此应下载不同版本的程序。windows系统应下载:v2ray-windows-32.zip或者v2ray-windows-64.zip)
修改 config.json 配置为以下内容,注意 address (第25行)填写网站域名。
{ "log": { "access": "", "error": "", "loglevel": "" }, "inbound": { "port": 1085, "listen": "0.0.0.0", "protocol": "socks", "settings": { "auth": "noauth", "udp": true, "ip": "127.0.0.1", "clients": null }, "streamSettings": null }, "outbound": { "tag": "agentout", "protocol": "vmess", "settings": { "vnext": [ { "address": "网站域名", "port": 443, "users": [ { "id": "6d8a82b9-94d6-442e-a340-2b9cd5752c77", "alterId": 64, "security": "chacha20-poly1305" } ] } ] }, "streamSettings": { "network": "ws", "security": "tls", "tcpSettings": null, "kcpSettings": null, "wsSettings": { "connectionReuse": true, "path": "/phpmyadmin/", "headers": null } }, "mux": { "enabled": true } }, "inboundDetour": null, "outboundDetour": [ { "protocol": "freedom", "settings": { "response": null }, "tag": "direct" }, { "protocol": "blackhole", "settings": { "response": { "type": "http" } }, "tag": "blockout" } ], "dns": { "servers": [ "8.8.8.8", "8.8.4.4", "localhost" ] }, "routing": { "strategy": "rules", "settings": { "domainStrategy": "IPIfNonMatch", "rules": [ { "type": "field", "port": null, "outboundTag": "direct", "ip": [ "0.0.0.0/8", "10.0.0.0/8", "100.64.0.0/10", "127.0.0.0/8", "169.254.0.0/16", "172.16.0.0/12", "192.0.0.0/24", "192.0.2.0/24", "192.168.0.0/16", "198.18.0.0/15", "198.51.100.0/24", "203.0.113.0/24", "::1/128", "fc00::/7", "fe80::/10" ], "domain": null }, { "type": "field", "port": null, "outboundTag": "direct", "ip": null, "domain": [ "geosite:cn" ] }, { "type": "field", "port": null, "outboundTag": "direct", "ip": [ "geoip:cn" ], "domain": null } ] } } }
此时启用你的客户端,应该就可以实现利用CDN中转了。
客户端运行 v2ray 或 v2ray.exe,直接运行即可
本地 socks 代理为 127.0.0.1:1085
第三方客户端配置 address(网站域名)、port(443)、id(很长那串)、alterId(64)、security(chacha20-poly1305)、network(ws)、path(/v2ray/)、底层传输安全(tls)
参考链接:
https://github.com/iMeiji/shadowsocks_install/wiki/Project-V-%E9%85%8D%E7%BD%AE-WebSocket-TLS-Web-CDN
V2RAY及NGINX的配置中WEBSOCKET的路径该去哪儿找?这点不太明白,麻烦说明。谢谢。
这个需要自己配置的
證書申請成功後,restart nginx會得到下面錯誤訊息:
SSL: error:0906D06C:PEM routines:PEM_read_bio:no start line:Expecting: TRUSTED CERTIFICATE
查看證書開頭為:-----BEGIN CERTIFICATE-----
請問我要如何修改才能得到開頭為:-----BEGIN TRUSTED CERTIFICATE-----的證書
或著是怎麼做才能讓錯誤消失?
合并一下证书链试试呢?
您好,请问在申请证书“acme.sh --issue --nginx -d 你的域名 -d 你的域名”这一步执行的时候,会报异常【nginx:[emerg]BIO_new_file("/etc/nginx/ssl/xxxxxx.com/fullchain.cer")failed(SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/nginx/ssl/xxxxxx.com/fullchain.cer','r')】。我看了一下这条命令是去读nginx配置文件中所配置的“ssl_certificate”和“ssl_certificate_key”去了,但现在申请证书这步执行时,这两个配置项对应路径下的文件明显还没有呢!这个问题该如何解决啊?求教。
尝试添加/etc/nginx/ssl/这个目录呢?
按lz的方法申请证书没成功,我说一下我用的方法做参考吧。(*╹▽╹*)
按照“https://certbot.eff.org/lets-encrypt/debianstretch-nginx”的步骤安装cerbot
sudo apt-get install certbot python-certbot-nginx
然后确保site-available文件夹里只有nginx默认生成的defalut链接,运行
sudo certbot --nginx
会有让输入相关的信息创建证书,完成之后证书位置在
/etc/letsencrypt/live/<域名>/fullchain.pem
/etc/letsencrypt/live/<域名>/privkey.pem
之后再把nginx配置中的
ssl_certificate /etc/nginx/ssl/你的域名/fullchain.cer;
ssl_certificate_key /etc/nginx/ssl/你的域名/privkey.key;
分别修改成请求的证书和私钥的位置就可以了
配置里这一句
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
需要注释掉
另外配置第三方v2ray客户端的时候,path一项需要填/phpmyadmin/
64M的小内存,不会爆掉吗?
当然不会啊。。
为什么我按楼主的步骤全走完了,打开自己的域名不会到反代的网站,还是自己nginx的默认页,v2ray不能正常工作,我应该重点检查哪里?一点头绪都没有。
看看proxy_pass相关的配置文件
大佬你好。我想问一下,NGINX里。我已经成功设置TLS能用了。
但是我打开网址会显示Bad Request,请问现在我的NGINX里需要怎么设置,才能打开网址后会车到ONEDRIVE网站呀?谢谢。
微软的那个onedrive么?