NAS系统的选择,首先放弃了windows系统. 然后在DIY linux与现成开源的类linux nas系统中,确定用现成的freenas,基于freebsd的nas.

freenas现在主版本有7.x 与8.x二个系列. 7.x的风格更类linux一点,配置时要先加硬盘,格式化,再mount到对应目录,最后再共享目录.

不过对于我配置的特定硬件,7.x 无法自动认出板上的网卡以及sata接口. 网卡驱动倒是可以换一个,不过认不出sata接口却无法解决,这样系统启动后一个硬盘都找不到.

8.x系列,封装得更好一点,配置也简单很多. 当然DIY的自由度也少了很多. 另外8.x对ZFS的支持要完善很多,用raid z相当方便.

  1. 首先去http://www.freenas.org/下载FreeNAS-8.0.2-RELEASE-amd64-Full_Install.xz,因为用到了8G内存,必须用64位版本,而且zfs文件系统,要求内存越大越好,6G+是必要的.
  2. 用7zip解开FreeNAS-8.0.2-RELEASE-amd64-Full_Install.xz,是个2G左右的FreeNAS-8.0.2-RELEASE-amd64-Full_Install文件
  3. 用dd或physdiskwrite.exe写到一个2G以上的u盘上.用u盘做系统盘,一是能省下一个sata接口以后好扩充,二是8.x的freenas不能再使用系统盘上的空闲空间.
  4. 启动nas并配置好ip地址后web登录,默认帐号为admin/freenas
  5. 在Storage中,用Create Volume,选取三块硬盘,fs选择zfs,zaid z模式.命名为public. 这时就创建好了一个总容易为3.8T的raid z卷. 并且以后所有的目录分配或iscsi都基于public卷.
  6. Create ZFS Dataset用来创建不用的应用目录,用于分配给不同的用户或是用作不同的用途.
  7. Create ZFS Volume创建一个指定容量的大文件,用于iscsi的虚拟磁盘.
  8. 配置好后,在System->Settings,->Save Config里,保存好当前配置.这样万一系统损坏或u盘物理损坏后,通过前四步,然后导入现有配置就能恢复.
  9. 最后在Services中,启用CIFS,FTP以及iSCSI三个主要共享功能.

这样能通过ftp,windows的网上邻居,linux的smb,以及iscsi访问nas上的空间.

1000Mbps网络环境中,上下传速度其中以iscsi速度最快,约70MB/s左右,然后是ftp,60MB/s左右,网上邻居要慢点,40~50MB/s左右. 100Mbps网络环境三者都能比较稳定在10MB/s左右. 由此可见,使用nas,1000Mbps的网络环境是必要的.

最后从总功耗以及传输速度来看,基本上满足了自己的要求.

一则硬盘空间一直比较紧张,二则现在硬盘质量不再象以前那么可靠,数据容易丢失,于是计划购置一个能做阵列的家用NAS机器. 仔细研究了一下国内外不少品牌或山寨的NAS,最后比较满意希捷BlackArmor NAS 400系列. 可惜的是国内一直没有售,而且价格好象也悄悄涨过一次,不带硬盘拿下来也得3K多了.

既然现成的不满意,就自己配一个好了.

想要达到的目的:

  1. 整机加4块左右硬盘的功耗要控制在50W左右.
  2. 至少要能上4块硬盘,最好能升级到8块左右硬盘.能做RAID 5.
  3. 千兆网络环境下,要有60MB/s的上下传速率.
  4. 除了能做NAS,还要能增加SVN server之类的应用.
  5. 有可能做HTPC,这样得有一个过得去的显卡或者至少有hdmi输出.
  6. 噪音尽量小.
  7. 不带硬盘价格控制在2K以下

本来先考虑的atom平台,cpu功耗相当小,可惜加上对应的主板后就难看了点. 然后只能转向amd apu系列. RAID5要消耗比较多的CPU资源,因此E350的性能要好得多. 再查询E350整合主板,品牌牌子有GIGABYTE和ASUS二家.此外梅捷,七彩虹都有类似的主板. 另外这类主板主要分二类,一是只有USB2以及SATA3G的,二是带USB3以及SATA6G的.显然后者参数要美妙得多.

  1. 技嘉(GIGABYTE)GA-E350N-USB3, 1.6G双核CPU,集成HD 6310显卡,2USB3,4 SATA 6G,CPU带风扇. 功耗约22w. 699大洋.
  2. Asus APU E35M1-M PRO FUSION,1.6G双核CPU,集成HD 6310显卡,2USB3,5 SATA 6G,1 ESATA 6G,静音设计,无风扇. 功耗约22w. 1299大洋.

这二块入眼的主板其实本不用考虑选哪个,ASUS的5SATA,无风扇设计,简直就是为NAS设计的. 可我还是纠结了二天才确定下来,因为ASUS的要1299块,TB也得1100+,而GIGABYTE的只要699块啊~,于是我决定用699块的.除了我一向勤俭节约外,主要还是考虑万一配出来的NAS不满意,这不就能减少不少损失么......当然前期4块硬盘也足够使用了. 至于那个明显是噪音制造者的CPU风扇,我就当没看见好了.

机箱有大小二种选择,小机箱省地,大机箱散热和扩展性要好不少. 我觉得4块硬盘挤一起,那热量也挺吓人的,还是用大点的机箱好了. 电源得配个好点的.烧主板烧硬盘的电源,碰到过不少. 查了一下JD上的存货,配了TT的机箱+电源:

  1. TT 金刚500高效电源,5SATA电源头,带14cm风扇一个.299大洋.
  2. TT Commander MS-I指挥官居中塔机箱,7HD位. 带12cm风扇一个.279大洋.

主板最高支持8G内存,考虑到要使用ZFS文件系统,要求最少6G内存,这样内存得上满,好在现在这东西非常便宜.

  • Samsung 三星 金条 DDR3 1066 4G x2, 275大洋.

原有一块2T WD绿盘,再购置二块同型号硬盘. 花费998大洋.

这样总计花费,不算硬盘约1500块,DIY出一个8G内存,1.6G双核CPU,4个SATA 6G接口,2个USB3接口的家用NAS. 相当超值了.

所有硬件分别采购于JD,新蛋,易讯三家. 早上9点前下的订单,当天下午JD送到一部分,易讯送到.第二天上午JD送完剩下的,新蛋送到. 大体可见三家物流的情况.

到手后主板要处理一下. CPU的散热片要拆下来,是个二层结构. 在二层金属片接触的地方,只是象征性的涂了不到一平方厘米的硅胶. 买管硅胶,恶狠狠地把它涂满吧~ 不然开机时间一长,CPU/GPU的温度会很高. 而且主板四个SATA接口,只配了二根SATA硬盘线, 在此BS一下GIGABYTE的偷工减料.

硬件安装好后一次点亮, 不接硬盘,按下电源开机时有个100W+的瞬时功耗, 然后稳定在33W左右. 进BIOS把内置显卡频率下调到300M.能减少2W功耗. 这样不带硬盘功耗在31W左右. 加上三块硬盘,待机时功耗增加9W左右,全机约38W~40W, RAID 5读写时功耗增加10~20W左右,全机功耗50W~59W,基本上没超过60W. 虽然还是嫌功耗稍高了点,总体来说还是能够接受, 毕竟大多数时间还是待机, 不到40W的功耗也算是看得过去了.

下篇再说说NAS系统软件的选择与安装.

he.net申请到的免费IPV6地址块只用到一台机器上太浪费了, 而Toastman的Tomato修改版, 对he.net的ipv6地址块支持得相当完美了. 这样可以把申请到的地址块放在路由器上, 并自动分配IPV6地址给所有接入路由器的机器.

首先去https://www.tunnelbroker.net/申请一个64位的IPV6地址块,并记下

Server IPv4 Address
Server IPv6 Address
Client IPv4 Address
Client IPv6 Address

然后你要有一个能刷tomato的路由器,并刷上相应的Tomato Toastman版. 我用的中兴h618b对应的版本是Tomato Firmware v1.28.7820 MIPSR1-Toastman K26 USB VPN.

login到router,进入basic->ipv6菜单.

  • IPv6 Service Type 选择 6in4 Static Tunnel
  • Assigned / Routed Prefix 填写要分配给接入机器的ipv6前缀,比如你申请到的是类x.x.x.x::1的地址,这儿填写x.x.x.x::
  • Prefix Length填64
  • Router IPv6 Address选择Default,会自动填写成he.net分配的Server IPv6 Address,不然选择Manual手工填写成Server IPv6 Address.
  • Enable Router Advertisements勾上,
  • Tunnel Remote Endpoint (IPv4 Address)填写he.net分配的Server IPv4 Address,
  • Tunnel Client IPv6 Address填写he.net分配的Client IPv6 Address,64位长.

如果你好运气路由器是固定的IPV4地址,那么设置这些就ok了.保存后radvd会自动启动用于分配ipv6地址.

如果是pppoe之类拿的动态IP地址,那么这时候he.net上显示的Client IPv4 Address则会和你现在路由器地址不符. 这个时候所说的"完美"支持就表示出来了. 进入basic->ddns菜单,看,下拉列表里有个"HE.net IPv6 Tunnel Broker",贴心吧.帐号填写完后保存,这样地址改动后,会自动update he.net上的Client IPv4 Address数据.

之后路由器给接入的机器分配IPv4地址时,会自动也分配一个IPv6地址. 这样router后面带的所有机器,都能实现IPV6接入了.

原本使用的SIP Server是sip ser,后来改用kamailio. 二者的配置和使用都基本一样. kamailio放在VPS上,程序本身相当稳定,但随着通话时间的增长,随机在5到10分钟后,会因为一些已知或未知的原因,通话质量迅速下降. 挂掉重拨后能且只正常一小会儿,然后又必须重拨, 很是烦人.

后来把sip流量放在vpn里,情况好了很多. 至少不会因为莫名的干扰导致通话质量下降. 不过这样一来,sip流量必须通过vps进行中转, 而出国线路每天会不定期的抽风随机的一段时间......全国LAN网时代大概不远了吧?

暂时方案,把sip server放在家里的router上,然后再挂上vpn,这样二方通话就能直接走国内线路vpn里. 虽然我也曾发现国内有时候也丢包15%~30%,但总比去VPS丢50%+要好. 而且国内线路抽风的时候要少些, 因为大多数G点都不在国内.

翻出落了不少灰尘的中兴h618,吹吹. 其实我蛮看好开源的Netgear WNR 3500L,5个1000M端口有木有?480M的CPU有木有?64M内存有木有?到手的3500L被人抢走了有木有? 可惜只有8M FLASH,抢就抢吧, 我也主要用无线,1000M的有线端口暂时用处不大. 我还是再吹吹h618吧,干净了.

firmware换成Tomato Firmware v1.28.7820 MIPSR1-Toastman K26 USB VPN了,为了它的IPV6功能.

中兴h618有16M FLASH,安装完firmware后,还能空8M+,用来安装ipkg及sip server. 如果其他开源router没有足够的FLASH空间,则要有usb接口,mount一个小u盘到/opt,8M以上容量就可以了,实际安装完占用约3.5M的空间.

ipkg包里,选择极其轻巧的siproxd做为sip server,功能自然没有ser及kamailio多,但足够满足简单的通话要求.

ssh到路由器里,Enable jffs并且mount到/opt,然后安装ipkg基本包,也可参考 Tomato Pandora之Optware软件安装.

cat opt.sh 或下载 http://www.3iii.dk/linux/optware/optware-install-ddwrt.sh.txt

#!/bin/sh
# Optware pre-installation script, Leon Kos 2006, 2008
# added -verbose_wget to some lines, MrAlvin 2009

REPOSITORY=http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable
TMP=/tmp

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/opt/bin:/opt/sbin
unset LD_PRELOAD
unset LD_LIBRARY_PATH

_check_config()
{
    echo "Checking system config ..."
    GATEWAY=$(netstat -rn |
	sed -n 's/^0.0.0.0[ \t]\{1,\}\([0-9.]\{8,\}\).*/\1/p' )
    if [ -n "${GATEWAY}" ]; then
	echo "Using ${GATEWAY} as default gateway."
    else
	echo "Error: No default gateway set!"
	exit 2
    fi
    if [ -s /etc/resolv.conf ]; then
	echo "Using the following nameserver(s):"
	if grep nameserver /etc/resolv.conf ; then
            GATEWAY_SUBNET=$(echo "${GATEWAY}" |
		sed 's/\.[0-9]\{1,3\}\.[0-9]\{1,3\}$//')
	    if [ "${GATEWAY_SUBNET}" = "192.168" ]; then
		if grep -q ${GATEWAY} /etc/resolv.conf ; then
		    echo "Gateway ${GATEWAY} is also nameserver."
		else
		    echo "Warning: local nameserver is different than gateway!"
		    echo "Check config or enter:"
		    if test -L /etc/resolv.conf ; then 
		      echo "  sed -i s/192.168.*/${GATEWAY}/ /tmp/resolv.conf"
		    else
		      echo "  sed -i s/192.168.*/${GATEWAY}/ /etc/resolv.conf"
		    fi
		    echo "and try again - or wait to see if your download continues anyway."
		fi
	    fi
	else
	    echo "Error: No nameserver specified in /etc/resolv.conf"
	    exit 5
	fi
    else
	echo "Error: Empty or nonexistent /etc/resolv.conf"
	exit 3
    fi

    if mount | grep -q /opt ; then
	[ -d /opt/etc ] && echo "Warning: /opt partition not empty!"
    else
	echo "Error: /opt partition not mounted."
	echo "for running Optware on JFFS (not recommended), Enter"
	echo "    mkdir /jffs/opt"
	echo "    mount -o bind /jffs/opt /opt"
	echo "to correct this."
	exit 4
    fi
}

_install_package()
{
    PACKAGE=$1
    echo "Installing package ${PACKAGE} ..."
	echo "   Some newer versions of DD-WRT does not show download progress bar,"
	echo "   so just be patient - or check STATUS -> BANDWIDTH tab for download"
	echo "	 activity in your routers Web-GUI"
    wget -O ${TMP}/${PACKAGE} ${REPOSITORY}/${PACKAGE}
    cd  ${TMP} 
    tar xzf ${TMP}/${PACKAGE} 
    tar xzf ${TMP}/control.tar.gz
    cd /
    if [ -f ${TMP}/preinst ] ; then
	sh ${TMP}/preinst
	rm -f ${TMP}/preints
    fi
    tar xzf ${TMP}/data.tar.gz
    if [ -f ${TMP}/postinst ] ; then
	sh ${TMP}/postinst
	rm -f ${TMP}/postinst
    fi
    rm -f ${TMP}/data.tar.gz
    rm -f ${TMP}/control.tar.gz
    rm -f ${TMP}/control
    rm -f ${TMP}/${PACKAGE}
}

_check_config
_install_package uclibc-opt_0.9.28-13_mipsel.ipk
_install_package ipkg-opt_0.99.163-10_mipsel.ipk
/opt/sbin/ldconfig
/opt/bin/ipkg -verbose_wget update 
/opt/bin/ipkg -force-reinstall -verbose_wget install uclibc-opt
/opt/bin/ipkg -force-reinstall -verbose_wget install ipkg-opt

安装

cd /opt
sh ./opt.sh
ipkg update

先安装libtool库,打包sipproxd时人没把这个依赖加进去

ipkg install libtool

安装好用的ngrep工具,这个没有依赖,不安装也可以省点空量.

ipkg install ngrep

安装sipproxd

ipkg install siproxd

此时会提示

To complete the installation, you must edit /opt/etc/siproxd.conf-example and rename it to /opt/etc/siproxd.conf,
and then run /opt/etc/init.d/S90siproxd to start siproxd.

其实应该先改/opt/etc/siproxd_passwd.cfg文件,把sip帐号增加进去,格式很简单. 然后

cp /opt/etc/siproxd.conf-example /opt/etc/siproxd.conf

修改if_inbound及if_outbound为br0就可以了. 我这里因为用vpn连接了远程的路由器, 可视为全走内网,所以把rtp_proxy_enable也设为0了. 最后启动

/opt/etc/init.d/S98siproxd

siproxd会在TCP以及UDP的 0.0.0.0:5060上监听.

这样我把自己路由器里的sip电话以及远端vpn连接的路由器里的sip电话都设置为自己路由器内网ip就可以了.

简单示意图: sip phone1 ----> GW1,siproxd server & openvpn server----> internet <----->GW2,openvpn client <-----sip phone2

好了,你就真变成国内大LAN网,也影响不了我打电话了.

siproxd比较可惜的是不支持ipv6,没有查看注册及通话情况等管理功能.如果有啥问题,直接动用ngrep监听数据吧.

vps一直有IPV6地址的.今天把家里路由的ipv6设置好之后,才正式启用vps上的ipv6. 还得到了一个小奖牌:

试着用baidu.com和google查询了一下自己的博客域名. 只上图,不解释.

update 2025: 图不见了,不说了。

收到name.com的通知邮件,ahui.us一个月后要到期了.为免麻烦,于是想去再续费三到五年的样子. 结果在name.com中,总是无法点击"+"号增加续费年限,报了一个500的奇怪错误. 然后想着没办法,就一年一年的续吧,只是要多支付几次. 选中一年,$8.99的费用,直接用paypal支付,绑定的招行信用卡. 扣款短信倒来得挺及时,就是paypal和name都显示支付没有成功.重试了一下paypal支付以及直接招行信用卡支付,都是有扣款短信,但显示支付没有成功.

Yesterday PayPal $0.00 Failed Renewal ahui.us 5/20/2011 Credit Card $0.00 Failed Renewal ahui.us 5/20/2011 PayPal $0.00 Failed Renewal ahui.us 5/20/2011 PayPal $0.00 Failed Renewal ahui.us

很无语的看着一连串的Failed状态的支付信息. 域名刚注册的时候,就是支付paypal支付成功的. 信用卡也做了认证. 电招行客服, 客服mm也只是甜甜的告诉我系统显示支付已经成功了,其他都不知道. 成功了我还电你么?

不得已考虑到域名转移到godaddy,那边支付方式要多一点,包括支付宝. 转移还能便宜$1呢. 找到一个很久没用了的godaddy帐号, 尝试着在这边绑定一下招行的作用卡, 结果绑定到帐号是OK的,正式支付时一样交易无法完成. 这样只能切换到win下用支付宝进行支付了. 于是又进name.com准备去解锁域名并记下auth code, 然后很惊异的发现,ahui.us域名下的Domain Lock以及Auth Code的值为Null,那是真正的空值,什么都没有啊~ 这是一个什么样的世界~ 这样无法解锁域名,也拿不到auth code,想转移也只能做梦了.

严重怀疑name.com系统升级啥的,丢掉了我的域名下的二个关键属性值. 老外做事也是严重的不靠谱啊! 喔,那个"也"字我想不用去掉. 给support去信告之情况,让他们给我修复一下域名状态. 再等了一天多, 没收到回信. 上线查看了一下,Domain Lock显示为Lock状态了,Auth Code也有一串值了. 这是哪位天使GGDDJJMM做了好事也不回信通知我一下我再去信表扬顺便寄个锦旗什么的呢? 再一个可能就是我renewal的时候刚好碰到name正在升级系统且刚好我的域名状态只转换了一部分? 还是那一句: 严重不靠谱啊.

接下发现"+"号能点了,想renewal几年就几年了. paypal没敢再试, 尝试再绑定了一次招行卡,验证失败, 换了一张兴业的信用卡, 验证成功. 哎,居然成功了? 正在意外中,手机叫了起来, 兴业的业务员向我证实是不是有个叫啥name的网站要验证我的信用卡. 这里要大大的赞一下兴业的服务, 我还没反应过来呢, 他们的业务员就来电话了. 招行啊,你堕落了! 堕落的还有你那万年不改的win+IE专用控件!!! 差不多到了该考虑休掉你的时候了.

用直接绑定的兴业卡renewal了一年,支付成功. 再renewal四年,支付成功. 好了.下次再有麻烦就等五年以后再麻烦吧. 万一那个2012成了现实, 这域名有效期能坚持到下一个纪元了吧?

总结这问题的根本还是在name.com的系统出错,这的确也是出乎意料之外的事情. 恶意的猜测name自己也没想到系统会出错, 所以悄悄的修正后,也不肯回信留下证据什么的. 如果其他人的域名没有同样的问题,那还算后果不大,只是让我没头脑的忙活了半天, 在几张信用卡上都留下了不知真假的$8.99的扣款记录. 另外一问题就是招行的服务越来越差了,包括人工服务以及他们的系统服务. 特别是在Linux下,基本上没法使用他们的网上支付功能.

打开 ulipad/conf/python.acp文件,在 [autostring_append] 行之后加入

' = "!^'"
" = '!^"'
< = "!^>"
( = "!^)"
{ = "!^}"
<square> = "!^]"