最近一直在探索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共存方法很多。感谢关注。