转载请注明出处,本文仅用于学习交流,不对之处,恳请指正 ,部分图片摘取网络,如有侵权请联系
我们部署了群晖之后,在局域网中可以使用Samba协议来将NAS的存储空间映射到本地,但是有时候我们使用内网穿透或者拥有公网IP之后,也希望可以在远程将NAS映射为本地磁盘。我们可以使用WebDAV来达到这个目的。
本文还涉及到如果使用内网穿透的方式如何获取到用户的真实IP!!IMPORTANT!!
Windows的WebDAV最高只能支持到4GB的文件大小,超过此大小会提示错误Windows默认的仅支持50MB,修改Windows的WebDAV最大文件上限请参阅修改Windows的WebDAV最大文件上限
- 在群晖的应用中心搜索WebDAV并安装
- 安装并打开WebDAV的控制面板,修改你想要的端口号
- 使用你的内网穿透把你对应的端口映射到云服务器的外网端口,或者在你的路由器进行端口转发并在防火墙中开放相应的端口即可
到此,你已经可以在外网映射你的网络磁盘了。如果你不需要获取用户的真实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连接到群晖
- 输入
sudo -i
输入密码,进入root模式
- 查询nginx的conf文件
cat /etc/nginx/nginx.conf
在文件底部,我们看到这三行代码
由此得知,app.d/server.*.conf或者conf.d/http.*.conf文件会被应用到群晖的nginx文件中。那么我们可考虑将我们的配置放入该文件夹来避免文件被群晖重置。
- 编写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;
}
}
- 测试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
- 如果你使用了群晖的防火墙功能,我们还需要在防火墙中将相应的端口打开。
如果没有使用该功能,则可以忽略。如果有使用该功能,相信你也有一定的了解,这里不展开讨论了。
到此,我们群晖的反向代理功能已经配置完毕。接下来需要进行内网穿透的配置
内网穿透(FRP)的配置
此部分仅适用于FRP工具,其他工具请自行查阅相关文档
FRP是支持Proxy Protocol协议的,具体请查阅相关官方文档 获取用户真实 IP
使用FRPC客户端
- 在你的客户端配置中使用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
- 重启你的FRP客户端
# 需确定你的服务名
systemctl restart frpc.service
OpenWrt内置的FRPC客户端
-
在服务中,找到Frp 内网穿透的选项
-
在基础配置中写入你的服务器配置信息
- 在服务列表中新增一个服务,并写入你的相关信息
点击保存后,OpenWrt会自动重启你的FRP
至此,你应该能够在外网中正确挂载你的网络磁盘并获得相应的真实IP地址
挂载网络磁盘
懒得截Mac的图片了,就是在访达里面连接到服务器里面填入相应的信息即可
使用网络位置
如需使用网络硬盘,则查看使用网络硬盘
- 在我的电脑中右键,选中添加一个网络位置,然后根据向导一步一步设置即可
- 输入网络地址
- 根据需求可修改显示名称
- 完成
使用网络硬盘
如需使用网络位置,则查看使用网络位置
- 在我的电脑顶部,选中计算机,然后选中映射网络驱动器
- 输入网络地址
- 输入密码,并选中记住我的凭证
修改Windows的WebDAV最大文件上限
只能从原来的50MB修改到最大支持4GB
- Win+R输入regeditt打开注册表
- 输入:计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters
- 修改FileSizeLimitInBytes的值,16进制为ffffffff(8个f)
- 打开powershell输入以下代码重启webclient
net stop webclient net start webclient
至此,你的WebDAV已经由50MB修改为最大支持4GB的文件
文章评论