通用地址冗余协议---OPENBSD CARP

2009-05-13 01:37:47来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折


又发个为完成的.关于OPENBSD的CARP(通用地址冗余协议)
CARP协议详解                     --CARP协议原理及结构
/*作者:xie_minix*/ 
CARP ---通用地址冗余协议
源代码:(OpenBSD系统) src/sys/netinet/ip_carp.h, Revision 1.8
在核心配置文件/sys/arch/i386/conf/GENERIC中.定义为:
pseudo-device carp  [count]
其中count 为支持虚拟设备carp的数量
描述:
        carp接口为一虚拟设备.(注:虚拟设备即在机器中不真实存在).此种设备一般是使用通用
接口的克隆技术来生成.比如在carp程序中的挂接设备函数(一般设备的挂接都是使用"设备名
+attach")carpattch只是简单调用通用接口文件(if.c)中的通用设备克隆挂接函数
if_clone_attach(源代码:753行).实际上是在所有的使用克隆产生的设备列表中插入该carp
设备到表头(全局变量if_cloners是所有克隆设备的链表头.源代码:if.c第135行).
    CARP协议是在IP之上的一种协议.请注意carp和CARP的不同.即carp表示的是一种虚拟设备
.此设备提供对CARP协议的支持.关于CARP协议将在以下介绍.先来看看carp的作用.carp接口允
许本地网络的(注意是同一网段,不能跨越路由器)多个机器来共享一个(一组)IP地址.实际上的
结果就是当一台该IP地址的主机在出现意外事故的情况下不能工作.其它的机器能够立刻自动
的接替其工作.这一点对于防火墙系统来说提供冗余功能是非常不错的.目前的具有冗余功能的
防火墙系统也只有OpenBSD系统.当然我在从事ARP研究时曾经提出过类似问题,即如何在核心内
实现IP冒充技术.但只能是单向实现欺骗.对carp进行一些设置后它还能提供负载均衡功能.关于
这些文章详见Ryan McBride的文章.
 
使用方法:
    要使用carp设备必须首先在编译内核时加入对carp的支持.
    在/sys/arch/i386/conf/GENERIC (或你自己定义的核心配置文件)中加入:
    pseudo-device carp 16 (注意:在Man手册中有参数,即在carp后可以接参数,但在最新的GENERIC中没有说明接参数)
    编译核心后使用ifconfig carp0 create 来建立carp第0号设备.
  使用:ifconfig carp0 vhid 1 pass mekmitasdigoat 192.168.1.10  255.255.255.0来设置本机的第一个carp设备.
  意思是carp第0号设备(即第一个)的主机号为1,pass后接的是要用SHA1加密的通讯字符(当然可以自己随便取,不过只
  是前20个字符有用,下面我会有说明).IP地址是设置的carp设备的IP地址.
  说明:
  实际上任何的ifconfig都将调用欲设置的设备的源代码部分的ioctl函数(即该设备名+"_ioctl",在此例中是carp_ioctl).
  我们的参数1,mekmitasdigoat等都将放到一个叫carpreq结构中.在源代码的1594行有申明:struct carpreq carpr;
  通过copyin(ifr->ifr_data, &carpr, sizeof carpr) (源代码1687行) 从用户区把参拷贝到核心区的carpreq结构的实例
  carpr中.然后设置该设备的硬件地址.我们看看源代码的1718行:
  sc->sc_vhid = carpr.carpr_vhid;
  sc->sc_ac.ac_enaddr[0] = 0;
  sc->sc_ac.ac_enaddr[1] = 0;
  sc->sc_ac.ac_enaddr[2] = 0x5e;
  sc->sc_ac.ac_enaddr[3] = 0;
  sc->sc_ac.ac_enaddr[4] = 1;

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:也不知道是什么时候写的关于TELNET的问题

下一篇:BSD基于IP的新协议实现(教学用)