本文最后更新于 2024年7月7日
额我也不知道这算不算是伪装,但最终的效果是将 frps 服务端的访问端口(7000)藏在 nginx 网站的 443 端口后面,通过 ssl_preread 基于域名对 frps 流量进行分流,同时保留 proxy_protocol 的正常工作。(至少你可以不用再对外暴露 7000 端口了 (^_^) )
我的 Nginx 没有 ssl_preread 怎么办?
- 在
nginx.conf
中进行以下配置
1 2 3 4 5 6 7
| stream { log_format basic '$remote_addr [$time_local] ' '$protocol $status -> $upstream_addr ' '($bytes_sent $bytes_received $session_time)'; access_log /var/log/nginx/stream-access.log basic buffer=32k; include /etc/nginx/conf.d/*.stream; }
|
- 在
conf.d
目录下创建 10-default.stream
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| map $ssl_preread_server_name $name_https { frps.example.com 127.0.0.1:3111; # frps https(proxy) default 127.0.0.1:8443; # nginx https }
# 套娃配置是为了吸收掉frps服务端口不兼容的proxy_protocol协议,防止对frp客户端和服务端的握手造成干扰 server { listen 3111 proxy_protocol; proxy_pass frps:7000; # frps https }
server { listen 443 reuseport; listen [::]:443 reuseport; proxy_pass $name_https; proxy_protocol on; ssl_preread on; }
|
- Web 服务器配置的 https监听端口记得从 443 改到 8443!
具体是否真的能避免 frps 的流量被嗅探出来就不知道了,得分析 frps 的发包是不是有什么特征了~~(本人比较菜分析不出来捏)~~
额,好短!(确实)