9
目录
前言
十月由于国庆,墙又被高高筑起,我的两个搬瓦工的服务器的 IP
全部被封了,那段时间全部是用的 VPN
, 不过还是没有 ss
用起来方便,终于到了 20
号左右,IP
给解封了。才用了没几天,可能是因为香港的区议会选举,墙有开始搞事。这次不是封 IP
,开始是封端口,我改了两次端口,这两天变成了监控流量,只有一走流量 ss
就断一下, 真的是难受,今天甚至连 GitHub
都连不上了,真的是非常无语。而且这两天因为墙的封锁更严苛,VPN
也是经常连不上,本来是想等等的,但是 GitHub
上不去实在不能忍,只能去搞了搞 V2Ray
,跟着网上的教程配置了一下,现在终于可以正常访问了,本文记录一下配置过程。
V2Ray WebSocket+TLS+Nginx 的安装配置过程
我的服务器是 CentOS7
,所以下面的安装和配置步骤都是针对 CentOS
的,其他的系统可以自行 Google
。
购买域名并配置解析
首先要做的是购买一个域名添加一条 A
记录解析到你的服务器 IP
。为了避免被墙识别,需要对请求进行伪装,这是必要的一步。域名购买可以从阿里云或者国外的提供商 GoDaddy
,国内的域名提供商都需要实名制,我因为嫌麻烦直接就在阿里云买了一个(结果忙中出错,选域名的时候打错字,把 server
打成了 sever
,郁闷)。买好域名后,一般在网站后台添加解析记录就行了,添加一条 A
记录解析到你的服务器 IP
即可。
安装 V2Ray
# 更新全部包
yum -y update
# 安装V2Ray
bash <(curl -L -s https://install.direct/go.sh)
# 设置V2Ray开机启动
systemctl enable v2ray
安装 SSL 证书
这里要单独说一下我在安装 certbot
的时候一直提示我找不到这个 package
,最后在 stackoverflow
上找到的一个方法解决了这个问题。我们在为自己的网站配置 HTTPS
的时候也可以用 certbot
作为免费的 SSL
证书来源,当然阿里云也提供了免费的 SSL
证书,两者的有效期都是一年,都需要更新的。关于 certbot
的证书更新可以参考这篇文章:Certbot对免费Let’s Encrypt证书的自动续期,So Easy!
# 先删除epel源
yum remove epel-release
yum clean all
#安装epel源和certbot
sudo yum -y install yum-utils
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional
sudo yum install certbot
Yum
(全称为Yellow dog Updater
,Modified
)是一个在Fedora
和RedHat
以及CentOS
中的Shell前端软件包管理器。EPEL
(Extra Packages for Enterprise Linux
,企业版Linux
的额外软件包) 是Fedora
小组维护的一个软件仓库项目,为RHEL/CentOS
提供他们默认不提供的软件包。
certbot
安装完成后就可以继续下面的配置证书的步骤了。
# 添加免费SSL证书,example.com改为你上面购买的域名
certbot certonly --standalone -d example.com
# 安装成功后的证书路径
/etc/letsencrypt/live/example.com/fullchain.pem
/etc/letsencrypt/live/example.com/privkey.pem
安装配置 nginx
# 添加nginx源
vi /etc/yum.repos.d/nginx.repo
# 在上面的vi打开的文件中写入如下内容
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
# 将上面的文件保存后安装nginx
yum -y install nginx
# 设置nginx的开机启动
systemctl enable nginx
# 新建一个nginx的站点配置文件
vi /etc/nginx/conf.d/v2ray.conf
# 在上面打开的配置文件中写入如下内容
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
error_page 497 https://$host$request_uri;
location /ray {
proxy_pass http://127.0.0.1:10000;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
}
其中 443
是网站端口同时也是 V2Ray
传输端口,127.0.0.1:10000
其中的 10000
是监听端口,可以自行更改,然后防火墙放行所需端口,或者直接关闭防火墙。我的 VPS
默认防火墙是关闭的,关于 CentOS
的防火墙配置可以参考这两篇文章:Centos 7和 Centos 6开放查看端口 防火墙关闭打开,Centos防火墙设置与端口开放的方法
配置 V2Ray 服务端
# 备份默认配置文件
cp /etc/v2ray/config.json /etc/v2ray/config.jsonbak
# 清空配置文件并写入新的配置
echo "" > /etc/v2ray/config.json
vi /etc/v2ray/config.json
{
"inbounds": [
{
"port": 10000,
"listen":"127.0.0.1",
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "你的UUID",
"alterId": 64
}
]
},
"streamSettings": {
"network": "ws",
"wsSettings": {
"path": "/ray"
}
}
}
],
"outbounds": [
{
"protocol": "freedom",
"settings": {}
}
]
}
# 关闭防火墙
systemctl stop firewalld
# 启动V2Ray和Nginx
systemctl start v2ray
systemctl start nginx
# 查看服务状态,显示绿色的active则说明服务启动成功,enable则说明开机启动
systemctl status v2ray
systemctl status nginx
UUID
可以到这个网站生成 https://www.uuidgenerator.net
客户端配置
客户端的配置我就讲一讲我日常用的 Mac
和 IOS
了,Mac
上用的是V2RayU。IOS
上和 ss
一样用的是 Shadowrocket
,这个软件也支持 V2Ray
,不过需要到美区的 App Store
下载(12¥
),付款方法可以参考我的这篇文章如何给美服Apple ID充值。具体的配置看下面两张图:
按照图中的配置进行设置即可,手机上如果发现开启后还是不能访问 Google
,就开启一下飞行模式然后在打开即可。而 Mac
上的 V2RayU
需要特别注意一点的是在上图中的 basic setting
中的默认端口和 ShadowsocksX-NG
客户端的端口是冲突的,需要改一改,否则也是不能正常使用的,模式记得选择 PAC
模式。
其他平台的客户端可以参考这篇文章:V2Ray客户端
一键安装脚本
不想要这么麻烦的可以使用一键安装脚本 V2Ray_ws-tls_bash_onekey,需要注意的是同样需要先购买域名并配置解析。
yum update -y && yum install curl -y
bash <(curl -L -s https://raw.githubusercontent.com/wulabing/V2Ray_ws-tls_bash_onekey/master/install.sh) | tee v2ray_ins.log
systemctl start v2ray
systemctl start nginx
再附上评论区的同学推荐的 multi-v2ray,可以自行选择。
两个注意点
V2Ray
的客户端Core
和服务端Core
版本必须一致,请自行更新,bash <(curl -L -s https://install.direct/go.sh)
。V2Ray
对本地时间和服务端时间的要求较高,一般执行脚本后会自动校时,如出现连接失误,请检查服务器的时间,date -R
。
user-rules 规则
写 user-rulese
参考Adblock Plus filters explained,这里说一下几个常用符号的意思。
||
: 域名锚,后接域名。比如||abc.com
,匹配任何协议下的子域名,比如https://abc.com
,http://test.abc.com
等。|
: 开始和结束锚,他们之间就是确定的地址,不会进行模糊匹配。比如|https://abc.com|
,只会匹配确定的地址htpps://abc.com
。*
: 通配符,匹配任意字符。比如/banner/*/img
会匹配http://example.com/banner/foo/img
http://example.com/banner/foo/bar/img
。(结尾的通配符可以省略)^
: 地址在此处结束或者匹配?
或者/
。@@
: 在写好的匹配模式前加上@@
,表示该匹配不使用代理。
如果保存了以后仍未生效,则重启一下客户端。
总结
虽然我能明白墙有墙的必要,但是有时候被折腾的真的郁闷,特别是今天连 GitHub
都被墙了。有时候想想国外程序员几秒钟能搞定的事情,我们要多花那么多时间,还要看墙的脸色,突然开个什么会搞个什么活动就又要折腾,所以能理解有些人想肉身翻墙。希望以后能越来越好吧,虽然我一点也不乐观,政治的问题不想多说,不过就目前的形势估计还是论持久战,国内的程序员只能先憋屈着了。虽然憋屈,但我相信最终胜利的是 CHINA
,相信一切都是值得的 :fist: 。
参考文章
- [V2Ray 进阶配置 WebSocket+TLS+Nginx](