To Be An Artist Engineer.

0%

Windows Server+KodExplorer打造简易版家庭NAS

笔者家里的电信宽带刚申请换上了公网ip, 加上有一台闲置的windows电脑,所以想到了把它打造成家庭nas。

中间经历了各种情况,踩了很多坑,现记录如下:


公网ip无用

家里网络是电信网关+TPLink, 电信网关负责拨号获取ip,TPLink做路由转发。在成功切换成公网ip后,笔者兴致冲冲的去ping, 结果发现居然是req timeout,尝试放开各种端口发现也不通。笔者所用网关型号为tewa-600NEM,后来一顿搜索,解决了这个问题:

  • 打开网关隐藏配置信息: 192.168.1.1/dumpcfg.conf (192.168.1.1是网关地址)下载隐藏配置,用记事本之类软件打开此文件,搜索“telecomadmin”即可,密码格式为”telecomadmin********”
  • 获取密码后登陆网关, 用户名为useradmin, 密码用上一步获取的密码就可以进入超级模式
  • 选择宽带线路,把路由模式从路由改为桥接
  • 打开TPLink, 选择上网模式为拨号上网,拿到ip
  • Ping,发现可以ping通,这个时候拿到的才是公网ip

笔者发现天翼网关拿到的公网ip不仅ping不同,所有端口默认都是ban掉的,而且和路由拨号拿到的ip号段也不一样

部署私有网盘

笔者选择了国产的一款网盘:可道云,选择了它的免费版本。部署过程如下:

  • 下载xampp, 这是一个工具集,包含了Apache Server, MySql, FileZellia等,但其实主要用到的还是Apache Server, MySql
  • 下载KodExplorer, 加压到xampp目录下替换htdocs文件夹里的所有内容
  • 在xampp控制面板启动即可,默认端口为80,可以根据需要修改

域名

笔者在阿里云万网注册了一个域名,但是直接绑定家里的ip感觉不妥,因为家里的公网ip是不断变化的,如果绑定某一个域名肯定要频繁改,为了规避麻烦笔者采用了DDNS方案。DDNS首先想到的就是花生壳,但是这货注册太麻烦,直接弃用。笔者直接采用tplink自带的ddns, 绑定了一个域名A.tpddns.cn,然后在万网域名解析里加上了一个CNAME记录指向了这个A.tpddns.cn,至此,域名的问题就算是解决了。

虚拟服务器配置

家里的windows server是内网ip, 怎么供外网访问呢?在路由器设置里笔者发现了两种方案:

  • DMZ主机,把windows server直接暴露到外网,简单但是安全性低
  • NAT, 通过端口映射把APACHE SERVER监听的端口映射到外部某个端口

笔者选择了NAT方案,配置很简单,不再赘述

备份

KodExplorer并没有提供一键备份功能,所以笔者选择了一个简易的备份方案

先说说设备,笔者手上有一台开发用的mac,搭配阿里云oss存储

开启windows server的CIFS(SMB)服务:

  • 进入windows server, 选择需要共享的盘符,右键->属性->共享->高级共享移除Everyone,添加用户A(需要密码)
  • 打开”关闭或打开windows功能”,勾选smb, cifs,保存

mac加载盘符

1
2
mkdir smb
mount_smbfs //${用户名}:${密码}/${盘符名称} ./smb

进入盘符备份

1
2
cd smb
zip -r -FS backup.zip ${数据目录}

上传oss

1
2
3
4
##安装oss2
pip install oss2
##上传(oss.py可以直接在官网demo中找到,自己填上AccessId和AccessSecret即可)
python oss.py smb/backup.zip

上述任务可以做成定时任务,Linux上可以用crontab, Mac上推荐用launchctl, 下面推荐launchctl的方法

1
2
3
4
cd ~/Library/LaunchAgents
touch com.kod.backup.plist
launchctl load -w com.kod.backup.plist
launchctl start com.kod.backup.plist

如果要停止定时任务

1
2
launchctl stop com.kod.backup.plist
launchctl unload -w com.kod.backup.plist

下面是笔者写的com.kod.backup.plist内容,每隔10个小时执行一次部署脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.kod.backup</string>
<key>ProgramArguments</key>
<array>
##这是执行脚本的位置
<string>/Users/xxx/xxx/backup.sh</string>
</array>
##周期性执行,可以替换为特定时间点执行StartCalendarInterval
<key>StartInterval</key>
##单位为秒
<integer>36000</integer>
##日志目录
<key>StandardOutPath</key>
<string>/Users/xxx/xxx/run.log</string>
##错误日志目录
<key>StandardErrorPath</key>
<string>/Users/xxx/xx/run.err</string>
</dict>
</plist>

这里有几个点需要注意:

  • 脚本是否具有可执行权限,如果没有直接chmod +x 解决
  • 如果用到了python,记得使用/usr/local/bin/python而不是直接使用python,否则会报找不到oss2的错误