本文主要针对群晖只有公网ipv6,但是需要使用ipv4网络进行访问的解决办法,如果您有公网ipv4可以忽略此文章。

如果您需要去掉群晖端口访问,也可以参考本文章相关配置。

引言

在家庭数据存储与管理领域,群晖 DSM 系统以强大的功能和出色的易用性,成为众多用户的首选。然而,在使用过程中,用户面临着两大棘手问题。​

其一,网络协议适配难题。随着互联网发展,公网 IPv4 地址资源愈发紧张,许多地区申请公网 IPv4 困难重重,不少用户转而采用公网 IPv6 实现群晖 DSM 远程访问。但当下大量网络环境仍仅支持 IPv4,这导致部分用户无法顺利访问 DSM 系统,如何让 IPv4 和 IPv6 用户都能顺畅访问,成为亟待解决的问题。​

其二,端口使用不便问题。家庭宽带的 80 和 443 端口通常处于封禁状态,使得用户在访问 DSM 系统时,不得不添加端口号,如https://xxx.com:5001 ,这种访问形式不仅繁琐,也影响使用体验。​

针对上述问题,本文将介绍通过云服务器nginx转发方式,不仅能实现去端口访问,还能同时满足 IPv4 和 IPv6 网络对 DSM 的访问,助力用户突破网络限制,享受更便捷的家庭数据管理体验。

本教程使用资源和前提

  • 阿里云服务器,拥有公网ipv4和ipv6,最低配置的大概99一年

  • nginx-1.27.1

  • 域名,最好申请好ssl证书

  • 群晖DSM已完成DDNS+端口访问,比如:https://ddns.vvhz.com:10001

nginx转发方式

proxy_pass

优点:可以去端口,配置简单,只拥有ipv4网络的用户也可以访问ipv6的DMS系统

缺点:会占用nginx所在的云服务器的带宽。我们个人购买的云服务器带宽一般比较低,只有几M,但是群晖公网的上行带宽起码30M或者50M,还有一些用户的可以达到千兆上行,那么这种转发方式就无法发挥群晖公网上行的优势。

frame嵌套

优点:可以去端口,可以让用户直接访问嵌套页面的地址,不占用云服务器带宽

缺点:地址栏固定,如果DSM是ipv6网络,那么只有ipv4网络的用户无法访问。

实现目标

proxy_passframe嵌套两种方式各有优缺点,我们结合两种方式,实现以下功能:

当用户网络支持ipv6时,使用frame嵌套的方式,最大化利用群晖上行带宽。当用户网络仅支持ipv4时,使用proxy_pass方式,虽然访问速度受限,但是仍能保证DSM系统的正常访问。

DNS配置

在 DNS 解析中,将域名nas.vvhz.com同时解析到云服务器的 IPv4 和 IPv6 地址。

nginx详细配置

nginx安装好后,增加如下配置:

proxy_pass配置

当用户只有ipv4网络环境时,我们使用proxy_pass进行反向代理。其核心配置如下:

server {
   listen 80; # 监听80端口
   server_name nas.vvhz.com;  # 自己的域名
   #把http的域名请求转成https
   return 301 https://$host$request_uri;
}
server {
   listen 443 ssl;
   server_name nas.vvhz.com;
   ssl_certificate /home/soft/nginx/nginx-1.27.1/cert/vvhz.com/fullchain.pem;
   ssl_certificate_key /home/soft/nginx/nginx-1.27.1/cert/vvhz.com/privkey.pem;
   location / {
       proxy_pass  https://ddns.vvhz.com:10001/;
   }
}
Conf

在上述配置中,第一个server块用于监听 80 端口,将所有的 HTTP 请求通过return 301重定向到对应的 HTTPS 地址,保障数据传输的安全性。第二个server块监听 443 端口(HTTPS 协议端口),配置了 SSL 证书路径,确保网站的 HTTPS 访问正常。location /块则指定了反向代理规则,将所有请求转发到群晖 DSM 系统的地址https://ddns.vvhz.com:10001/ ,从而实现了 IPv4 网络用户对群晖 DSM 系统的访问。

frame嵌套配置

当用户拥有 IPv6 网络时,我们使用frame嵌套的方式,优先使用 IPv6 网络直连群晖系统,增加针对 IPv6 的监听与处理规则:

server {
   listen [::]:80;  # 监听IPv6的80端口,需用方括号包裹
   server_name nas.vvhz.com;
   # 处理IPv6请求的配置
   #把http的域名请求转成https
   return 301 https://$host$request_uri;
}

server {
       listen [::]:443 ssl; # 监听 IPv6 的 443 端口,并且启用 SSL/TLS 加密
       server_name nas.vvhz.com;
       # 指定 SSL 证书文件的路径
       ssl_certificate /home/soft/nginx/nginx-1.27.1/cert/vvhz.com/fullchain.pem;
       ssl_certificate_key /home/soft/nginx/nginx-1.27.1/cert/vvhz.com/privkey.pem;
       location / {
           # 设置请求的根目录
           root /home/soft/nginx/nginx-1.27.1/web/nas;
           index index.html;
           proxy_set_header X-Forwarded-Proto $scheme;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       }
   ssl_prefer_server_ciphers on;
}
Conf

在新增的配置中,listen [::]:80listen [::]:443 ssl分别用于监听 IPv6 的 80 端口和 443 端口,同样实现了 HTTP 到 HTTPS 的重定向以及 HTTPS 访问的 SSL 证书配置。location /将所有请求返回/home/soft/nginx/nginx-1.27.1/web/nas/index.html 这个文件。

我们的frame嵌套代码就写在这个index.html中。

<html lang="zh_CN">
  <head>
      <meta charset="utf-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=2">
      <link rel="icon" href="favicon.ico" type ="image/x-icon">
      <title>NAS</title>
  </head>
  <frameset rows="100%">
      <frame src="https://ddns.vvhz.com:10001"></frame>
  </frameset>
</html>
HTML

index.html中的代码很简单,直接使用frame嵌套我们DSM的原始地址https://ddns.vvhz.com:10001

DSM配置

打开允许iFrame嵌套

总结

通过上述方案,我们成功解决了家庭群晖 DSM 系统在 IPv4 和 IPv6 混合网络环境下的访问难题,同时也解决了群晖的端口问题。无论是网络小白还是技术爱好者,都可以按照本文的步骤进行操作,享受更加便捷、高效的远程访问体验。若你在实践中有任何问题,或想了解其他相关优化技巧,欢迎随时和我交流。

文章作者: Z
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 微博客
Nas
喜欢就支持一下吧