Linux下DHCP伺服器配置

來源:互聯網
上載者:User

一、DHCP概述
  
  1.採用DHCP的必要性
  
  在TCP/IP網路上,每台工作站要能存取網路上的資源之前,都必須進行基本的網路設定,一些主要參數諸如IP地址,子網路遮罩,預設網關,DNS等必不可少,還可能需要一些附加的資訊如IP管理原則之類。對於一個稍微大點的網路而言,網路的管理和維護的任務是相當繁重的。一台電腦從一個子網轉移到另一個子網,就要重新對系統進行配置。對於普通水平的工作站使用者是不能賦予他們配置自己的工作站網路的許可權,而且也沒有這個必要。如果一個沒有相應技術水平的使用者出於好奇或想學習一下的目的錯誤地更改了工作站的網路設定,造成網路故障,後果不言而喻。因此,需要有一種機制來讓TCP/IP的配置和管理從使用者端轉移到網路管理端,實現IP的集中式管理。解決方案就是用DHCP。
  
  v2.DHCP的主要功能
  
  DHCP的全稱是動態主機設定通訊協定(Dynamic Host Configuration Protocol),由IETF(Internet 網路工程師任務小組)設計,詳盡的協議內容在RFC文檔rfc2131和rfc1541裡。目的就是為了減輕TCP/IP網路的規劃、管理和維護的負擔,解決IP地址空間缺乏問題。運行DHCP的伺服器把TCP/IP網路設定集中起來,動態處理工作站IP地址的配置,用DHCP租約和預置的IP地址相聯絡,DHCP租約提供了自動在TCP/IP網路上安全地分配和租用IP地址的機制,實現IP地址的集中式管理,基本上不需要網路管理員的人為幹預。而且,DHCP本身被設計成BOOTP(自舉協議)的擴充,支援需要網路設定資訊的無盤工作站,對需要固定IP的系統也提供了相應支援。
  
二、DHCP的工作原理
  
  1.幾個DHCP名詞
  
    在介紹DHCP工作原理以前,先解釋這幾個名詞的含義:
  
    DHCP客戶:DHCP客戶是一通過DHCP來獲得網路設定參數的Internet主機,通常就是普通使用者的工作站。
  
    DHCP伺服器:DHCP伺服器是提供網路設定參數給DHCP客戶的Internet主機。
  
    DHCP/BOOTP 中繼代理:在DHCP客戶和伺服器之間轉寄 DHCP 訊息的主機或路由器。
  
    DHCP是基於客戶機/伺服器模型設計的,DHCP客戶和DHCP伺服器之間通過收發DHCP訊息進行通訊。

001.jpg (22.44 KB)

2006-10-24 20:15

  DHCP 訊息的格式與BOOTP訊息大部分相同, 這樣設計可以增強BOOTP伺服器工具,同時為BOOTP和DHCP兩種客戶服務。另外,BOOTP的中繼代理可用來轉寄跨子網的DHCP請求。
  
  各段描述如下
  
  括弧裡的數字代表這個段以8位組為單位的大小,除options外,其餘的段的長度都是固定的,options段的長度至少是312個8位組。如op(1代表這個段的長度為一個8位組 op 是訊息作業代碼,值為1 代表BOOTREQUEST(自舉請求)值為2 代表BOOTREPLY(自舉響應)
  
  在DHCP客戶和DHCP伺服器對話期間,op段被DHCP客戶設定為BOOTREQUEST(1), 被DHCP伺服器設定為 BOOTREPLY(2)。
  
  htype 是硬體地址類型
  
  hlen 是硬體地址長度
  
  hops DHCP客戶置這項為零,中繼代理要用
  
  xid DHCP客戶在尋求時產生的一個隨機數, 它提供了對所有後續的DHCP訊息中的客戶請求和伺服器響應的一
  
  種聯合。
  
  ciaddr 客戶機用來請求一個特定的IP地址, 這個地址以前曾經分配給該客戶機,希望保留。
  
  yiaddr 由DHCP伺服器填寫,包含它提供給某一DHCP客戶的IP地址。
  
  siaddr 伺服器的主機地址
  
  giaddr 中繼代理的IP地址
  
  chaddr DHCP客戶硬體地址
  
  sname 伺服器主機名稱
  
  file 開機檔案名
  
  2.1 options 選項
  
  在獲得IP地址前,DHCP客戶用 htype, hlen 和 chaddr 段表明它的硬體地址, 這個值由向客戶硬體地址作出響應的伺服器和中繼代理利用。 以前BOOTP協議中的兩個沒有用到的8位組的flags段在DHCP訊息裡有了定義。這個段的高位位元用於表明客戶機能不能在IP地址沒有被配置前接
  收Unicast 回應, 剩下的低位位元保留且必須置為零。 hops 和 secs 段在初始化過程中被中繼代理有選擇地利用。 sname 和 file 域可以被BOOTP或無盤站利用。
  
  2.2 關於 options 選項
  
  選項附加在DHCP訊息的固定長度段之後, 為了與BOOTP工具相容, 選項段的前四個8位組包含了
  RFC1497中定義的magic cookies,餘下的段就都是DHCP 選項。在RFC1533裡定義了DHCP的所有的選項
  的格式。大多數選項用於標誌網路傳輸設定值, 例如子網路遮罩 (mask)、 DNS 服 務 器 地 址 等其
  他選項被DHCP協議利用, 且在大多數訊息中是必需的。
  
  2.3 DHCP 選項的編碼格式
  
  Code  Length value
  
  26    2   m1 m2
  
  選項可以固定長度或可變長度,所有的選項都以一個8位組標識碼開始,這個標識碼用來標識選項。不帶資料的固定長度選項就只由一個標識碼構成。而且只有選項0和255是固定長度,其它的選項都可變長度的,為了標明選項資料的長度,在標識碼後面是一個長度8位組,這個長度8位組的值不包含標識碼和長度碼本身。
  
  例如,DHCP選項裡的子網路遮罩選項如下定義
  
  Code  Length Subnet Mask
  
  1    4   m1 m2 m3 m4
  
  標識碼是1,長度是4個8位組,隨後的4個8位組就是子網路遮罩
  
  DHCP訊息類型選項的標識碼是53,長度是1個8位組,值是從1到7,分別代表不同的DHCP訊息類型。
  
  Code  Length  Type
  
  53   1    1-7
  
  值  訊息類型
  1  DHCPDISCOVER
  2  DHCPOFFER
  3  DHCPREQUEST
  4  DHCPDECLINE
  5  DHCPACK
  6  DHCPNAK
  7  DHCPRELEASE
  
  最後一項選項是零長度的End(選項 255), 表明這是選項的結束以便DHCP客戶處理。 採用選項編碼的好處是不論選項有多長,DHCP客戶都可以正確接收,即使是它不認識的選項(不見得所有的DHCP客戶程式都完全遵循RFC標準)。
  
  不論是DHCP客戶還是DHCP伺服器,都是通過按DHCP訊息格式要求來填寫各個段形成具體的DHCP訊息,DHCP用的傳輸協議的非連線導向的UDP(使用者資料包通訊協定),從DHCP客戶發出的DHCP訊息送往DHCP伺服器的連接埠67,DHCP伺服器發給客戶的DHCP訊息送往DHCP客戶的連接埠68,由於在取得伺服器賦予的IP之前,DHCP客戶並沒有自己的IP,所以包含DHCP訊息的UDP資料報的IP頭的源位址區段是0.0.0.0,目的地址則是255.255.255.255

     2.4 DHCP分配IP地址的過程
  
  DHCP客戶機初始化TCP/IP,在本地物理子網上廣播一個 DHCPDISCOVER 訊息, 以確定DHCP伺服器位置及其IP地址。如果DHCP伺服器和客戶不在同一個物理子網上,BOOTP中繼代理將轉寄這個訊息給DHCP伺服器。由於網路上可能不止一個DHCP伺服器,凡所有具有有效IP地址資訊的DHCP伺服器向客戶機發出一個提議。客戶機從接收到的第一個提議中選定IP地址資訊,並廣播一條租用地址的訊息請求。由發出該提議的DHCP伺服器響應該訊息,指定IP地址資訊給該客戶機並發送一個確認,而所有其它DHCP伺服器撤回各自的提議。客戶機完成TCP/IP協議的初始化和綁定。配置完成後,客戶機就可以使用普通網路通訊和串連至其它IP主機時用到的所有IP服務和應用。
  
三、DHCP 伺服器軟體的安裝  
  
  在Linux幾乎都採用的是Paul Vixie/ISC DHCPd,來實現DHCP伺服器端功能。可以訪問 http://www.isc.org/isc 獲得最新訊息。
  
  目前大多書Linux發布都包含這個軟體,如果是Red Hat,以RPM形式提供,只要單地用RPM安裝就可以了。
  
  # rpm -i dhcpd-1.3.17pl5-i386.rpm
  
四、基本應用
  
  從目前情況看,大多數Linux DHCP伺服器是為Windows95/98客戶平台提供服務。
  
  1.增加主機路由  
  
  為了使DHCP伺服器能為正確MS的DHCP客戶機器服務,需要建立一個到地址255.255.255.255的路由,把這條路由命令加到/etc/rc.d/rc.local,使得每次機器啟動後自動運行。
  
  #route add -host 255.255.255.255 dev eth0
  
  在一些老Linux核心的系統裡可能會報告錯誤訊息:
  
  255.255.255.255: Unkown host
  
  可以試著加下面的條目到/etc/hosts檔案裡
  
  255.255.255.255 dhcphost
  
  再用下面的命令
  
  #route add -host dhcphost dev eth0
  
  2.修改設定檔
  
  DHCPd預設的設定檔是/etc/dhcpd.conf,這是一個文字檔,DHCPd裡有一個文法分析器,能對這個檔案進行文法分析,獲得配置參數。dhcpd.conf 格式是遞迴下降的,關鍵字大小寫敏感,可以有注釋,注釋以#開頭,一直到該行結束。這裡給出一個簡單的dhcpd.conf的例子,所服務的網路為C類保留網路 192.168.1.0
  
  #examples
  
  # 預設租約時間
  
  default-lease-time 28800;
  
  # 最大租約時間
  
  max-lease-time 43200;
  
  # 子網路遮罩選項
  
  option subnet-mask 255.255.255.0;
  
  # 廣播位址
  
  option broadcast-address 192.168.1.255;
  
  # 路由器地址
  
  option routers 192.168.1.1;
  
  # DNS地址
  
  option domain-name-servers 192.168.1.1;
  
  # 網域名稱
  
  option domain-name "netreslab.org";
  
  # 以上都是全域參數
  
  # 子網聲明和掩碼
  
  subnet 192.168.1.0 netmask 255.255.255.0 {
  
  # 範圍
  range 192.168.1.10 192.168.1.100;
  
  # 範圍
  
  range 192.168.1.150 192.168.1.200;
  
  }
  
  這段設定檔將允許DHCP伺服器分配兩段位址範圍給DHCP客戶,192.168.1.10-100 和 192.168.1.150-200
  如果DHCP客戶在申請租約時不請求一個特定租約失效時間,則以default-lease-time(28800秒)為租約時間,如果有請求一個特定的租約失效時間,則採用max-lease-time(432000秒)
  
  伺服器發送下面的參數給DHCP客戶機:
  
  子網路遮罩是255.255.255.0 ,廣播位址是192.168.1.255,預設閘道是192.168.1.1,DNS是192.168.1.1。
  
  如果要為一台叫做hotdog的機器指定固定的IP地址,可以在dhcpd.conf檔案加一條

  3.dhcpd.leases
  
  dhcpd.leases 是DHCP客戶租約的資料庫檔案,預設目錄在/var/state/dhcp/,檔案包含租約聲明,每次一個租約被擷取、更新或釋放,它的新值就被記錄到檔案的的末尾。在DHCPd第一次安裝後,並不會產生這個檔案。但DHCPd的運行需要這個檔案,所以可以建立一個空的檔案。
  
  # touch /var/state/dhcp/dhcpd.leases
  
  DHCPd記錄這個檔案的格式是
  
   lease ip-address { statements... }
  
  每個記錄包含一個提供給客戶的IP地址,在花括弧裡的語句包含一些租約資訊。具體的租約資訊因客戶發出不同的DHCP請求而稍有差別。  
  
  4.運行DHCPd  
  
  要啟動DHCPd, 簡單地鍵入 /usr/sbin/dhcpd 或用ntsysv 把DHCPd服務自動啟動,也可以用
  
  /etc/rc.d/init.d/dhcpd start,
  
  這樣啟動後,DHCPd是啟動在eth0 上,如果DHCPd上的伺服器還有另外一塊網卡eth1, 想在eth1上啟動
  
  dhcpd,就鍵入
  
  #/usr/sbin/dhcpd eth1
  
  以上述例子的dhcpd.conf來啟動dhcpd,如果我們啟動一Windows95機器,Windows95的網路設定的TCP/IP選項裡指定自動獲得IP地址,也就是啟用Windows95裡的DHCP客戶程式,這台95機器的主機名稱叫ONE,進入系統後,用winipcfg查看.
  
  
  在Windows95機器獲得租約後,DHCPd會在dhcp.leases裡建一條記錄
  
  lease 192.168.1.154 {
  
   starts 1 2000/05/15 13:36:42;
   ends 1 2000/05/15 21:36:42;
   hardware ethernet 00:00:21:4e:3f:58;
   uid 01:00:00:21:4e:3f:58;
   client-hostname "one";
  
  }
  
  要注意的是dhcpd.leases的時間記錄採用GMT時間,而不是本地時區的時間。 要查看原生GMT時間可以用
  
  date -u
    
  5.進一步說明dhcpd.conf
  
  5.1 dhcpd.conf 概述
    
  前面說過,dhcpd.conf是個遞迴下降格式的設定檔,有點象C的來源程式風格,由參數和聲明兩大類語句構成,參數類語句主要告訴DHCPd網路參數, 如租約的時間、網關、DNS等,而聲明語句則是描述網路的拓撲,用來表明網路上的客戶、要提供給客戶的IP地址、提供一個參數組給一組聲明等。
  
  描述網路拓撲的聲明語句有 shared-network 和 subnet 聲明。.如果要給一個子網裡的客戶動態指定IP地址,那麼在subnet聲明裡必須有一個 range 聲明,說明位址範圍。如果要給DHCP客戶靜態指定IP地址,那麼每個這樣客戶都要有一個host 聲明。 對於每個要提供服務的與DHCP伺服器串連的子網,都要有一個 subnet 聲明,即使這是個沒有IP地址要動態分配的子網。
  
  一個典型的dhcpd.conf如下
  
  #example
  #全域參數
  
  shared-network 共用網路名稱 {
  
  共用網路特定參數...
  
  subnet 204.254.239.0 netmask 255.255.255.224 {
  
  子網特定參數...
  
  range 204.254.239.10 204.254.239.30;
  }
  subnet 204.254.239.32 netmask 255.255.255.224 {
  
  子網特定參數...
  range 204.254.239.42 204.254.239.62;
  }
  }
  
  subnet 204.254.239.64 netmask 255.255.255.224 {
  
  子網特定參數...
  
  range 204.254.239.74 204.254.239.94;
  }
  
  group {
  
  組特定參數...
  
  host ws1.domain {
  特定主機參數...
  }
  host ws2.domain {
  特定主機參數...
  }
  host ws3.domain {
  特定主機參數...
  }
  }
  
  5.2 語句參考
  
  因為DHCPd的語句很多,不可能一一列出,這裡給出最常用和最重要的語句。
  
  聲明類語句
  
  share-network 語句
  
  shared-network name {
  
  [ 參數 ]
  
  [ 聲明 ]
  }
  
  share-network 用於告訴DHCP伺服器某些IP子網其實是共用同一個物理網路。任何一個在共用物理網路裡的子網都必須聲明在 share-network 語句裡。當屬於其子網裡的客戶啟動時,將獲得在share-network語句裡指定參數,除非這些參數被subnet 或 host 裡的參數覆蓋。用share-network是一種權宜之計,例如某公司用B類網路145.252,公司裡的部門 A 被劃在子網 145.252.1.0 裡, 子網路遮罩為255.255.255.0,這裡子網號為8個bit,主機號也為8個bit,但如果部門
A 急速增長,超過了254個節點,而物理網路還來不及增加,就要在原來這個物理網路上跑兩個8bit掩碼的子網,而這兩個子網其實是在同一個物理網路上,
  
  share-network 語句可以如下
  
  shared-network share1 {
  
  subnet 145.252.1.0 netmask 255.255.255.0 {
  range 145.252.1.10 145.252.1.253;
  }
  
  subnet 145.252.2.0 netmask 255.255.255.0 {
  range 145.252.2.10 145.252.1.253;
  }
  
  這裡的share1是個共用網路名稱。
  
  subnet 語句:
  
  subnet subnet-number netmask netmask {
  
  [ 參數 ]
  
  [ 聲明 ]
  }
  
  subnet 語句用於提供足夠的資訊來闡明一個IP地址是否屬於該子網。也可以提供指定的子網參數和指明那些屬於該子網的IP地址可以動態分配給客戶,這些IP地址必須在 range 聲明裡指定。subnet-number 可以是個IP地址或能被解析到這個子網的子網號的網域名稱。netmask 可以是個IP地址或能被解析到這個子網的掩碼的網域名稱。

  
  range 語句:
  
  range [ dynamic-bootp ] low-address [ high-address];
  
  對於任何一個有動態分配IP地址的subnet語句裡,至少要有一個 range 語句,用來指明要分配的IP地址的範圍。如果只指定一個要分配的IP地址,高地址部分可以省略。
  
  host 語句:
  
  host hostname {
  [ 參數 ]
  
  [ 聲明 ]
  }
  
  host語句的作用是為特定的客戶機提供網路資訊。
  
  group 語句
  
  group {
  [ 參數 ]
  
  [ 聲明 ]
  }
  
  組語句給一組聲明提供參數。
  
  allow 和 deny 語句
  
  allow和deny語句用來控制DHCPd對客戶的請求。
  
  unknown-clients 關鍵字
  
  allow unknown-clients;
  deny unknown-clients;
  
  allow unknown-clients 允許DHCPd可以動態分配IP給未知的客戶,而 deny unknown-clients 則不允許。
  
  預設是允許的。
  
  bootp 關鍵字
  
  allow bootp;
  deny bootp;
  
  指明DHCPd是否響應bootp查詢,預設是允許的。
  
  參數類語句
  
  default-lease-time 語句
  
  文法
  
  default-lease-time time;
  
  
  指定預設租約時間,這裡的time是以秒為單位的。如果DHCP客戶在請求一個租約但沒有指定租約的失效時間,租約時間就是預設租約時間。
  
  max-lease-time 語句
  
  文法
  
  max-lease-time time;
  
  最大的租約時間。如果DHCP在請求租約時間時有發出特定的租約失效時間的請求,則用最大租約時間。
  
  hardware 語句
  
  文法
  
  hardware hardware-type hardware-address;
  
  指明物理硬體介面類型和硬體地址。硬體地址由6個8位組構成,每個8位組以“:”隔開。如00:00:E8:1B:54:97
  
  例如:hard
  
  server-name 語句
  
  server-name "name";
  
  用於告訴客戶服務器的名字。
  
  fixed-address 語句
  
  fixed-address address [, address ... ];
  
  fixed-address 語句用於指定一個或多個IP地址給一個DHCP客戶。只能出現在host聲明裡。
  
  選項類語句
  
  選項類語句以option 開頭,後面跟一個選項名,選項名後是選項資料,選項非常的多,這裡列出一些常用的 選項供參考
  
  option routers ip-address[, ip-address];
  
  指明在客戶子網內的路由器的地址,可以有多個;
  
  option time-servers ip-address[, ip-address...];
  
  指明時間伺服器的地址。
  
  option domain-name-servers ip-address[, ip-address...];
  
  指明DNS的地址
  
  option host-anme string;
  
  給客戶指定主機名稱,string是個字串。
  
  option domain-name string;
  
  指明網域名稱
  
  option interface-mtu mtu;
  
  指明網路介面的MTU,這裡mtu是個正整數
  
  例 option interface-mtu 1500;
  
  option broadcast-address ip-address;
  
  指定廣播位址
  
六、總結
  
  以上就是DHCPd常用配置,實際應用DHCP還要考慮IP分配的一些策略問題,同時要保證網路的健壯性,必須至少要有兩台DHCP伺服器一起工作,如果一台出了故障,另一台可以繼續為

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.