Alain's Blog

  1. 首页
  2. NAS
  3. 正文

群晖WebDAV使用,并在穿透下获取真实IP

2022年3月14日 3222点热度 0人点赞 0条评论

转载请注明出处,本文仅用于学习交流,不对之处,恳请指正 ,部分图片摘取网络,如有侵权请联系

我们部署了群晖之后,在局域网中可以使用Samba协议来将NAS的存储空间映射到本地,但是有时候我们使用内网穿透或者拥有公网IP之后,也希望可以在远程将NAS映射为本地磁盘。我们可以使用WebDAV来达到这个目的。
本文还涉及到如果使用内网穿透的方式如何获取到用户的真实IP

!!IMPORTANT!!
Windows的WebDAV最高只能支持到4GB的文件大小,超过此大小会提示错误

Windows默认的仅支持50MB,修改Windows的WebDAV最大文件上限请参阅修改Windows的WebDAV最大文件上限

  1. 在群晖的应用中心搜索WebDAV并安装

群晖安装WebDAV

  1. 安装并打开WebDAV的控制面板,修改你想要的端口号

修改想要的端口号

  1. 使用你的内网穿透把你对应的端口映射到云服务器的外网端口,或者在你的路由器进行端口转发并在防火墙中开放相应的端口即可

到此,你已经可以在外网映射你的网络磁盘了。如果你不需要获取用户的真实IP,你可以直接跳转到使用网络位置或者使用网络硬盘进行下一步配置。

识别真实IP

当我们通过内网穿透等方式来访问我们局域网中的NAS的时候,一般我们无法获取到用户的真实IP地址。
这样不利于我们识别是否为异常IP,当我们的防火墙使用IP来做过滤的话,也会导致一些安全性漏洞的发生。

使用公网IP是可以直接获取到客户端的IP地址的

网络拓扑

我们可以通过打开nginx的反向代理,并开启Proxy Protocol协议来获得用户的真实IP地址,当然,这需要你所使用的内网穿透工具支持该功能。或者你可以通过nginx的X-Forwarded-For功能来获取真实IP地址,这需要你在前端服务器中把真实IP放入到X-Forwarded-For中。 这里我们介绍Proxy Protocol协议,这不意味着它有什么优势,只是我的网络结构中,NAS部分使用的是这个技术。

我经常使用的内网穿透工具是FRP,其支持TCP、HTTP(s)、UDP、STCP等方式的内网穿透。在我的网络结构中,我使用它来转发我的虚拟机的远程桌面、博客网站、网络磁盘以及一些个人或者第三方的应用程序,如开源笔记、密码锁等。

群晖的Nginx配置

群晖的nginx.conf文件会在系统重启之后被重置,所以我们不能使用它来编写我们的反向代理代码。

使用ssh连接到群晖

  1. 输入
sudo -i

输入密码,进入root模式

  1. 查询nginx的conf文件
cat /etc/nginx/nginx.conf

在文件底部,我们看到这三行代码

nginx.conf

由此得知,app.d/server.*.conf或者conf.d/http.*.conf文件会被应用到群晖的nginx文件中。那么我们可考虑将我们的配置放入该文件夹来避免文件被群晖重置。

  1. 编写nginx配置
# 生成相应文件
touch /etc/nginx/conf.d/http.remote2local.conf
# 写入配置文件
vi /etc/nginx/conf.d/http.remote2local.conf

在配置文件中写入以下代码,其中部分中文需要修改,请仔细查看

set_real_ip_from 你要排除的IP

server {
    # 监听IPv4并开启Proxy Protocol协议
    listen 监听的端口 ssl proxy_protocol;
    # 监听IPv6并开启Proxy Protocol协议
    listen [::]:监听的端口 ssl proxy_protocol;
    # 监听的域名
    server_name 域名;

    # 真实IP使用proxy_protocol协议
    real_ip_header proxy_protocol;
    # 开启排除IP功能
    real_ip_recursive on;

    # 排除本地IP,请根据你的具体情况配置
    set_real_ip_from 192.168.1.0/24;
    set_real_ip_from 10.0.0.0/8;

    # 排除服务器IP
    set_real_ip_from 你运行Frps的服务器IP地址

    # 排除CDN的IP
    # 根据你的实际情况配置
    # set_real_ip_from 你.的.CDN.IPS

    proxy_headers_hash_max_size 512;
    proxy_headers_hash_bucket_size 128;

    # 反向代理
    location / {
        # 代理的目标地址
        proxy_pass https://localhost:5002;
        # 客户端host
        proxy_set_header Host $host;
        # 兼容http
        proxy_set_header Upgrade-Insecure-Requests 1;
        # 告诉后端使用ssl
        proxy_ssl_server_name on;

        # 完整URI
        proxy_set_header X-Original-URI $request_uri;
        # 客户端host
        proxy_set_header X-Forwarded-Host $host;
        # 客户端IP
        proxy_set_header X-Real-IP $proxy_protocol_addr;
        # 客户端使用的http协议
        proxy_set_header X-Forwarded-Proto $scheme;
        # 客户端使用的端口
        proxy_set_header X-Real-Port $proxy_protocol_port;
        # 客户端及多层代理IP
        proxy_set_header X-Forwarded-For $proxy_protocol_addr;
        # 客户端使用的http协议
        proxy_set_header X-Scheme $scheme;

        # 支持websocket
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection Upgrade;
        proxy_connect_timeout 60s;
        proxy_read_timeout 60s;
        proxy_send_timeout 12s;
    }
}
  1. 测试nginx配置是否正确运行
nginx -t

如果返回

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

则配置正确,使用nginx -s reload来重新加载nginx

nginx -s reload
# 如果无效我们可以直接把nginx给停了,群晖会自动重启nignx
# nginx -s stop
  1. 如果你使用了群晖的防火墙功能,我们还需要在防火墙中将相应的端口打开。
    如果没有使用该功能,则可以忽略。如果有使用该功能,相信你也有一定的了解,这里不展开讨论了。

到此,我们群晖的反向代理功能已经配置完毕。接下来需要进行内网穿透的配置

内网穿透(FRP)的配置

此部分仅适用于FRP工具,其他工具请自行查阅相关文档

FRP是支持Proxy Protocol协议的,具体请查阅相关官方文档 获取用户真实 IP

使用FRPC客户端

  1. 在你的客户端配置中使用proxy_protocol_version字段来打开Proxy Protocol协议,WebDAV使用的是http协议,所以我们在配置文件中也是通过http协议来进行配置,注意你是否支持https。
[唯一标识]
type=https或者http
custom_domains=域名
local_ip=内网IP
local_port=你监听的反向代理端口
proxy_protocol_version=v2
use_encryption=true
use_compression=true
  1. 重启你的FRP客户端
# 需确定你的服务名
systemctl restart frpc.service

OpenWrt内置的FRPC客户端

  1. 在服务中,找到Frp 内网穿透的选项

  2. 在基础配置中写入你的服务器配置信息

OpenWrt Frp内网穿透

  1. 在服务列表中新增一个服务,并写入你的相关信息

OpenWrt Frp内网穿透

点击保存后,OpenWrt会自动重启你的FRP

至此,你应该能够在外网中正确挂载你的网络磁盘并获得相应的真实IP地址

挂载网络磁盘

懒得截Mac的图片了,就是在访达里面连接到服务器里面填入相应的信息即可

使用网络位置

如需使用网络硬盘,则查看使用网络硬盘

  1. 在我的电脑中右键,选中添加一个网络位置,然后根据向导一步一步设置即可

使用网络位置

使用网络位置

  1. 输入网络地址

使用网络位置

  1. 根据需求可修改显示名称

使用网络位置

  1. 完成

使用网络位置

使用网络硬盘

如需使用网络位置,则查看使用网络位置

  1. 在我的电脑顶部,选中计算机,然后选中映射网络驱动器

使用网络硬盘

  1. 输入网络地址

使用网络硬盘

  1. 输入密码,并选中记住我的凭证

使用网络硬盘

修改Windows的WebDAV最大文件上限

只能从原来的50MB修改到最大支持4GB

  1. Win+R输入regeditt打开注册表
  2. 输入:计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters
  3. 修改FileSizeLimitInBytes的值,16进制为ffffffff(8个f)

修改Windows的WebDAV最大文件上限

  1. 打开powershell输入以下代码重启webclient
    net stop webclient
    net start webclient

至此,你的WebDAV已经由50MB修改为最大支持4GB的文件

标签: Frp NAS WebDAV 群晖
最后更新:2022年11月16日

Alain

看了我的文,就是我的人,点个赞再走成不成

点赞
下一篇 >

文章评论

取消回复

文章目录
  • 识别真实IP
    • 群晖的Nginx配置
    • 内网穿透(FRP)的配置
  • 挂载网络磁盘
    • 使用网络位置
    • 使用网络硬盘
  • 修改Windows的WebDAV最大文件上限

COPYRIGHT © 2022 Alain's Blog. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang