使用 Nginx 让 FRP 在 VPS 上获得完整的 HTTPS

使用 Nginx 让 FRP 在 VPS 上获得完整的 HTTPS

我有一台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

相关内容