前言
- vps:一台在墙外的vps服务器,它能自由上网
- v2ray:负责你的网络与vps之间的网络通讯
- VMess:一个加密传输协议,通常作为 V2Ray 客户端和服务器之间的桥梁。
- nginx:作为web服务器,负载均衡服务器,邮件服务器等,本例用到web服务器功能部署网站
- websock:一个传输协议,支持全双工,大概用来客户端与服务端中传输数据包
- tls:传输层安全协议,用来加密http
- 流程:{浏览器} <–(socks) {V2Ray 客户端 inbound <-> V2Ray 客户端 outbound} <–(VMess)–> {V2Ray 服务器 inbound <-> V2Ray 服务器 outbound} <–(Freedom)–> {目标网站}–>
1 2 3 4 5 6
| flowchart LR; A[用户浏览器] -->|请求访问| B(域名解析到VPS IP); B -->|443端口| C[Nginx]; C -->|WebSocket| D[v2ray]; D -->|TLS| E[网络]; E -->|请求Google等网站| F[Google等网站];
|
大致步骤:
- 1.购买vps,获得root用户名及密码,ssh端口等信息
- 2.登录vps,使用到Xshell软件等,有免费版
- 3.安装和配置v2ray等软件,完成搭建
- 4.终端配置v2ray信息
1 购买vps和域名
1. 选择vps服务商
购买虚拟服务器,注意海外服务器ip也有被墙封的风险。
本例用的是racknerd服务商,vps用的系统是debian 10
2.选服务器位置
- 服务器位置首选美国西海岸的 Los Angeles、或者亚洲的东京、新加坡,当然其它国家地区都可以尝试,
- 可通过cmd窗口ping指令测速,time越小越好
3.选操作系统
Debian 10 x 64等稳定的
之后就是选服务器配置(看价格),支付等。购买完成将得到VPS的IP地址、SSH端,vps控制台账密,root用户及密码等信息。
1.2 购买域名
1.申请域名
本例用的是https://www.namesilo.com/,申请的域名:ijiumi.top
2.域名解析
就是将你的域名指向你的服务器ip地址,绑定了才可以通过域名访问你的网站,步骤如下:
- 在namesilo管理后台点击域名,点击更新DNS记录。
- 删除默认的dns记录。
- 添加A类型的www和@两条记录到你的vps ip地址,配置完dns记录后可能需要一点时间才能生效。
HOSTNAME | TYPE | ADDRESS |
---|
| A | 购买的vps地址 |
www | A | 购买的vps地址 |
3.修改namesilo的DNS服务器为Cloudflare(可选)
可以为你的域名cdn加速(看情况)和隐藏你的真实服务器ip地址。注册登录cloudflare账号,添加你要加速的网站,选择免费版,修改dns记录,到namesilo后台修改nameservers为Clodflare提供给你的dns服务器地址
2 安装和配置
使用Xshell等ssh工具登录vps
2.1 安装v2ray
v2ray官网
1.下载安装v2ray
1 2 3 4 5
| sudo apt install curl
bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)
|
2.配置v2ray服务端
打开config的配置文件
1 2
| vi /usr/local/etc/v2ray/config.json
|
添加以下内容,其中:
- id:uuid,v2ray认证的凭证,相当于配置密码,不要泄露。可以使用
cat /proc/sys/kernel/random/uuid
命令生成一个。 - port:端口号随意,只要不冲突
- alterId:可以配置成0
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
| { "log": { "access": "/var/log/v2ray/access.log", "error": "/var/log/v2ray/error.log", "loglevel": "warning" }, "inbounds": [{ "port": 23333, "protocol": "vmess", "settings": { "clients": [{ "id": "c51b2a76-ebfa-4e06-b767-3da42f6e482b", "level": 1, "alterId": 0 } ] }, "streamSettings": { "network": "ws", "wsSettings": { "path": "/tech" } } } ],
"outbounds": [{ "protocol": "freedom" } ] }
|
3.设置v2ray开机自启
1 2 3 4 5
| systemctl start v2ray;systemctl enable v2ray
systemctl status v2ray
|
2.2 安装nginx和部署静态网站
1.新建一个静态网页,路径自选
1 2 3 4 5
| mkdir -p /honme/www/ijiumi-top vi /honme/www/ijiumi-top/index.html
chmod -R 777 /home/www
|
网页内容任意:
1 2 3 4 5 6 7
| <html> <title>建设中...</title> <head><meta charset="UTF-8"></head> <body bgcolor="#E6E6FA"> <h1>Hi,欢迎访问ijiumi.top</h1> </body> </html>
|
2.下载nginx
3.配置Nginx
使用命令nginx -t
查看nginx默认配置路径,返回形如/etc/nginx/nginx.conf
的路径,
nginx.conf
是nginx的主配置文件。
为了方便管理多个配置,使用命令vim /etc/nginx/nginx.conf
打开nginx.conf文件输入以下内容,将包含conf.d目录下所有以 .conf 结尾的文件作为配置文件。
1 2
| # 在http 块下增加: include /etc/nginx/conf.d/*.conf;
|
在conf.d 文件夹下新建配置文件,例如vim /etc/nginx/conf.d/ijiumi-top.conf
,添加以下内容:
1 2 3 4 5 6 7 8
| #一份有效的配置 server{ listen 80 ; listen [::]:80 ; server_name ijiumi.top; index index.html; root /honme/www/ijiumi-top; }
|
4. 启动或刷新nginx查看效果
1 2 3 4 5
| systemctl start nginx;systemctl enable nginx
nginx -s reload
|
此时可以用http方式访问你的网站了,例如http:ijiumi.top
2.3 安装certbot并申请ssl证书
1.安装snap软件和certbot
1 2 3 4 5 6 7 8 9 10 11
| apt install -y snapd
snap install core; snap refresh core
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot
|
2.申请https证书
首次申请需要输入你的邮箱,以及你要申请证书的域名(就是刚才申请的域名),完成后会有successful提示,并且配置会被修改,此时就可以通过https访问你的域名。
3.证书管理
certbot会自动配置自动续期,输入以下命令查看证书有效期及续订情况。
1 2 3 4 5 6 7 8
| certbot certificates
certbot renew --dry-run
certbot delete
|
经过certbot配置后,nginx配置会自动添加以下内容:
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
| server{ server_name ijiumi.top; index index.html; root /home/www/ijiumi-top;
listen 443 ssl; # managed by Certbot listen [::]:443; ssl_certificate /etc/letsencrypt/live/ijiumi.top/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/ijiumi.top/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
} server{ if ($host = ijiumi.top) { return 301 https://$host$request_uri; } # managed by Certbot
listen 80; listen [::]:80; server_name ijiumi.top; return 404; # managed by Certbot
}
|
配置解释
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
| server{ listen 80; # 指定端口,nginx默认端口为80 server_name domain.com; # 指定域名 location / { root /home/ubuntu/domain-com; # 指定静态网站根目录 index index.html; # 指定默认访问的文件 # Nginx 支持 rewrite 功能: # 访问网址链接时自动追加 .html 后缀(这样,访问网址时就可以不用 .html 后缀) if (!-e $request_filename){ rewrite ^(.*)$ /$1.html last; break; } } # Nginx 支持 rewrite 功能: # 可以将默认 80 端口的 HTTP 请求重定向为 HTTPS(可选项,可以不配置)。 rewrite ^(.*)$ https://$host$1 permanent; }
# 腾讯云 https 访问配置 server { #SSL 访问端口号为 443 #listen 443; #启用 SSL 功能 #ssl on; # 由于版本问题,配置文件可能存在不同的写法。此处需要使用 listen 443 ssl 代替以上写法 listen 443 ssl; #填写绑定证书的域名 server_name domain.com; #证书文件名称(此处的证书文件放在 /etc/nginx/ssl-nginx-qcloud 目录下) ssl_certificate ./ssl-nginx-qcloud/1_domain.com_bundle.crt; #私钥文件名称(此处的私钥文件放在 /etc/nginx/ssl-nginx-qcloud 目录下) ssl_certificate_key ./ssl-nginx-qcloud/2_domain.com.key; ssl_session_timeout 5m; #请按照以下协议配置 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准(照抄即可不用修改)。 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; location / { #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。 root /home/ubuntu/domain-com; #指定默认访问的文件 index index.html; # Nginx 支持 rewrite 功能: # 访问网址链接时自动追加 .html 后缀(这样,访问网址时就可以不用 .html 后缀)。 if (!-e $request_filename){ rewrite ^(.*)$ /$1.html last; break; } } }
|
2.4 添加v2ray转发
打开nginx配置中添加v2ray转发内容,重启nginx
以下是一份有效的最终配置:
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
| server{ server_name ijiumi.top; index index.html; root /home/www/ijiumi-top;
listen 443 ssl; # managed by Certbot listen [::]:443; ssl_certificate /etc/letsencrypt/live/ijiumi.top/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/ijiumi.top/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
## 添加这部分内容,23333对应/usr/local/etc/v2ray/config.json 里面inbounds端口 ## /tech客户端配置的时候需要,对应/usr/local/etc/v2ray/config.json streamSettings里的path location /tech { proxy_redirect off; proxy_pass http://127.0.0.1:23333; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; } } server{ if ($host = ijiumi.top) { return 301 https://$host$request_uri; } # managed by Certbot
listen 80; listen [::]:80; server_name ijiumi.top; return 404; # managed by Certbot }
|
2.5 同步服务器时间
使用 V2Ray 要保证时间准确,安装ntp服务以同步服务器的系统时间。
客户端的时区不一定需要和服务器相同。
1 2 3 4 5 6 7 8 9 10 11
| apt-get install ntpdate
service --status-all
ntpdate ntp.api.bz
reboot
|
其他一些可能用到的命令:
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
| su root
passwd root
date
cat /etc/timezone
sudo rm -f /etc/localtime sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
apt install -y lrzsz
rz fileName
sz fileName
|
3设置客户端
V2Ray Windows 的客户端可以使用v2ray-core(官方客户端,命令行方式)。也可以使用v2rayN(基于 v2ray-core的辅助工具,带图形化的界面),相应的Android平台上的客户端app可以使用v2rayNG。
这里Windows 的v2rayN-6.42版本为例,运行v2rayN客户端,在v2rayN主界面下方系统代理
模式选择自动配置系统代理
,路由
建议选择绕过大陆(Whitelist)
。
在菜单栏选择添加[VMESS]服务器
新建一个配置,根据以下内容进行填写,配置完后选择设置为活动服务器
即可。
- 别名:任意
- 地址:服务器主机地址,即vps IP地址
- 端口:443
- 用户id:服务器v2ray的config配置的id
- 额外ID:现在默认0
- 加密方式:auto
- 传输协议:ws
- 伪装类型:nore
- 伪装域名:空
- 路径:/tech,与服务器配置保持一致
- 传输安全:tls,跳过证书验证true
当Windows配置完成后,可以右键选择批量导出分享URL至剪切板
将配置以Base64字符串的形式导出到剪切板,之后可以一键配置到手机或者其他客户端。
4 优化(可选)
4.1 开启 Google BBR加速
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| Debian 9可以直接通过参数开启Google BBR,设置过程如下(我是使用root用户操作的): 1.修改系统变量,如果你是root用户执行: echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
2.保存,使更改生效 sysctl -p
3.查看内核是否已开启BBR sysctl net.ipv4.tcp_available_congestion_control
显示以下即已开启:
net.ipv4.tcp_available_congestion_control = bbr cubic reno
4.查看BBR是否启动 lsmod | grep bbr 5.显示以下即启动成功 tcp_bbr 20480 17
6.重启系统 reboot
|
4.2 使用cloudflare中转流量,隐藏真实IP
使用cloudflare(CF)进行cdn中转可以隐藏服务器的真实ip,能防止ip被墙,但是cloudflare免费套餐可能有一定延迟,比vps直接连慢。这就看情况取舍,一般除非服务器ip被墙,否则不需要上cdn。
5 报错
1.vmess md5 认证信息弃用
1
| invalid user: VMessAEAD is enforced and a non VMessAEAD connection is received.
|
解决方法:
- 方法一:配置 alterId 为0
- 方法二:禁用vmessaead,设置环境变量 v2ray.vmess.aead.forced = false
输入指令vi cat /etc/systemd/system/v2ray.service
,添加环境变量设置,并重启v2ray systemctl daemon-reload;v2ray restart
配置如下:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| [Unit] Description=V2Ray Service Documentation=https://www.v2fly.org/ After=network.target nss-lookup.target
[Service]
Environment="V2RAY_VMESS_AEAD_FORCED=false" User=nobody CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE NoNewPrivileges=true
ExecStart=/usr/bin/env v2ray.vmess.aead.forced=false /usr/local/bin/v2ray -config /usr/local/etc/v2ray/config.json Restart=on-failure RestartPreventExitStatus=23
[Install] WantedBy=multi-user.target
|
2.找不到AppArmor 配置
1
| missing profile snap.certbot.certbot.Please make sure that the snapd.apparmor service is enabled and started**
|
解决方法:1 2
| systemctl enable apparmor systemctl start apparmor
|
3.超时或者一个客户端可以用,另一个不可以
注意同步一下服务器时间以及客户端时间
参考链接
[1] v2ray官网
[2] v2ray搭建过程图文教程