redis 命令手册中文版

2012年5月20日 16hot 没有评论

今天看到中文版的,转个链接:

http://redis.readthedocs.org/en/latest/

分类: 16hot 杂记 标签:

vmware下安装FreeBSD,使用共享目录

2012年5月17日 16hot 没有评论

安装工具包:
pkg_add -rv open-vm-tools-nox11

配置启动项:
vi /etc/rc.conf

vmware_guest_vmblock_enable=”YES”
vmware_guest_vmhgfs_enable=”YES”
vmware_guest_vmmemctl_enable=”YES”
vmware_guest_vmxnet_enable=”YES”
vmware_guestd_enable=”YES”

重启系统
reboot

挂载:
mount -t vmhgfs .host: /mnt

分类: BSD/linux 标签: ,

luaxml 和lua-cjson

2012年5月12日 16hot 没有评论

http://viremo.eludi.net/LuaXML/

http://www.kyne.com.au/~mark/software/lua-cjson.php

这两天用需要用lua来读取xml文件,又需要将数据转换成json。于是用到了LuaXml和Lua-cjson 。
两个库的使用方法都挺简单的。也有简单的文档和使用例子。

分类: LUA 标签: , ,

朱文健:初创公司融资估值十四法

2012年5月6日 16hot 没有评论

作为一个创业者,您是不是正在遇到这样的情况:和天使投资谈的很开心,双方马上就要进入实质性的注资阶段了。但自己却迷茫了,一无什么固定资产,二无拿的出手的无形资产,我们的公司到底该估值多少钱?刚进入这样行业的天使投资人们或许也有这样的困惑,他除了几个技术人员、几个销售和一个想法之外一无所有,我为它估值多少才合适?

天使投资们给了一个估值,但这个估值是怎么得出的?靠谱不靠谱?创业者该依据什么来讨价还价?是的!创业优问在这里力图给大家一个硬梆梆的答案。

上海凯熠网络科技公司总经理朱文健kevinzhu给列出了14种方法。下面我们就对这14种方法做一个简单的介绍:

1、500万元上限法

这种方法要求天使不要投资一个估值超过500万的初创企业。这种方法好处在于简单明了,同时确定了一个评估的上限。

2、博克斯法

这种方法是由美国人博克斯首创的,对于初创期的企业进行价值评估的方法,典型做法是对所投企业根据下面的公式来估值:

一个好的创意100万元

一个好的盈利模式100万元

优秀的管理团队100万~200万元

优秀的董事会100万元

巨大的产品前景100万元

加起来,一家初创企业的价值为100万元~600万元。

3、三分法

是指在对企业价值进行评估时,将企业的价值分成三部分:通常是创业者,管理层和投资者各1/3,将三者加起来即得到企业价值。

4、200万~500万标准法

许多传统的天使投资家投资企业的价值一般为200万~500万,这是有合理性的。如果创业者对企业要价低于200万,那么或者是其经验不够丰富,或者企业没有多大发展前景;如果企业要价高于500万,那么由500万元上限法可知,天使投资家对其投资不划算。

这种方法简单易行,效果也不错。但将定价限在200万~500万元,过于绝对。

5、200万~1000万网络企业评估法

网络企业发展迅速,更有可能迅速公开上市,在对网络企业进行评估时,天使投资家不能局限于传统的评估方法,否则会丧失良好的投资机会。考虑到网络企业的价值起伏大的特点,即对初创期的企业价值评估范围由传统的200万~500万元,增加到200万~1000万元。

6、市盈率法

主要是在预测初创企业未来收益的基础上,确定一定的市盈率来评估初创企业的价值,从而确定投资额。

7、实现现金流贴现法

根据企业未来的现金流,收益率,算出企业的现值作为企业的评估价值。

这种方法的好处是考虑了时间与风险因素。不足之处是天使投资家应有相应的财务知识。并且这种方法对要很晚才能产生正现金流的企业来说不够客观。

8、倍数法

用企业的某一关键项目的价值乘以一个按行业标准确定的倍数,即得到企业的价值。

9、风险投资家专用评估法

这种方法综合了倍数法与实体现金流贴现法两者的特点。具体做法:

(1)用倍数法估算出企业未来一段时间的价值。如5年后价值2500万。

(2)决定你的年投资收益率,算出你的投资在相应年份的价值。如你要求50%的收益率,投资了10万,5年后的终值就是75.9万元。

(3)现在用你投资的终值除以企业5年后的价值就得到你所应该拥有的企业的股份,75.9÷2500=3%

这种方法的好处在于如果对企业未来价值估算准确,对企业的评估就很准确,但这只是如果。这种方法的不足之处是比较复杂,需要较多时间。

10、经济附加值模型

表示一个企业扣除资本成本后的资本收益,即该企业的资本收益和资本成本之间的差。站在股东的角度,一个企业只有在其资本收益超过为获取该收益所投入的资本的全部成本时才能为企业的股东带来收益。

这种估值方法从资本成本,收益的角度来考虑企业价值,能够有效体现出天使投资家的资本权益受益,因此很受职业评估者的推崇。

11、实质CEO法

是指天使投资家通过为企业提供各种管理等非财务支持以获得企业的一定股权,这种天使投资家实际上履行着企业首席执行官的智能,故称之为实质CEO法。

这种方法的好处在于,天使投资家只需要付出时间和精力,没有任何财务方面的风险。而且由于持有公司的股份,天使投资家往往被视为与创业者的利益一致而得到信任。不足之处在于,由于天使投资家对企业管理介入很深,介入之前,天使投资家应对企业和创业者做更多的了解工作。

12、创业企业顾问法

和实质CEO法很相似,不同之处在于天使投资家对企业介入没有那么深,提供支持没有那么多,相应的天使投资家所获得的股权也较低。

这种方法更适合于企业尚未有多大发展,风险比较大时。

13、风险投资前评估法

是一种相对较新的方法,在这种方法中,天使投资家向企业投入大量资金,却不立即要求公司的股权,也不立即要求对公司估值。

这种方法的好处是避免了任何关于企业价值、投资条款的谈判,不足之处是天使投资家无法确定最终的结果如何。

这是很多成功天使投资家常用的方法。

14、O.H法

这种方法是由天使投资家OH首先使用的,主要是用于控制型天使投资家,采用这种方法时,天使投资家保证创业者获得15%的股份,并保证其不受到稀释,由于天使投资家占有大部分股权,但天使投资家要负责所有资金投入。

这种方法的好处是创业者可以稳稳当当获得15%的股份,而控制型天使投资家则获得公司的控制权。不足之处,创业者由于丧失了对公司控制权,工作缺乏动力。

上述基本涵盖了各种评估方式了。根据项目不同,创业者可以与投资人磋商,不宜一概而论。

分类: 转载 标签:

信号处理及system返回结果的问题

2012年4月25日 16hot 没有评论

在一个应用程序里用到system函数来执行系统命令,开始时死活也获取不了正确的返回码。几经调试后发现是设置了信号处理,将信号处理部分注释掉,就可以正常获取到system的返回码了。

不过,这时又遇到了新问题。fork子进程执行后,会变成defunct状态(僵尸进程)。于是在程序里面加入了wait,等待子进程结束后收尸。问题看起来是解决了,能获取到system返回状态,又解决了僵尸进程。

但是,又有新问题来了。由于使用wait,它会无条件的等待子进程结束后,才让父进程继续工作。因为它是堵塞执行的。
也因此而导致无法多个子进程并发工作。只有第一个子进程结束后,才会执行第二个子进程。

后来的解决办法,是采用两次fork来解决。先fork一个子进程,我们叫它子进程 A吧。在子进程A里再fork多个子进程来执行具体任务,当然是并发的。用那个wait来接收子进程A结束状态,避免僵尸进程出现。至于子进程A fork出来的子进程,由于子进程A结束了,这些子进程就变成了无主进程,就被init接管,执行结束了,就退出被内核回收,也就没有僵尸进程了。

通过这个应用程序,理解了屏蔽子进程信号,会导致system返回值异常;如果不wait(还有其他相关的wait函数),子进程就会变成僵尸进程。

分类: BSD/linux, C/C++ 标签: ,

8 个实用的 Linux netcat 命令示例

2012年4月24日 16hot 没有评论

Netcat 或者叫 nc 是 Linux 下的一个用于调试和检查网络工具包。可用于创建 TCP/IP 连接,最大的用途就是用来处理 TCP/UDP 套接字。

这里我们将通过一些实例来学习 netcat 命令。

1. 在服务器-客户端架构上使用 Netcat

netcat 工具可运行于服务器模式,侦听指定端口

1
$ nc -l 2389
然后你可以使用客户端模式来连接到 2389 端口:

1
$ nc localhost 2389
现在如果你输入一些文本,它将被发送到服务器端:

1
$ nc localhost 2389
2
HI, oschina
在服务器的终端窗口将会显示下面内容:

1
$ nc -l 2389
2
HI, oschina

2. 使用 Netcat 来传输文件

netcat 工具还可用来传输文件,在客户端,假设我们有一个 testfile 文件:

1
$ cat testfile
2
hello oschina
而在服务器端有一个空文件名为 test

然后我们使用如下命令来启用服务器端:

1
$ nc -l 2389 > test
紧接着运行客户端:

1
cat testfile | nc localhost 2389
然后你停止服务器端,你可以查看 test 内容就是刚才客户端传过来的 testfile 文件的内容:

1
$ cat test
2
hello oschina

3. Netcat 支持超时控制

多数情况我们不希望连接一直保持,那么我们可以使用 -w 参数来指定连接的空闲超时时间,该参数紧接一个数值,代表秒数,如果连接超过指定时间则连接会被终止。

服务器:

1
nc -l 2389
客户端:

1
$ nc -w 10 localhost 2389
该连接将在 10 秒后中断。

注意: 不要在服务器端同时使用 -w 和 -l 参数,因为 -w 参数将在服务器端无效果。

4. Netcat 支持 IPv6
netcat 的 -4 和 -6 参数用来指定 IP 地址类型,分别是 IPv4 和 IPv6:

服务器端:

1
$ nc -4 -l 2389
客户端:

1
$ nc -4 localhost 2389
然后我们可以使用 netstat 命令来查看网络的情况:

1
$ netstat | grep 2389
2
tcp 0 0 localhost:2389 localhost:50851 ESTABLISHED
3
tcp 0 0 localhost:50851 localhost:2389 ESTABLISHED
接下来我们看看IPv6 的情况:

服务器端:

1
$ nc -6 -l 2389
客户端:

1
$ nc -6 localhost 2389
再次运行 netstat 命令:

1
$ netstat | grep 2389
2
tcp6 0 0 localhost:2389 localhost:33234 ESTABLISHED
3
tcp6 0 0 localhost:33234 localhost:2389 ESTABLISHED
前缀是 tcp6 表示使用的是 IPv6 的地址。

5. 在 Netcat 中禁止从标准输入中读取数据

该功能使用 -d 参数,请看下面例子:

服务器端:

1
$ nc -l 2389
客户端:

1
$ nc -d localhost 2389
2
Hi
你输入的 Hi 文本并不会送到服务器端。

6. 强制 Netcat 服务器端保持启动状态

如果连接到服务器的客户端断开连接,那么服务器端也会跟着退出。

服务器端:

1
$ nc -l 2389
客户端:

1
$ nc localhost 2389
2
^C
服务器端:

1
$ nc -l 2389
2
$
上述例子中,但客户端断开时服务器端也立即退出。

我们可以通过 -k 参数来控制让服务器不会因为客户端的断开连接而退出。

服务器端:

1
$ nc -k -l 2389
客户端:

1
$ nc localhost 2389
2
^C
服务器端:

1
$ nc -k -l 2389

7. 配置 Netcat 客户端不会因为 EOF 而退出

Netcat 客户端可以通过 -q 参数来控制接收到 EOF 后隔多长时间才退出,该参数的单位是秒:

客户端使用如下方式启动:

1
nc -q 5 localhost 2389
现在如果客户端接收到 EOF ,它将等待 5 秒后退出。

8. 使用 Netcat 来处理 UDP 协议

netcat 默认是使用 TCP 协议,但也支持 UDP,可使用 -u 参数来启用 UDP 协议通讯。

服务器端:

1
$ nc -4 -u -l 2389
客户端:

1
$ nc -4 -u localhost 2389
这样客户端和服务器端都使用了 UDP 协议,可通过 netstat 命令来查看:

1
$ netstat | grep 2389
2
udp 0 0 localhost:42634 localhost:2389 ESTABLISHED
英文原文, OSCHINA原创翻译

分类: BSD/linux, 转载 标签: ,

思索

2012年4月19日 16hot 没有评论

早上又是4点多就醒了。不过这次准确的说法,应该是迷糊中清醒很多了,里彻底的醒还有一段距离。昨天晚上和王锐、公俭和艳昭喝酒聊天,到家都快12点了。这也是这一年多以来,喝得最多的一次。
跟王锐确实有种相见恨晚的感觉。他是个敢说敢干的人,是个实干派,而且年龄、经历跟我非常相近。所以很投合。

早上还是8点多就到公司了,虽然还是很迷糊,但是又要打起精神开始新一天的工作了。
最近一直在反思,我们的目标,我们的理念,我们的运营方式等等。其实这些问题早就该反思了,不应该是现在才开始。只能怪自己懒惰。

分类: 16hot 杂记 标签:

天使投资人王啸:早期融资的9大误区

2012年4月19日 16hot 没有评论

  对于创业者来说,融资是一件无法绕开的大事,而创业的成功往往离不开投资人的支持。Draw Something 一夜成名的背后有著名天使投资人 Ron Conway 的帮助,Instagram 成功的背后也离不开那 9 位投资人的大力支持。但是对于早期融资,创业者往往存在很多误区。下面我们来看看九合创投创始人,“百度七剑客”之一王啸的创业早期融资策略。

  王啸认为,在创业的早期融资中,目前普遍存在着 9 大误区:

创始人股权分配平均,股权过于分散
很多创业者认为,几个创始人平均分配股权可以让大家共同奋斗,不会产生利益方面的争论。其实不然,创业公司一个最大的优势就在于高效的执行力和灵活性,而创始人在这个过程中往往处于一个中心位置。回望所有成功的企业,我们会发现它们几乎都有一个非常特别的创始人,微软、苹果、Amazon 等等无不如此。早期阶段,他们就代表着公司,是他们在驱动着公司不断向前发展。而这种驱动力不仅来自于自身的责任,更来自于“一切我说了算”的决策权。如果几个创始人股权平均太过分散,那么势必影响其决策效率。此时创业公司最大的优势:“执行力和灵活性”就已丧失。

关注钱而忽视了资金背后的投资人
谈到融资,当然需要关注钱。但是正如我们之前所分析,创业者与投资人的连结就像婚姻,与不适合的投资人联姻,很可能会毁掉创业项目。因此,关注资金背后的投资人,关注他们的行业背景、他们所拥有的资源以及他们投资的项目,看看是否能给自己带来真正价值。投资人看一个项目,往往需要对这个项目及其团队骨干做一个非常详细的尽职调查;同样,作为创业者,在寻找投资时,也需要对资金背后的投资人做个类似的尽职调查。

兼职创业希望融到钱后再全职
创业不仅是一项全职工作,更是一项事业。兼职创业说明对自己的项目没有信心或者对自己没有信心,因为你把它放在了第二的后备位置。同时,兼职创业导致不能专注,无法深入。投资人不是傻瓜,如果连自己都对自己(项目)没有信心,他们又怎会投资!

团队没有磨合就融资
正如我们上面所说,投资人看一个项目,往往需要对项目和团队进行全面的尽职调查。很多投资人甚至只看团队,团队靠谱,选择的项目也不会太差。因此在打算融资前,先把团队磨合好是必要的前提。

没有测算自己成本就开始融资
对于创业者来说是融资,但是对于投资人来说就是投资。投资讲求投资回报率,因此了解所投资项目的成本至关重要。同时,对自己项目成本的详细测算,不仅是自身内部管理的必需,更是融资的依据。著名历史学家黄仁宇在总结现代化在中国姗姗来迟原因的时候,认为不能建立在数字上的精确管理是最大原因,这点同样适用于微观企业管理。

在资金流快断掉时才开始融资
如果说资本是社会经济发展的血液,那么资金流就是一个企业继续运转的前提。投资人的投资往往是创业企业在初期阶段的唯一资金来源,因此更应该时刻关注自己的资金流。提前做好融资的准备不仅给予自己更多的选择余地和更大的议价能力,同时给投资人充足的时间。王啸认为,融资应该在资金很充足时就开始打算。

同时向所有认识的投资人融资
这种思想和刚出校门的学生们寻找工作一样,认为广撒网能多捕鱼。然而事实上,广撒网意味着对自己的真实需求不清晰,对投资人的需要不了解。没有目的、没有方向的船无论运行多快,别人永远不知其将抵何方。因此,寻找自己合适的投资人才是真正的王道。

外部股东控股
投资人只会投符合自己投资回报率的项目,如果外部股东控股了一个项目,那么这个项目的前景无疑大打折扣。投资人会想,项目是按照创始团队的方向前进呢还是会向控股股东的方向前进。

盲目乐观估值过高
作为寻找投资的创业团队来说,能获得一个较高的估值不仅是对自己价值的一种肯定,更是其前进的驱动力之一。但是对于一个还没有产生收入的早期创业项目来说,其估值往往取决于发展到下一阶段的成本。创业公司最后的价值则更多体现在被收购或者上市阶段。

  对于创业者的方向选择,王啸认为:

首先,一定要选择一个大市场,但是必须找到一个小的切入口。从小的领域入手并将其做到极致,就拥有了自己的独特优势。在资源、市场等其它条件成熟后再做相关领域的拓展就比较顺理成章。
其次,要判断发展趋势。在如今信息相对发达的情况下,对大的趋势把握并不算太困难,关键在于切入趋势的时机选择。我们曾说 Instagram 的成功只不过在正确的时间、正确的地点做了一件初看起来不一定正确的事情。把握住这个正确的时间、正确的地点,一切都可能水到渠成。
最后,所选项目需要有自身的独特性,借鉴而非抄袭。
  而在团队建设方面,王啸也给出了自己的建议:

团队创始人最好在2-3人左右;
创始人之间能力要能互补;
创始人的分工务必明确;
创始人之间的股权分配要合理,股权分配要能体现高效的决策机制。
  创业是一个不断验证可能性的过程,高效的决策机制与执行力是其获得快速成长的必要条件。而避免这些早期融资常犯的错误将给创业企业注入更多新鲜健康的血液。

分类: 转载 标签:

创业与待遇

2012年4月18日 16hot 没有评论

 作者:纯银

  谈创业者的待遇,首先要明确两件事情。第一,你是创始人或者共同发起此事的创始团队吗?如果是,通常会更信任长期回报,愿意接受短期内的低薪。比如我和搭档都表态说,领点基本生活费就好了,情况紧急时不领钱甚至倒贴钱也行。

  第二,你是创业团队的第一批加入者?还是第二、三、四、五批?加入的时间越早(因为公司资本不足),通常薪水越低,但能领到更多的期权,或是更低的行权价格。相当于用个人风险来换取长期回报。

  我之前四处请教创业者,听到过各种关于创业薪酬的说法。有人说,刚开始最多只领到之前 70% 的,也有人说 70% 都太高,50% 就差不多了,还有人说待遇上不能愧对兄弟们——不过也只是中型公司的中等水平而已。

  (这样讲多半会被别人戳脊梁骨,觉得资本家的心真是黑透了)

  换个角度看,如果项目你喜欢,团队也合得来,管理上非常的友善,任务合理授权充分,工作氛围好/环境好/发展前景好,最后还能拿到一线大公司的薪酬,这简直是发票刮出 1 万元的完美结局。我要是能蹭到这状态我还辞什么职创什么业……

  所谓创业,必定要承担三种风险。资金风险,通常由风险投资商来消化;个人品牌风险,通常由创始人来消化;收益风险,通常由全体创业团队来消化。这些风险当然都是有回报的——如果创业顺利。

  拿收益举例,初始团队全员期权基本上是行规。如果创业顺利,我觉得比较合理的期权回报是“正常薪水的1-3倍”,相当于你认为自己值月薪 10K,加入创业团队 2 年,那么期权收入在 24-72万比较心理平衡,还是不考虑上市或高价收购等变态好下场的情况。和这份收益对应的风险,则是初始阶段只拿“正常薪水的 50%-70%”。

  完整点讲,以上减薪幅度也得先看看你的原始收入。比如之前只领 5k,不仅不高甚至还偏低,那么就没必要减薪。但如果之前领 20k 呢,刚开始创业,压根烧不起钱,不减薪的话人力成本很快就压沉了船。大家抱在一起落水淹死。

  忽然想写这个话题,是因为在组队过程中,有两位条件非常好的大公司的朋友,期待值是年薪 20-30万。这两位朋友都很有能耐,我相信他们在大公司里一定值这个身价。不过,我的回复和建议是,他们可以试试自己发起创业,而不是加入别人发起的团队。如果项目是自己牵头来做的,满怀信心与期待,就比较容易削减自己的收入来控制成本,延长第一笔融资的使用时间。

  如果按照大公司身价来组队,哪怕只是七八人的小队,一年的人力成本也会飙升到 200 多万(+四金),再加上其他成本,一年起码烧掉 300 万,18个月成本预算是 500 万——坦率说按照现在的行情,恐怕很难谈下来这一笔天使投资。而且 VC 也很难信任你,觉得有享乐主义的倾向,事儿还没谱钱倒是哗哗的,不像一个创业的样子。

  什么叫创业的样子?我觉得至少有一点就是,相信回报在未来,而不是当下。当下的牺牲会换回未来若干倍的回报。再说这种牺牲也只是暂时的,比如6-18个月拿到了A轮,通常是两三千万人民币,全员薪资就可以回调到正常水平。这时再算算期权,发现空头支票居然已经值好几十万,并随着B轮,C轮公司估值翻倍而不断升值。

  创业伊始,家底甚薄。用风险兑换前景几乎是一个定律。没有不承担风险的额外的收益,但常见最后竹篮打水的艰苦的付出。稳定,薪酬优厚,环境优美,这些都是大公司的优势——创业则全然反之。它更接近寻宝海盗的大冒险,输的概率远远大过赢的概率。也许正因为此才希望旱涝保收,但这既不是创业的心态,也不是(天使轮)创业团队能承担得了的成本。

  所以跟联系我的朋友交流时,我讲得最多的是项目本身。你可以多问我一些关于产品的问题,尽管问,我耐心作答。加入这支创业小队的动机除了你对创业的向往,对我和 Quake 的信任,更重要的是对项目本身的可行性评估。希望你在审慎权衡各种风险因素后,会觉得这条路走通的概率比较高,同时也是比较愉快的一次旅程。顺理成章的,怀有“信心”也意味着你重视未来的回报更甚于当下。

  今天跟一位联系我的朋友在电话里谈起薪资的话题。我能接受的数值比她之前的薪水低一些,还好低得不太多,只少 1k,不过年终奖就会少很多。我解释说,6-18个月后拿到A轮的话,奖金不是什么问题吧,拿不到A轮咱们就挂了……

  比空头支票式的远景描绘更重要的是,你觉得一直向往的创业经历,是否值得自己接受短期内的薪水下调。说真的,创业顺利的太少,失败的太多。我真不愿意跟你画“期权/融资/上市/发财”这张大饼。比如我这次选择创业,自己投了几十万进去,月薪还不足之前的1/3。难道我有必胜的信心吗?当然没有的,我只是特别想追求一段快意人生的创业经历,自由自在去做一些我喜欢的事情罢了。是的,“自由”几乎是创业公司唯一的优势。在富丽堂皇的大公司被『捆』得久了,才明白自由的可贵。你愿意为了这段探险旅程本身而承担多少风险,付出多少代价?

  前些日子,一个老朋友跟我说,高薪其实也是枷锁。他的工资比我高,薪水这玩意儿(在心理上)一旦上去了就很难下得来,收入比以前少便郁郁不乐。但这同时也限制了你的选择,一定得赚更多的钱,一定得步步高升,一定得……

  赚更多的钱是不是你生命中最重要的事情?

  我这么问,想必大部分人都会给出否定的回答。但想是一回事,做出选择又是另一回事。所以高薪确实是一道枷锁,让你的职业选择越来越窄,越发纠结。

  话说到这里,必须得澄清一下,深夜话痨并不是为了压价。对于预期年薪 20-30万的朋友,我诚挚的建议是,自己发起创业,或者加入另一只成熟期的,可能已经拿到了B轮的创业团队。后者有可能开出与大公司相当的薪资,代价是更少的期权,更低的行权价,以及失去了从零开始培育一款产品的机会。前 5 个创业成员会决定产品的气质、命运与团队文化,这种亲生亲养的快乐,可能不是每个人都看重的,即便看重可能也不值得你冒如此大的风险。但恰恰是特别看重“亲生亲养”的人,才能经历最刺激的创业旅程。拿我现在做的产品方向打个比方,从第 20 位之后加入的同伴相当于“跟团旅游”。跟团和自助游的区别,你们懂得。

  没什么结论,我只是深更半夜大发感慨罢了。国外有一个科技博客作者曾写道:“为什么喜欢创业?因为我们是一群愚蠢的海盗。”看到这句话的时候,我有一种胸口碎大石的悸动。

来自: firecacada.blog.163.com

分类: 转载 标签:

PF负载均衡 – 简介(zt)

2012年4月14日 16hot 没有评论

http://www.hudong.com/wiki/PF%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1

地址池是提供2个以上的地址供一组用户共享的。

地址池可以是:
rdr 规则中的重定向地址
nat 规则中的转换地址
route-to,reply-to,dup-tofilter选项中的目的地址。

有4种使用地址池的方法:

*bitmask
截取被修改地址(nat 规则的源地址;rdr 规则的目标地址)的最后部分和地址池地址的网络部分组合。
例如:如果地址池是192.0.2.1/24,而被修改地址是10.0.0.50,则结果地址是192.0.2.50。如果地址池是192.0.2.1/25,而被修改地址是10.0.0.130,这结果地址是192.0.2.2。

*random
从地址池中随机选择地址.

*source-hash
使用源地址hash来确定使用地址池中的哪个地址。这个方法保证给定的源地址总是被映射到同一个地址池。Hash算法的种子可以在source-hash关键字后通过16进制字符或者字符串来指定。默认情况下,pfctl 在规则集装入时会随机产生种子。

*round-robin
在地址池中按顺序循环,这是默认方法,也是表中定义的地址池唯一的方法。

除了 round-robin 方法,地址池的地址必须表达成 CIDR(ClasslessInter-DomainRouting)的网络地址族。round-robin 方法可以接受多个使用列表和表的单独地址。

sticky-address 选项可以在 random 和 round-robin 池类型中使用,保证特定的源地址始终映射到同样的重定向地址。

PF负载均衡 – NAT地址池
地址池在 NAT 规则中可以被用做转换地址。连接的源地址会被转换成使用指定的方法从地址池中选择的地址。这对于 PF 负载一个非常大的网络的 NAT 会非常有用。由于经过 NAT 的连接对每个地址是有限的,增加附加的转换地址允许 NAT 网关增大服务的用户数量。

在下面的例子中,2个地址被用来做输出数据包的转换地址。对于每一个输出的连接,PF按照顺序循环使用地址。
nat on $ext_if inet from any to any -> { 192.0.2.5,192.0.2.10 }

这个方法的一个缺点是成功建立连接的同一个内部地址不会总是转换为同一个外部地址。这会导致冲突,例如:浏览根据用户的ip地址跟踪登录的用户的web站点。一个可选择的替代方法是使用 source-hash 方法,以便每一个内部地址总是被转换为同样的外部地址。要实现这个方法,地址池必须是CIDR网络地址。
nat on $ext_if inet from any to any -> 192.0.2.4/31 source-hash

这条 NAT 规则使用地址池192.0.2.4/31(192.0.2.4,192.0.2.5)做为输出数据包的转换地址。每一个内部地址会被转换为同样的外部地址,由于source-hash关键字的缘故。

PF负载均衡 – 外来连接负载均衡
地址池也可以用来进行外来连接负载均衡。例如,外来的web服务器连接可以分配到服务器群。

web_servers=”{10.0.0.10,10.0.0.11,10.0.0.13}”

rdr on $ext_if proto tcp from any to any port 80 -> $web_servers round-robin sticky-address

成功的连接将按照顺序重定向到web服务器,从同一个源到来的连接发送到同一个服务器。这个 sticky connection 会和指向这个连接的状态一起存在。如果状态过期,sticky connection 也过期。那个主机的更多连接被重定向到按顺序的下一个web服务器。

PF负载均衡 – 输出流量负载均衡
地址池可以和 route-to 过滤选项联合使用,在多路径路由协议(例如BGP4)不可用是负载均衡2个或者多个因特网连接。通过对 round-robin 地址池使用 route-to,输出连接可以平均分配到多个输出路径。
需要收集的附加的信息是邻近的因特网路由器IP地址。这要加入到 route-to 选项后来控制输入数据包的目的地址。
下面的例子通过2条到因特网的连接平衡输出流量:
lan_net=”192.168.0.0/24″
int_if=”dc0″
ext_if1=”fxp0″
ext_if2=”fxp1″
ext_gw1=”68.146.224.1″
ext_gw2=”142.59.76.1″

pass in on $int_if route-to \
{($ext_if1 $ext_gw1),($ext_if2 $ext_gw2)} round-robin \
from $lan_net to any keep state
route-to选项用来在收到流量的内部接口上指定平衡的流量经过各自的网关到输出的网络接口。注意route-to选项必须在每个需要均衡的过滤规则上出现。返回的数据包会路由到它们出去时的外部接口(这是由ISP做的),然后正常路由回内部网络。
要保证带有属于$ext_if1源地址的数据包总是路由到$ext_gw1($ext_if2和$ext_gw2也是同样的),下面2行必须包括在规则集中:
pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to any
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to any
最后,NAT也可以使用在输出接口中:
nat on $ext_if1 from $lan_net to any -> ($ext_if1)
nat on $ext_if2 from $lan_net to any -> ($ext_if2)

PF负载均衡 – 完整的输出负载均衡规则实例
一个完整的输出负载均衡的例子应该是这个样子:

lan_net=”192.168.0.0/24″
int_if = “dc0″
ext_if1 = “fxp0″
ext_if2 = “fxp1″
ext_gw1 = “68.146.224.1″
ext_gw2 = “142.59.76.1″

nat on $ext_if1 from $lan_net to any -> ($ext_if1)
nat on $ext_if2 from $lan_net to any -> ($ext_if2)

block in from any to any
block out from any to any

pass out on $int_if from any to $lan_net
pass in quick on $int_if from $lan_net to $int_if

pass in on $int_if route-to \
{($ext_if1 $ext_gw1),($ext_if2 $ext_gw2)} round-robin \
proto tcp from $lan_net to any flags S/SA modulatestate

pass in on $int_if route-to \
{($ext_if1 $ext_gw1),($ext_if2 $ext_gw2)} round-robin \
proto{udp,icmp} from $lan_net to any keep state

pass out on $ext_if1 proto tcp from any to any flags S/SA modulate state
pass out on $ext_if1 proto {udp,icmp} from any to any keep state
pass out on $ext_if2 proto tcp from any to any flags S/SA modulate state
pass out on $ext_if2 proto {udp,icmp} from any to any keep state

pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to any
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to any

PF负载均衡 – 参考资料
OpenBSD 官方 PF handbook

分类: BSD/linux 标签: ,