上一篇文章《Mac mini 搭建 NAS(文件共享服务器)教程》我们搞定了Mac mini 用作文件共享的局域网访问,这篇我们来完善互联网访问,让我们无论在哪里,都可以轻松获取到保存在家里 Mac mini 的文件、视频等资料。
虽然诸多的云盘解决了大部分文件多设备远程存储调用的问题,但总存在不足,需要启动App进行上传或使用自动备份策略,某些文件(影视资源)会莫名消失等等。而 macOS 文件共享与 WebDAV 作为一个网络磁盘,是可以像文件夹一般访问、操作,还可以利用 macOS 的批量重命名等操作。
不过,使用 WebDAV 具有一定门槛,会使用命令工具与配置 Unix/Linux 服务器的人可以得心应手,普通人依据教程虽然可以实现,但碰到不仔细导致错误就没办法解决了,所以这边文档就是为此而来,原本,也是替向我付费咨询用户写的。
配置Apache
为了简化教程,选择 macOS 内置的 Apache 程序,有条件的可以通过 Homebrew 安装 Apache, 或者编译 Nginx 用于 WebDAV。
配置步骤为:先完成 80 端口 http 的访问,再配置 443 端口 https 的访问,最后通过路由器映射端口与开启 DDNS 服务进行外部网络访问。
全程需要使用「终端」进行配置。
sudo apachectl start
# 停止内置 Apache 方法sudo apachectl stopsudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null
编辑 WebDAV 模块配置sudo vim /etc/apache2/extra/httpd-dav.conf
DavLockDB /opt/webdav/var/DavLock
#设置外置磁盘为共享目录
Alias /dirname "/Volumes/GT35/SSD-Share"
<Directory "/Volumes/GT35/SSD-Share">
Dav On
AuthType Digest
AuthName "webdav"
# You can use the htdigest program to create the password database:
# htdigest -c "/usr/user.passwd" DAV-upload admin
AuthUserFile "/opt/webdav/user.passwd"
Require valid-user
AuthDigestProvider file
# Allow universal read-access, but writes are restricted
# to the admin user.
# <RequireAny>
# Require method GET POST OPTIONS
# Require user username
# </RequireAny>
</Directory>
授权服务的目录操作权限
创建 DavLockDB
目录
sudo mkdir -p /opt/webdav/var
sudo chown _www:_www /opt/webdav/var
接着打开 macOS 设置,隐私与安全性,完全磁盘访问权限,依次添加 httpd 与 htdigest 。
添加方法为点按 + 号,在打开的访达窗口按 Shift+Command+G 调出路径访问方式,输入 /usr/sbin/httpd 回车,找到 httpd 命令添加。
授权完成后配置 WebDav 用户
sudo touch /opt/webdav/user.password
sudo chown _www:_www /opt/webdav/user.password
#webdav 不动, username 是你需要设置访问 WebDav 服务器的用户名
sudo htdigest /opt/webdav/user.password webdav username
创建好用户密码进入下一步。
运行与调试
apachectl configtest
检查配置文件是否有问题,仅仅输出 Syntax OK
代表配置没有问题,如有问题按提示检查配置文件。
apachectl graceful
重载配置文件使生效。
问题日志可以到 /var/log/apache2/error_log
下查看 cat /var/log/apache2/error_log
打开本机或其他局域网 Mac 的访达,按 Command+k 连接服务器,dirname
为 httpd-dav.conf 中定义的 Alias 路径
输入之前配置好的用户名密码应该就能连接成功了,打开后界面跟使用 SMB 共享的结果一致。至此,WebDav 就可以使用了,但是使用 http 容易被嗅探用户密码与传输内容,采用 HTTPS 更佳。
开启SSL
编辑 httpd.conf,取消注释以下行 sudo vim /etc/apache2/httpd.conf
Include /private/etc/apache2/extra/httpd-ssl.conf
LoadModule ssl_module libexec/apache2/mod_ssl.so
LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so
sudo vim /etc/apache2/extra/httpd-ssl.conf
# 修改为主机名称
ServerName macmini.local:443
#注意以下位置与自签名证书存放位置一致
SSLCertificateFile "/private/etc/apache2/server.crt"
SSLCertificateKeyFile "/private/etc/apache2/server.key"
由于动态 IP 的问题,无法使用常规的证书服务,可以尝试使用动态 DNS 服务提供的证书服务(多半收费),也可以使用自签名证书。
如果觉得使用 openssl 生成证书太过复杂,可以查找在线工具生成证书,更改名称放入上面指定的路径也行
生成密钥和证书
cd #进入当前用户 Home 目录
openssl genrsa -des3 -out server.key 1024 #生成服务器私钥
#Enter pass phrase for server.key: (输入密码,越复杂就越安全)
#Verifying - Enter pass phrase for server.key: (确认密码)
cp server.key server.key.org
openssl rsa -in server.key -out server.key #从密钥中删除密码(以避免系统启动后被询问口令)
openssl req -new -key server.key -out server.crt #生成服务器证书请求
下面的交互中证书的其他信息可以随意填,当到 Common Name (eg, YOUR name) []: 时需要填入 ServerName 中定义的域名或者 IP,我这里范例为 macmini.local
openssl x509 -req -days 365 -in server.crt -out server.crt -signkey server.key
#将证书放入配置文件指制定的路径
sudo cp server.crt /etc/apache2
sudo cp server.key /etc/apache2
#重载配置生效
sudo apachectl graceful
现在,你的 WebDav 就可以通过 https 访问了。虽然自签名证书无法解决 DNS 欺骗的隐患,但比 http 还是好很多。
在路由器映射端口
在路由器的界面找到此功能,将 80 或 443 端口映射到服务器的局域网 IP 即可。
鉴于部分家庭网络 80、443 端口无法入站访问,需要路由器支持外部端口与内部端口差异映射,外部通过 8888 等自定义端口访问内部 80、443 端口。
找到广域网 IP (比如切换到手机网络)进行测试。如果成功连接,就可以注册一个动态域名解析服务,这个主流路由器通常都会带有这项服务。免费的动态域名解析的缺点是,在路由器刚更换完 IP 后访问可能因 DNS 服务器暂未更新,会导致无法访问,多尝试几次或等待一段时间即可。
客户端
经测试,macOS 访达、手机上 FE文件管理器、Infuse 等均可以通过映射端口正常访问。
Windows 资源管理器暂时不受支持。