最近有台香港的服务器被防火墙拦截了,IP无法访问,网址无法打开,运营商给反馈的是线路问题,运营商不给解决只能靠自己了。
既然服务器IP是被运营商防火墙拦截了,那么我决定套上一层CDN来解决此问题(不服你去封CDN啊),我们要知道一个CDN的节点不只你一个人再用,如果某个CDN节点被封,那么牵连的用户会一堆的,所以CDN节点IP被封的可能性极低!
当前以nginx+tls+cdn+websocket+v2ray模式来解决问题,其中nginx通过wlnmp一键包来部署。
前期准备:
1、首先你要有一个域名
2、阿里云账号一个
3、被封的服务器你要想办法连接上,可以临时买一台阿里云按量付费的服务器,通过这台机器连接上你的IP,或者通过运营商的后台进行连接
4、使用Cetnos7系统
5、如果是纯小白就不要看了,这不是写给纯小白的,看不懂还要被骂
6、我以阿里云CDN为例,速度可以保障,但是会产生费用的,想免费的话就使用cloudflare
被封的服务器配置(服务端)
1、安装依赖包
1 |
yum install curl -y |
2、运行官方安装脚本
为了防止官方脚本被河蟹,所以我这里将官方脚本内容换成了我的地址
1 |
bash <(curl -L -s https://down.whsir.com/downloads/v2ray/go.sh) |
执行完成后显示以下内容,默认端口和UUID会随机生成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Installing V2Ray v4.20.0 on x86_64 Downloading V2Ray: https://down.whsir.com/downloads/v2ray/v4.20.0/v2ray-linux-64.zip % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 11.3M 100 11.3M 0 0 2295k 0 0:00:05 0:00:05 --:--:-- 2405k Updating software repo Installing unzip Extracting V2Ray package to /tmp/v2ray. Archive: /tmp/v2ray/v2ray.zip inflating: /tmp/v2ray/config.json creating: /tmp/v2ray/doc/ inflating: /tmp/v2ray/doc/readme.md inflating: /tmp/v2ray/geoip.dat inflating: /tmp/v2ray/geosite.dat creating: /tmp/v2ray/systemd/ inflating: /tmp/v2ray/systemd/v2ray.service creating: /tmp/v2ray/systemv/ inflating: /tmp/v2ray/systemv/v2ray inflating: /tmp/v2ray/v2ctl extracting: /tmp/v2ray/v2ctl.sig inflating: /tmp/v2ray/v2ray extracting: /tmp/v2ray/v2ray.sig inflating: /tmp/v2ray/vpoint_socks_vmess.json inflating: /tmp/v2ray/vpoint_vmess_freedom.json PORT:10693 UUID:bcfac4a4-be8a-4568-b84a-15e37fa69dbd Created symlink from /etc/systemd/system/multi-user.target.wants/v2ray.service to /etc/systemd/system/v2ray.service. V2Ray v4.20.0 is installed. |
3、修改v2ray配置文件
1 |
vi /etc/v2ray/config.json |
按i进行编辑,将默认配置文件,替换成以下内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
{ "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": "/websocket/" } } }, "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" }] } } } |
按ESC,:wq保存退出
4、启动v2ray服务
1 2 |
systemctl start v2ray systemctl enable v2ray |
启动后会开启10000端口
5、免费域名证书申请
我这里以阿里云为例,购买证书地址:https://www.aliyun.com/product/cas
请按以下图例购买,选择好后费用就是0了,点击立即购买
在SSL证书管理控制台中,点击证书申请,填写你的域名,申请人姓名、手机号、邮箱、所在地随便写(不要填的太离谱了)
域名验证方式:如果你的域名在阿里云,可以选择自动DNS验证,如果域名不在阿里云,那么必须选择手工DNS验证
CSR生成方式:默认系统生成即可
待域名DNS验证通过后,等待下发证书即可,一般要5分钟~半小时就搞定
证书申请通过后请选择nginx进行下载
如果证书申请这步骤不明白,请自行去百度,太简单。
6、安装nginx
1 2 |
rpm -ivh http://mirrors.whsir.com/centos/whsir-release-centos.noarch.rpm yum install wnginx -y |
7、配置证书
1 |
mkdir /usr/local/nginx/conf/ssl |
请将申请好的证书解压缩,将文件中的xxx.pem和xxx.key文件上传到/usr/local/nginx/conf/ssl目录下
8、配置nginx
1 |
vi /usr/local/nginx/conf/nginx.conf |
删除原来内容,替换成以下内容,在xxx.com处修改成你自己的域名,xxx.pem和xxx.key换成你自己证书对应的名字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
user www www; worker_processes auto; #debug > info > notice > warn > error > crit > alert > emerg #error_log logs/error.log crit; error_log /dev/null; pid logs/nginx.pid; #google_perftools_profiles /tmp/tcmalloc; worker_rlimit_nofile 65535; events { use epoll; worker_connections 65535; multi_accept on; } http { include mime.types; default_type application/octet-stream; client_max_body_size 100m; server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 32k; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 60; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 256k; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss; gzip_vary on; gzip_proxied expired no-cache no-store private auth; gzip_disable "MSIE [1-6]\."; #proxy_cache_path /data/ngx_cache levels=1:2 keys_zone=whsir_com:10m max_size=10g inactive=60m use_temp_path=off; #lua_package_path "/usr/local/nginx/conf/waf/?.lua"; #lua_shared_dict limit 10m; #init_by_lua_file /usr/local/nginx/conf/waf/init.lua; #access_by_lua_file /usr/local/nginx/conf/waf/waf.lua; server_tokens off; access_log off; #access_log logs/access.log; server { listen 80; server_name xxx.com; return 301 https://xxx.com$request_uri; } server { listen 443 ssl http2; server_name xxx.com; #赫尔曼密钥(openssl dhparam -out dhparam.pem 2048) #证书 ssl_certificate ssl/xxx.pem; ssl_certificate_key ssl/xxx.key; #ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:RC4-SHA:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!DSS:!PKS:!RC4; ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location /websocket/ { 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; } } include vhost/*.conf; } |
这样可以达到伪装的效果,默认访问该域名时,会看到nginx的欢迎页,当然这个页面你也可以自行定义
9、重启nginx
重启前执行nginx -t检查是否有错误,如果没错请执行以下命令
1 |
/etc/init.d/nginx restart |
至此服务端配置完成
阿里云CDN配置
开通阿里云CDN全站加速:https://www.aliyun.com/product/dcdn
添加域名,添加后需要等几分钟审核
源站是服务端的IP,源站端口443
启动配置https,开启HTTP/2
打开Websocket开关,未提到的内容都保持默认即可
注意:该CDN使用的按量计费,费用相对较高
客户端配置
在当前自己电脑上下载v2rayN,这是windows的客户端
https://down.whsir.com/downloads/v2ray/v2rayN-Core.zip
解压缩运行v2rayN.exe,添加VMess服务器
最后右下角启动http代理即可,Http代理模式选择PAC就好
建议使用google浏览器验证,其他某些浏览器,可能会由于某种原因造成不可用
至此配置完成!
原文链接:通过CDN解决被防火墙拦截的IP,转载请注明来源!
很好!文章写得干净利落,有个问题想请教下博主:
通过阿里云CDN+V2Ray的方式,那访问的资源是不是都要通过阿里云的CDN服务器,再返回到我本地?这样的话,阿里云CDN服务器是不是可以看到我访问过的网址?如果我用这种方式在 youtube 上看视频,阿里云CDN流量是不是很大?
wss流量很大