上一篇文章《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 资源管理器暂时不受支持。

视频教程:https://b23.tv/lcU2Nz3

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据