2020-11-21更新:由于许可证争议,XTLS已从v2ray-core中移除,本教程换用TLS.
2021-1-1更新:建议使用xray-core.
2021-1-28更新:换用xray
2021-3-18更新:可选SNI分流(配置多证书,并在fallbacks指定”name”)
注:本文仅作一个手动搭建的简单示范,不推荐用于生产环境。且本文不积极更新,任何内容均可能过时。
对于新手,推荐阅读:小小白白话文
安装之前
- 确保系统时间正确(对于VLESS来说非必需)
- 更新内核并开启BBR(强烈建议)
- 确保80与443端口是开放的
- 安装了curl与一款趁手的文本编辑器
安装xray-core
Xray-install 脚本安装
1 2
| bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install
|
1 2 3
| crontab -e 0 0 3 * * MON /bin/bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install > /dev/null
|
安装后的配置文件路径为:/usr/local/etc/xray/config.json
选定协议并编写config
可以参考XTLS/Xray-examples仓库。
我们可以借助前置VLESS方便地配置回落。(xray的Trojan有完整的VLESS-fallbacks支持,配置方式完全一致)
其他分流方式有:前置Caddy, nginx等反代或者使用TLS分流器。
所有这些回落/分流都是为了达到443端口复用的目的,使你各种服务的流量都经SSL加密,像是在正常访问一个网站一样(防探测)。
这里选用前置VLESS-TCP-XTLS, 默认回落到trojan, trojan默认回落到nginx反代。若有其他回落需求,可参考这个示例。若有其他需求(e.g.开一个mkcp),自行添加”inbounds”.
下面附上我的配置:
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
| { "log": { "loglevel": "warning" }, "inbounds": [ { "port": 443, "protocol": "vless", "settings": { "clients": [ { "email": "[email protected]", "id": "", "flow": "xtls-rprx-direct", "level": 0 } ], "decryption": "none", "fallbacks": [ { "dest": 1310, "xver": 1 } ] }, "streamSettings": { "network": "tcp", "security": "xtls", "xtlsSettings": { "alpn": [ "http/1.1", "h2" ], "certificates": [ { "certificateFile": "/var/www/ssl/cert.pem", "keyFile": "/var/www/ssl/cert.key" } ] } } }, { "listen": "127.0.0.1", "port": 1310, "protocol": "trojan", "settings": { "clients": [ { "email": "[email protected]", "password": "", "level": 0 } ], "fallbacks": [ { "dest": 8080 } ] }, "streamSettings": { "network": "tcp", "security": "none", "tcpSettings": { "acceptProxyProtocol": true } } } ], "outbounds": [ { "protocol": "freedom" } ] }
|
PS:复制config内容的时候可能导致格式混乱,vim中执行:%!python -m json.tool
来格式化
配置反代
这里使用的是nginx,其他(如:Caddy2)同理
安装nginx (也可以自行编译安装)
修改nginx配置文件
1
| nano /etc/nginx/sites-available/default
|
附上我的配置文件(示例):
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
| server { listen 80; listen [::]:80; server_name example.com; #替换为你的域名 rewrite ^(.*)$ https://${server_name}$1 permanent; }
server { listen 8080 http2; server_name example.com; #替换为你的域名 add_header Content-Security-Policy upgrade-insecure-requests; #混合内容均升级为https location / { #指向你的博客或者其他程序监听的端口 proxy_pass http://localhost:8081/; } # 也可以同时列个文件 # location /file/ { # #root /var/www; # alias /var/www/file; # charset utf-8; # autoindex on; # autoindex_exact_size off; # autoindex_localtime on; # try_files $uri $uri/ =404; # } }
# server { # listen unix:/dev/shm/nginx_unixsocket/default.sock; # listen unix:/dev/shm/nginx_unixsocket/h2.sock http2; # server_name another.domain; # add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" always; # root /path/to/webroot/; # index index.html; # }
|
每次修改配置文件后记得systemctl reload nginx
配置SSL证书
拥有一个域名
首先你要拥有一个域名,并将A记录指向你的服务器IP地址。没有的可以去Freenom申请一个免费域名,或者购买一个自己的域名。
如果你想购买一个属于自己的域名,我推荐NameSilo(这是我的推广链接),你可以使用我的优惠码 ColderOne 来节省1USD.
申请证书
借助acme.sh脚本自动化申请、续约LE证书
流程可以参考其中文Wiki
如果你遇到问题,可以暂时关闭占用80端口的程序使用standalone模式申请证书。使用standalone模式必须安装socat
示例:使用nginx模式生成证书
1
| acme.sh --issue -d example.com --nginx //example.com替换为你的域名
|
安装证书
生成证书后我们将证书导出至v2ray配置文件中指定的目录 (自行替换你的域名和路径)
1 2 3 4
| acme.sh --install-cert -d example.com \ --key-file /var/www/ssl/cert.key \ --fullchain-file /var/www/ssl/cert.pem \ --reloadcmd "systemctl restart xray"
|
--reloadcmd
十分重要,它保证你的证书更新后能够被服务器刷新,这里指的是能被xray重新加载(类似有--post-hook
与--renew-hook
)
最后解决一下证书权限问题,参考这篇说明的方案二
启动xray
1 2
| systemctl enable xray systemctl restart xray
|