carp協定

carp協定所屬現代詞,指的是通用地址冗餘協定。

CARP

全稱 :Common Address Redundancy Protoco通用地址冗餘協定

簡介

通常使用 VRRPVirtual Router Redundancy Protocol 虛擬路由器冗餘協定)來實現路由器雙機冗餘,但是它是有著作權的,所以 OpenBSD 開發了開放協定 CARP(Common Address Redundancy Protoco 通用地址冗餘協定),而 UCARPUserland CARP)協定則是 CARP 的 Linux 版本,"www.ucarp.org" 網站提供開放源碼同名軟體。

CARP 協定是在 IP之上的一種協定。請注意 carp 和 CARP 的不同。即 carp 表示的是一種虛擬設備。此設備提供對 CARP 協定的支持。

作用

carp 接口允許本地網路的(注意是同一網段,不能跨越路由器)多個機器來共享一個(一組)IP 地址。實際上的結果就是當一台該 IP 地址的主機在出現意外事故的情況下不能工作。其它的機器能夠立刻自動的接替其工作。這一點對於防火牆系統來說提供冗餘功能是非常不錯的。目前的具有冗餘功能的防火牆系統也只有 OpenBSD 系統。當然會有一個類似問題:即如何在核心內實現 IP 冒充技術。但只能是單向實現欺騙。對 carp 進行一些設定後它還能提供負載均衡功能,關於這些文章詳見 Ryan McBride 的文章。

使用方法

要使用 carp 設備必須首先在編譯核心時加入對 carp 的支持,在 /sys/arch/i386/conf/GENERIC 中加入:
pseudo-device carp16

(注意:在 Man手冊中有參數,即在 carp 後可以接參數,但在最新的 GENERIC 中沒有說明接參數)

編譯核心後使用 ifconfig carp 0 create 來建立 carp 第0 號設備。

使用:
ifconfig carp 0 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 carp reqcarpr;
通過 copyin(ifr->ifr_data,&carpr,sizeofcarpr) (原始碼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;
sc->sc_ac.ac_enaddr[5]=sc->sc_vhid;

以上的 ac_enaddr 的前五位地址說明 CARP 協定使用的是多播地址。硬體地址使用的最後一位是參數中的主機號,也就是說,ifconfig 中的主機號是用於設定 carp 的地址用的。

參數 mekmitasdigoat 在原始碼的第1740行進行了處理。bcopy(carpr.carpr_key,sc->sc_key,sizeof(sc->sc_key));

即把參數(結構 carpreq 的成員 carpr_key )放到了結構 carp_softc 的成員 sc_key 中。結構 carp_softc 是接口設備的專用數據結構,每個接口都有相應的該結構(詳見 xie_minix 寫的“乙太網通用驅動原始碼詳解”)。

現在看看 carp_softc 的成員 sc_key 的長度.原始碼127行:
unsignedcharsc_key[CARP_KEY_LEN];

其中 CARP_KEY_LEN 在本文(即 carp.h 頭檔案)有定義。長度為20。這就是為什麼參數最大長度為20個字元的原因。以上的設定只是對備用機的設定。對主用機的設定用以下語法:

ifconfig carp 0 create
ifconfig carp 0 vhid 1 advskew 100 pass mekmitasdigoat 192.168.1.10 255.255.255.0

當然這些語句是在另一台機器上執行的。唯一的區別是多了參數advskew100,該參數是用來設定主用機傳送廣告包(CARP)的頻率。

相關詞條

相關搜尋

熱門詞條

聯絡我們