K3C官改固件WOL on WAN折腾记录

为了整黑裙实现WOL on WAN,过年花了好些时间再外加平时研究折腾终于搞定了。

要想WOW先要实现WOL(Wake on LAN),如果局域网测试通不过,就不要做WOL的任何测试了。
WOL的基本要求:
1. 硬件支持,网卡、电源。有说法说DC电源不支持WOL启动,至少我试过一个DC电源+ITX-M65-N55的主板是支持的;
2. 软件配置好,两部分:BIOS/操作系统,各主板及OS不同各不相同,具体只能去上网查,凭经验了。

先说针对WakeOnWAN的关键配置:

步骤一:端口转发
因为目标是唤醒群晖,所以它本身也需要转发5000/5001/6690这些端口。对于WOW而言,端口转发是必须的,也就是说至少要能转发一个端口,但是除非网络有特定的限制,否则其实并不存在所谓的WOL端口,也就是说WOL是与端口无关的,只要路由器可以转发数据包,理论上哪个端口都可以唤醒。比如:群晖就直接用5000端口是可以唤醒的(其它端口测试也是可以唤醒的)。
端口转发另一个注意事项就是:WOL是UDP数据包,所以必须配置UDP或ALL协议的转发。

在端口转发的处理过程中发现了一个我个人感觉很坑爹的问题:DMZ设置。为了下载时方便暴露端口,我将常用的笔记本设置了静态IP+DMZ主机(不是群晖主机),而群晖只是设置了端口转发(理论上也应该如此更安全)。
因为WOW一直不成功,所以就尝试在路由器上用tcpdump抓包,结果发现:K3C持续向某些主机发送IGMP包(ping)(感觉是在判断主机的在线状态,本质就是ARP表中的NUD状态),在配置了端口转发(比如转向192.168.1.9),但目标主机又不在线时,K3C就将这个数据包直接转发到了DMZ主机(没有测试DMZ关闭的情形,也不确定路由器会主动向哪些服务器发起IGMP包)使得WOW失效。
没去细想这一设计是否合理,但这一结果就是:如果不做静态MAC绑定,待唤醒主机是关机状态,端口转发规则其实是无效的。

步骤二:IP/MAC绑定
这一步是关键。因为如果没有IP/MAC的绑定记录,则路由器在收到转发向内网主机(比如我的群晖内网地址是:192.168.1.9)的时候,因为它已经下线在ARP缓存里没有MAC地址,所以路由器也不知道将数据包发往何方。
局域网在任何情况下都可以唤醒的原因是:发送数据包是广播地址,同一LAN内的所有主机都收到了WOL唤醒包,所以不需要特别的绑定。WOW则不同,路由器在收到来自公网的数据包后,不可能将其“广播”到内网上。事实上,操作WOL时如果不选择IP广播(发往192.168.1.255)而是单播只发往待唤醒主机(192.168.1.9),并且发送WOL唤醒包的本地的ARP记录中又不存在192.168.1.9的记录时,结果尚不知道。

这两个配置如果实现,其实就完全可以WOW方式唤醒主机,但是这个K3C却让我折腾了很久。原因是它没有提供方便的IP/MAC绑定功能。

最开始我不是在K3C下试用的,而是在一个水星路由器下(100以内那种最入门款路由器),在路由器上做端口转发+静态MAC绑定,即可。

但是K3C,没有一个“静态MAC绑定”的功能,只有一个DHCP的MAC地址绑定,我以为是一回事,其实完全不是。在走了很多冤枉路,知道这两者的对系统而言并不相同后,尝试执行绑定:

首先的尝试是执行

arp -s 192.168.1.9 mac:add:ress

这一命令没有任何效果,arp命令在k3c上只是纯粹的show arp list,绑定之类的操作好像没有效果。
但我不能排除在别的架构的路由器(固件)上可能是有用的,所以遇到问题还是可以尝试一下。
后面尝试的是IP命令

ip neigh change 192.168.1.9 lladdr mac:add:ress nud permanent dev br-lan
ip neigh add 192.168.1.9 lladdr mac:add:ress nud permanent dev br-lan

命令中的192.168.1.9是待唤醒主机,mac:add:ress是主机的MAc地址,NUD permanent表示将这条ARP记录的NUD状态设置为永久,dev br-lan表示在哪个网络接口(interface)上执行这个操作。
这两个命令执行后,可以通过ip neigh(此命令显示ip/mac缓存列表)中看到相应的IP的ARP记录显示为permanent(永久)生效。

执行两条命令的原因是:如果192.168.1.9(待唤醒主机)实际在开机状态,那么在ARP缓存记录中会有相应的记录,只是其NUD状态不为permanent,所以先执行ip neigh change操作尝试将状态修改为永久,再尝试添加新的ARP记录,两个命令有一个执行成功即可。
执行完上述命令后,测试WOW成功。

第三个步骤严格来说其实就和WOW无关了:这个命令在重启路由器后就失效了。
首先是尝试在路由器的高级功能的启动脚本(rc.local)中写入如下的命令:

ip neigh change 192.168.1.9 lladdr 00:ff:ff:ff:8b:31 nud permanent dev br-lan
ip neigh add 192.168.1.9 lladdr 00:ff:ff:ff:8b:31 nud permanent dev br-lan
exit 0

重启路由器,没任何效果,加上日志,跟踪了执行过程:

echo “START BIND” >> /var/log/ipbind
echo “DO CHANGE” >> /var/log/ipbind
ip neigh change 192.168.1.9 lladdr 00:ff:ff:ff:8b:31 nud permanent dev br-lan >> /var/log/ipbind >> /var/log/ipbind 2>1&
echo “DO ADD” >> /var/log/ipbind
ip neigh add 192.168.1.9 lladdr 00:ff:ff:ff:8b:31 nud permanent dev br-lan >> /var/log/ipbind /var/log/ipbind
echo “END BIND” >> /var/log/ipbind
exit 0

上述命令中的应该只有一个地方比较难理解就是末尾的”2>1&”,作用是同时将标准输出(stdout)和标准错误输出(stderr)重定向。直接使用>>只是重定向了stdout,错误信息在日志里就看不到了!
通过日志发现错误提示:device br-lan不存在。但是在路由器已经启动完成的情况下通过ifconfig命令是可以看到br-lan接口的,找了半天,用了另外一方法:
将绑定命令写成脚本,保存在/etc目录下(也可以是其它目录,推荐),比如: /etc/bind_ip.sh。注意要通过chmod a+rx bind_ip.sh来授权执行。
上述命令的脚本要稍做修改如下:

#!/bin/sh
echo “SLEEP”
sleep 60
echo “START BIND”
echo “DO CHANGE”
ip neigh change 192.168.1.9 lladdr 00:ff:ff:ff:8b:31 nud permanent dev br-lan 2>1&
echo “DO ADD”
ip neigh add 192.168.1.9 lladdr 00:ff:ff:ff:8b:31 nud permanent dev br-lan 2>1&
echo “END BIND”
exit 0

脚本主要修改是:
#!/bin/sh,虽然是注释但有用,这样确保执行脚本时在bash环境中,否则会提示can’t find applet(不能执行第一个sleep命令)。
sleep 60,休眠60眠,脚本的关键修改就是这个延时操作了。
删除了所有的>> /var/log/ipbind,原来这个功能是将脚本执行的输出写入日志的,但因为之后我们要用nohup命令来后台执行程序,nohup这个应用会再次重定向,所以这里就不用写了(如果写了的话在nohup.out中看不到执行日志和错误输出)。但是要注意保留 2>1&,错误输出挺重要的。

然后在rc.local中添加如下命令(强烈建议使用路由器的Web界面添加,不要用vi,试过一次丢失了rc.local文件):

nohup /etc/bind_ip.sh &
exit 0

这里有两个linux常用的命令或语法nohup和&,执行指定的程序,即使你已经注销。其实在这个脚本中可以不使用这个命令前缀,因为是路由器开机过程应该没有不会有注销信号,不过为了保险加上这个命令。
命令末尾的&表示在后台执行这个程序(前台可以继续执行其它命令或脚本),相当于多线程。这个&才是关键,这意味着系统在接下来的时间里仍按原配置加载系统配置(目的就果发创建接口设备br-lan),在这个过程中bind_ip.sh同步执行的是sleep 60命令,只要路由器在60秒内加载完br-lan设备,再执行后面的绑定就成功了。

 

 

 

 

 

 

 

 

 

Continue Reading

强迫症的数据安全

先考虑一下我的数据的性质以及同步频率、数据可靠性的要求。

  1. 一类资料:文档类不可再生数据:如Office文件、工程文档、扫描文件、源代码等;文件数量较少(打包后),总体积较少(总数量<50G),应保持实时更新(在线<30分钟)。
  2. 二类资料:媒体类不可再生数据:如照片、视频、录音等,占用空间大,文件数量多(>100G且持续增长),在3~7内甚至更长时间更新均可。二类资料中有一种特殊的文件(夹)就是备份虚拟机,必须一个文件不少且保证文件正确性,但虚拟机体积大不适合打包,是个问题。
  3. 三类资料:媒体类可再生数据:如高清电影、iTunes音乐数据等(此类文件无需冗余),占用空间大,但单个文件体积大,数量相对较少,无需同步手工下载。

备份方案:

  1. 一类资料:本地PC ,NAS 同步,本地PC直接与Dropbox同步,定期移动硬盘离线同步,3份实时同步,1份离线同步;
  2. 二类资料:本地PC,NAS同步,通过NAS间接同步到百度云,定期移动硬盘离线同步,3分实时同步,1份离线同步;
  3. 三类资料:仅存在于NAS,部分存在于本地PC 或百度云但处于未管理的状态。

本地PC,日常使用,难免有丢失、机器损坏的风险,因此是不太可靠的备份介质,主要用于日常数据使用。
Dropbox数据可靠性相对有保障,但因容量和速度问题只能保障一类资料。也因为如此,一类资料是能够有效保障的。
Baidu云的数据可靠性其实也是有保障的,但基于对国内企业的信任(数据可能不会丢,但随时可能关停服务或要求付费),所以这一备份只能是做个额外保障。
所有数据在关键就在这个NAS上了……

目前NAS是虚拟机+黑群晖的方案。

宿主机Windows 2008做软件RAID,运行VMWare Workstation跑黑群晖,这中间有虚拟机、宿主机、软件RAID等多种机制,不免让人担心数据安全。

一类数据有保障,不用担心;三类数据不担心丢失;关键是二类的,如果因为突发故障(掉电、死机等)而导致虚拟机文件损坏(vmx,vmdk)等不能正常加载,那样会让NAS 中的数据整体丢失,这个结果是不能接受的。

解决思路:

  1. 尝试了一下,将软件RAID的分区直接映射到虚拟机硬盘,但失败了,估计还是软件RAID不能这样用,得上硬件了,服务器是一台笔记本,放弃;
  2. 上白群晖硬件,其实这应该是最省事且靠谱的方案:贵且最近木有预算,就算有也是计划上HP Gen8;
  3. 虚拟机磁盘只做中介,在宿主机上利用磁盘或文件夹同步软件同步虚拟机磁盘与宿主机的RAID分区。这一方案也可以用于Gen8,并且可以规避掉黑群晖升级可能带来的数据丢失风险。

方案3的缺点是:

  1. 出于性能的考虑,文件夹同步最多一天执行1~2次(尚未找到实时监控同步的软件),但因为重点是保障二类数据,因此这类风险是完全可以接受的。
  2. 多占用空间。当然完全可以只针对一类和二类数据做同步,多占用的空间在200~300G左右,对NAS来说,可以忽略。这在某种程度上是另外一重Live备份,也不是坏处。

其实我想说的是,如果我不缺钱,就整一个HP Gen8+Synology DS416play,这样就省事多了。

虚拟机备份的问题需要再研究!

 

 

Continue Reading

黑群晖上线

一直想折腾一个群晖,因为Dropbox容量太小,百度太不靠谱!再次强烈批评百度。
前面折腾了一个win2008的小server放办公室,并做了数据盘的RAID1,借用VMWare Workstation创建黑群晖。前面下载了一套固件,但一直没有成功,今天搜索了另外一个论坛终于找到了解决方案。网上的其它方法说明的流程整体上木有问题,关键是这几个步骤:
1. 下载的引导文件是img格式的,即使提供了vmdk文件在Workstation中导入也不能成功,解决的方法相当简单,下载一个叫StarWindConverter的软件,下载地址是这个:
https://www.starwindsoftware.com/tmplink/starwindconverter.exe
上述下载地址不一定长期有效,可以去这个公司的网站注册,一定要用真实邮箱因为并不直接提供下载地址而是发送到邮箱的。软件不大,大约12M左右,安装好后运行,将img文件转换为相应的vmdk文件格式就行(默认的第一项VMWare growable image),类型我之前选择的是IDE,但因为VMWare创建默认虚拟机时用的是SCSI磁盘类型,推荐也用这个。假定生成的文件是boot.vmdk
2. 创建虚拟机,假定虚拟机名字是NAS,选择其它x64(版本选最新的吧,反正我是这样选的),创建一个虚拟机。
3. 找到这个虚拟机的目录,把默认生成的磁盘文件(正常情况下与虚拟机名称相同,如nas.vmdk),将之前转换的boot.vmdk复制到这里重命名并覆盖nas.vmdk
4. 打开虚拟机设置,添加数据磁盘,越大越好反正并不需要立刻创建;推荐选择分割为多个文件的方式,便于将来备份;一定要创建这个数据磁盘,否则将来安装系统时没有数据盘会失败(用Synology Assistant工具安装时提示网络错误:38,而通过网页安装时会提示没有数据盘);
5. 启动系统,注意启动时会有3个选项(或多个),一定要快速的切换到有VMWare之类的选项(最后一个)。看到:Booting the kernel,大概等1分钟,不会再有任何其它输出,接下来可以按网上的教程用pat文件安装了。

Continue Reading

让Chrome忽略证书检查

今天想打印社保资料,发现社保局网站已经升级,但网站使用的证书提示已被吊销(revoked),原因你懂的。

 

这个提示不像别的证书过期,域名不一致等是可以忽略的,到这就完全不能再进入这个网站了。查网上资料说Chrome有一个设置可以取消:

 

打开设置一看,木有,搜索也木有,继续放狗,找到这么一句:
https://productforums.google.com/forum/#!topic/chrome/NigLWtl3kDg;context-place=topicsearchin/chrome/authorid$3AAPn2wQcdfWeRneStHUG50nH0DvVV7fQA8jcyBszE-ZXcF6hJzxslfzwVH0zeohMQaeMDrMKzNpDt%7Csort:date%7Cspell:false

人家16年的时候就说已经取消了还是long time ago,

这里面提到了一个修改组策略的方案可以解决此问题:
https://scotthelme.co.uk/certificate-revocation-google-chrome/

 

这也是3年前的资料了,不知道准不准,不过我用的是MAC所以这个解决方案对我来说也没用,再放狗找到了这个:
http://hints.macworld.com/article.php?story=20140510112547107
其中关键的一句就是这个命令:

但是这个命令其实是不能正常执行的,因为中间有两个地方有空格,修改如下:

/Applications/”Google Chrome.app”/Contents/MacOS/”Google Chrome” –ignore-certificate-errors &> /dev/null

 

把其中两个有空格的地方括起来就能执行了,当然还有其它方法解决空格的问题。注意:你的Chrome得是安装在/Applications这个目录。

执行这个命令后,Chrome将会启动,并且在地址栏下面弹出这样的提示:

看到这个提示OK了。

Continue Reading

又恢复一次网站!

email给DigitalOcean,说怀疑是roc-xml攻击,可是我查看了日志,基本没有这种记录,原因不明。
只能是是那样又恢复一次,坑爹啊!

这次恢复依然是按照教程,不过安装的时候出错了。找到个办法,先删除,重启服务器再安装,OK。

Continue Reading

清除无用的CoreSimulator

今天整理硬盘,发现~/Library/Developer/CoreSimulator/Devices这个目录不小,而且有很多大小完全相同的目录。
打开Xcode,发现我已经删除了很多没用的设备了,只保留了MAC/6/6s/7/7s/air2几个,但是里面有几十个不同设备的目录,而且空间占用最小的也有16M,手工删除又怕出错,Google到一个超实用的命令:

xcrun simctl delete unavailable

目录下的那些文件都被删除了,进一步学习一下:

列出设备
xcrun simctl list devices
删除指定的设备
xcrun simctl delete D24C18BC-268C-4F0B-9CD8-8EFFDE6619E3
帮助
xcrun simctl help

顺便提一下,没做过Watch的开发所以没注意到原来Watch这个设备是在主设备的Paired的设备里的:

所以,第一次运行了删除无用设备的命令之后里面还保留了很多watch设备,我从Paired设备中删除后,再执行此命令无效。

Continue Reading

Visual Studio for MAC更新

这东西,官方提供的更新和安装程序根本就没办法下载成功!
好在新的版本好像提供了(之前的老版本不知道有没有)一个失败后手工下载的说明:

把其中几个地址帖上来备用,想要的也可以直接用:

MONO框架(网上下载安装更新)
https://download.mono-project.com/archive/5.0.1/macos-10-universal/MonoFramework-MDK-5.0.1.1.macos10.xamarin.universal.pkg

Xarmin.Android框架
https://dl.xamarin.com/MonoforAndroid/Mac/xamarin.android-7.3.1-2.pkg

Xarmin.iOS组件
https://dl.xamarin.com/MonoTouch/Mac/xamarin.ios-10.10.0.36.pkg

Xarmin.MAC组件
https://dl.xamarin.com/XamarinforMac/Mac/xamarin.mac-3.4.0.36.pkg

VS环境下载包
https://xamarin.azureedge.net/VsMac/VisualStudioForMac-7.0.1.24.dmg

Xarmin.Profiler组件
https://dl.xamarin.com/profiler/profiler-mac-1.5.4-19.pkg

Xarmin.Interactive组件(好像是Workbooks&Inspector)
https://dl.xamarin.com/interactive/XamarinInteractive-1.2.2.pkg

不知道后面版本号变化还能不能用,反正无论如何用翻墙工具,都没办法顺利的通过官方工具下载,手工操作是唯一成功的了的方法。

Continue Reading

解决注册机不能在OS X 10.12(Sierra)不能运行的问题

很多破解机不能用了,上次遇到一个软件,打包了这个结果不记得名字了,在网上找了很久。

这两个东东分别是
Special K for Sierra Utility
Core KG-K Patcher Fix For Sierra
找了很挺久,分别对应两种常见的破解机,Patcher一下即可在Sierra上运行了。

放一个百度的链接出来,方便下载:

百度 https://pan.baidu.com/s/1c11F9KG

Continue Reading