最近一直在探索trojan+v2ray共存的搭建技术,油管也有很多播出共存的视频,但万变不离其中,都是表面共存,实际运行机制还是先trojan,后nginx转发给v2ray的方式,这种搭建方案牺牲v2ray和nginx的数据传输安全,只有trojan有https安全隧道保护。搭建共存安全风险提高,而且浪费vps资源。所以,Littleyu抛弃旧有的共存思想,脱胎换骨分享一期目前油管视频史无前例,也是当前最科学,最安全,最专业的共存搭建方案。
搭建准备的东西:域名一个(有ssl证书),vps一台(centos7操作系统)。
众所周知,https协议使用的是计算机443端口,将443端口交由nginx使用,由nginx监听所有ip对443端口的访问,通过域名请求服务做出智能转发的功能,nginx起到前端域名管理识别,后端端口管理转发的功能,同时还提供web网站服务。
通过上图获知,利用二级域名的识别,nginx完成相对应的服务请求转发,比如v2rayN客户端连接的地址为:vmess.yugogogo.tk:443,服务器的nginx收到请求,并识别为v2ray流量,将请求转发给v2ray服务程序,v2ray接收请求并提供科学上网服务。后面的trojan及网站服务以此类推,不再赘述。
1,首先登录FreeSSL官网,将自己的域名(比如我的站点域名:www.yugogogo.tk)填入此中。品牌选择“亚洲诚信”,然后点击“点击创建免费的ssl证书”按钮。
2,来到第二页面,这里填入个人电子邮箱,以下配置全部使用默认选项。我们这里选择DNS验证,如果希望使用文件验证,验证教程请参照(纯手动安装最新官方trojan,搭建网站专业伪装)的申请部署ssl证书一文。然后点击创建。
3,在本地电脑先下载安装KeyManager软件(用于生成离线CSR私匙和保存证书所用),安装好并启用,KeyManager会为我们域名生成私匙,然后回到浏览器中,将dns验证的配置信息放入托管域名解析商的服务器中,用于验证。
4,将TXT记录和记录值两项信息复制粘贴到域名解析服务器的解析处,
5,当解析好,返回到dns验证页面,点击验证。若验证通过,则自动显示颁发证书的信息,点击保存到KeyManager软件中。
1,回到KeyManager软件,点击获取证书域名右边的更多,然后点击证书详情,再点击查看查看PEM,如下图
2,将上图中的证书和密匙信息通过右边的复制按钮复制,然后登录vps终端,输入以下命令分别创建证书和密匙文件,将其复制的密匙内容粘贴到对应的文件中保存。
#创建证书文件并粘贴证书密匙信息 vi /etc/ssl/fullchain.pem #粘贴后,输入英文格式的冒号加wq保存退出 #创建私匙文件并粘贴密匙信息 vi /etc/ssl/yugogogo.tk.pem #粘贴后,输入英文格式的冒号加wq保存退出
1,安装v2ray,并设置配置信息
bash <(curl -L -s https://install.direct/go.sh) #v2ray一键安装脚本
安装完成,默认启动,把v2ray的端口号和UUID号复制出来,后面需要配置到nginx中
2,安装trojan,并设置配置信息
cd /usr/src/ #进入指定目录安装
yum install -y wget #安装下载依赖命令,已安装过可跳过
wget https://github.com/trojan-gfw/trojan/releases/download/v1.14.1/trojan-1.14.1-linux-amd64.tar.xz #下载trojan程序
chmod +x trojan-1.14.1-linux-amd64.tar.xz #释放执行权限
tar xf trojan-1.14.1-linux-amd64.tar.xz #解压压缩包
cd trojan
vi config.json #编辑配置文件,进入文件,输入dG删除默认配置,粘贴如下信息
"run_type": "server",
"local_addr": "127.0.0.1",
"local_port": 8541,
"remote_addr": "127.0.0.1",//转发回 nginx 默认页面
"remote_port": 80,
"password": [
"yugogogo"
],
"log_level": 3,
"ssl": {
"cert": "/etc/ssl/fullchain.pem",
"key": "/etc/ssl/yugogogo.tk.pem",
"key_password": "",
"cipher": "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384",
"cipher_tls13": "TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384",
"prefer_server_cipher": true,
"alpn": [
"http/1.1"
],
"alpn_port_override": {
"h2": 81
},
"reuse_session": true,
"session_ticket": false,
"session_timeout": 600,
"plain_http_response": "",
"curves": "",
"dhparam": ""
},
"tcp": {
"prefer_ipv4": false,
"no_delay": true,
"keep_alive": true,
"reuse_port": false,
"fast_open": false,
"fast_open_qlen": 20
},
"mysql": {
"enabled": false,
"server_addr": "127.0.0.1",
"server_port": 3306,
"database": "trojan",
"username": "trojan",
"password": "",
"cafile": ""
}
}
#按esc键wq保存并退出
#创建 Trojan 自启服务
vi /usr/lib/systemd/system/trojan.service
[Unit]
Description=trojan
After=network.target
[Service]
Type=simple
PIDFile=/usr/src/trojan/trojan/trojan.pid
ExecStart=/usr/src/trojan/trojan -c "/usr/src/trojan/config.json"
ExecReload=
ExecStop=/usr/src/trojan/trojan
PrivateTmp=true
[Install]
WantedBy=multi-user.target
#按esc键wq保存并退出
3,启动命令如下:
systemctl start trojan.service #启动Trojan systemctl enable trojan.service #设置 Trojan 服务开机自启
1,下载安装nginx程序,以下是安装命令
#创建nginx安装源 vi /etc/yum.repos.d/nginx.repo #粘贴以下内容,保存退出 [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1 #开始安装,(如果提示没有公匙无法安装,可以输入这个命令安装,yum install nginx --nogpgcheck ) yum install nginx systemctl start nginx.service # 启动Nginx服务 systemctl enable nginx.service #开机自启
2,设置nginx配置,打开nginx配置文件,在event代码后面先增加stream流信息代码。
#打开nginx的配置文件
vi /etc/nginx/nginx.conf
#粘贴以下内容,保存退出
stream {
# 这里就是 SNI 识别,将域名映射成一个配置名,请修改自己的一级域名
map $ssl_preread_server_name $backend_name {
web.yugogogo.tk web;
vmess.yugogogo.tk vmess;
trojan.yugogogo.tk trojan;
# 域名都不匹配情况下的默认值
default web;
}
# web,配置转发详情
upstream web {
server 127.0.0.1:80;
}
# trojan,配置转发详情
upstream trojan {
server 127.0.0.1:8541;
}
# vmess,配置转发详情
upstream vmess {
server 127.0.0.1:10242;
}
# 监听 443 并开启 ssl_preread
server {
listen 443 reuseport;
listen [::]:443 reuseport;
proxy_pass $backend_name;
ssl_preread on;
}
}
2,设置用于v2ray WS转发的代码块,需要在http模块里面增加server虚拟机模块,命令如下
server {
# 开启 HTTP2 支持
listen 10242 ssl http2;
server_name vmess.yugogogo.tk;
gzip on;
gzip_http_version 1.1;
gzip_vary on;
gzip_comp_level 6;
gzip_proxied any;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/javascript;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_certificate /etc/ssl/fullchain.pem;
ssl_certificate_key /etc/ssl/yugogogo.tk.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# WS 协议转发
location /yugogogo {
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;
proxy_pass http://127.0.0.1:41554;
}
# 非标请求转发伪装
location / {
proxy_pass http://127.0.0.1:80;
}
}
3,验证配置文件有效性并使其文件重新加载生效
nginx -t #验证nginx配置文件正确性 nginx -s reload #重新加载,使其生效 systemctl status nginx #检查nginx服务状态
到以上站点下载与本地电脑系统匹配的客户端,下载好,将其解压后,进入该目录,双击v2rayN-Core.exe,点击“服务器”,添加vmess服务器,将配置信息如下图配置所示
点击确定,激活该服务器即可启动。
到以上站点下载与本地电脑系统匹配的客户端,下载好,将其解压后,进入该目录,双击trojan-qt5.exe
点击菜单的连接选项—->添加—->手动,
如上图所示,完成客户端配置信息,点击下方OK按钮,然后选中已添加好的节点,右键选择连接,即可实现科学上网代理服务。
为方便爱折腾的朋友能够更好的验证配置,这里罗列出各服务配置信息。
v2ray配置信息{
"api": {
"tag": "api"
},
"dns": {
"servers": [
"https://1.1.1.1/dns-query",
"https://8.8.8.8/dns-query",
"localhost"
]
},
"inbounds": [
{
"allocate": {
"strategy": "always"
},
"port": 41554,
"protocol": "vmess",
"settings": {
"clients": [
{
"alterId": 64,
"id": "16490e31-7d34-41aa-8bb6-517f2ba66ac8",
"level": 1
}
]
},
"sniffing": {
"enabled": false
},
"streamSettings": {
"network": "ws",
"security": "none",
"wsSettings": {
"path": "/yugogogo" // 可以自定义,避免嗅探
}
}
}
],
"log": {
"access": "/var/log/v2ray/access.log",
"error": "/var/log/v2ray/error.log",
"loglevel": "error"
},
"outbounds": [
{
"protocol": "freedom",
"settings": {
"domainStrategy": "AsIs"
},
"tag": "direct"
},
{
"protocol": "blackhole",
"settings": {
"response": {
"type": "none"
}
},
"tag": "blocked"
}
],
"policy": {},
"reverse": {},
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"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",
"type": "field"
}
]
},
"stats": {},
"transport": {}
} trojan配置信息{
"run_type": "server",
"local_addr": "0.0.0.0",
"local_port": 90,
"remote_addr": "127.0.0.1",
"remote_port": 80,
"password": [
"yugogogo"
],
"log_level": 1,
"ssl": {
"cert": "/etc/ssl/fullchain.pem",
"key": "/etc/ssl/yugogogo.tk.pem",
"key_password": "",
"cipher": "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384",
"cipher_tls13": "TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384",
"prefer_server_cipher": true,
"alpn": [
"http/1.1"
],
"reuse_session": true,
"session_ticket": false,
"session_timeout": 600,
"plain_http_response": "",
"curves": "",
"dhparam": ""
},
"tcp": {
"prefer_ipv4": false,
"no_delay": true,
"keep_alive": true,
"reuse_port": false,
"fast_open": false,
"fast_open_qlen": 20
},
"mysql": {
"enabled": false,
"server_addr": "127.0.0.1",
"server_port": 3306,
"database": "trojan",
"username": "trojan",
"password": ""
}
} nginx配置信息user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
stream {
# 这里就是 SNI 识别,将域名映射成一个配置名
map $ssl_preread_server_name $backend_name {
web.yugogogo.tk web;
vmess.yugogogo.tk vmess;
trojan.yugogogo.tk trojan;
# 域名都不匹配情况下的默认值
default web;
}
# web,配置转发详情
upstream web {
server 127.0.0.1:80;
}
# trojan,配置转发详情
upstream trojan {
server 127.0.0.1:90;
}
# vmess,配置转发详情
upstream vmess {
server 127.0.0.1:10242;
}
# 监听 443 并开启 ssl_preread
server {
listen 443 reuseport;
listen [::]:443 reuseport;
proxy_pass $backend_name;
ssl_preread on;
}
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
server {
# 开启 HTTP2 支持
listen 10242 ssl http2;
server_name vmess.yugogogo.tk;
gzip on;
gzip_http_version 1.1;
gzip_vary on;
gzip_comp_level 6;
gzip_proxied any;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/javascript;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_certificate /etc/ssl/fullchain.pem;
ssl_certificate_key /etc/ssl/yugogogo.tk.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# WS 协议转发
location /yugogogo {
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;
proxy_pass http://127.0.0.1:41554;
}
# 非标请求转发伪装
location / {
proxy_pass http://127.0.0.1:80;
}
}
include /etc/nginx/conf.d/*.conf;
} 如你对以上技术原理教程的视频感兴趣,可以直接到我频道中观看。
如你对以上搭建技术视频感兴趣,可以直接到我频道中观看。
以上搭建参考引用
View Comments
出错了……你贴个nginx 完整配置样板可能会更好&
在本文的服务端配置回顾的nginx配置信息就是最全的信息了。
不知道Trojan的意义是什么。通过路径直接转发给v2ray不就得了?
这里只是分享共存的另一种架构思路,关于v2ray,trojan共存方法很多。感谢关注。