我有一台V2Ray的VPS,V2Ray配置为“WebSocket+TLS+Web”。
(FRPS)VPS:目前在VPS上安装了三个软件V2Ray、Nginx、FRP。VPS上有namesilo提供的域名(假设域名为“www.my.com”),该域名绑定了Cloudflare的CDN,指向VPS的IP地址。该域名在VPS中申请了Let's Encrypt提供的证书。按照目前的配置,我可以在本地访问VPShttp://127.0.0.0.1:14500通过“https://www.my.com/yyyi”移植 v2ray 服务。
(FRPC)PC:目前PC上安装了三个软件V2Ray、nextCloud、FRP。FRPS需要与FRPC在严格NAT后面的PC通信,才能使NextCloud和NEXTCloud提供的WebDAV服务在互联网上通过HTTPS访问。NextCloud在本地监听“http:127.0.0.0.1:80”端口,FRPC的流量要转发到本地这个端口。FRPC可以通过PC安装的V2Ray作为临时的HTTPS替代,与VPS通信。
当前VPS上的Nginx配置如下:
```Nginx
server {
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /etc/letsencrypt/live/www.my.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.my.com/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 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;
ssl_prefer_server_ciphers off;
server_name www.my.com;
location /yyyi {
if ($http_upgrade != "websocket") {
return 404;
}
proxy_redirect off;
proxy_pass http://127.0.0.1:14500;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
# Show real IP in v2ray access.log
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
我注意到FRP可以在客户端(FRPC)安装证书,实现某种HTTPS通信。这是否意味着VPS无法知道流量的明确内容?如果可以的话,我会非常喜欢这个模型,这是我最想做的事情。
但如果实际情况并非如此,那么我可以接受 VPS 可以观察到 FRP 流量中的明文。但我需要确保“PC”、“VPS”和“请求设备”之间的通信完全受 HTTPS 保护,以便 ISP 无法观察到明文。
我尝试过一种允许 NextCloud 通过 HTTP 暴露到互联网的 FRP 配置,这表明系统是成功的,但我希望它可以更安全。这是我尝试过的配置:
框架结构保护机制:
[common]
bind_port = 38400
privilege_allow_ports = 2000-3000,3001,3003,4000-5000
privilege_token = [pwd]
authentication_timeout = 500
vhost_http_port = 8080
vhost_https_port = 4433
dashboard_addr = [IP]
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = [pwd]
防火混凝土:
[common]
server_addr = [ip]
server_port = 38400
privilege_token = [pwd]
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 80
remote_port = 4000
use_encryption = true
use_compression = true
http_proxy = http://127.0.0.1:10809 # V2Ray