2012年5月5日 星期六

架設DHCPv6伺服器 -以Cisco路由器、Linux ISC dhcp和Windows Server 2008 DHCP為例

本文將逐一說明如何將CISCO路由器、Linux和Windows Server 2008 R2作業系統設定為IPv6無狀態和全狀態的DHCPv6伺服器。

全狀態DHCPv6模式 vs. 無狀態DHCP模式

DHCPv6伺服服務可分為全狀態(Stateful)與無狀態(Stateless)二種模式,簡言之,無狀態DHCPv6模式,用戶端將由DHCPv6伺服器取得得IP位址以外的網路組態(譬如DNS伺服器或網域名稱),但IP位址需則由非DHCPv6機制取得或產生(例如路由器RA封包的自動組態配置首碼),另一方面,在全狀態DHCPv6模式下,用戶端不僅由DHCPv6伺服器取得128位元的IP位址,也從DHCPv6伺服器取得相關的網路組態。

下表比較出二種DHCPv6模式的差別:

特性

全狀態DHCP(Stateful)

無狀態DHCP(Stateless)

維護與存放用戶端請求的IPv6位址(狀態訊息)

Yes

No

指定用戶端IPv6位址

Yes

No

提供有用的其它資訊,如DNS伺服器

Yes

Yes

比較符合無狀態自動組態配置精神

No

Yes


架設 Cisco路由器為無狀態 DHCPv6伺服器

CISCO路由器可輕易的設定為無狀態(Stateless)DHCPv6伺服器來提供DNS伺服器和網域名稱等選項給IPv6用戶主機,下表示範了相關命令,首先利用 ipv6 dhcp pool指令設定選項,然後再利用ipv6 nd other-config-flag來啟用O旗標,用以通知用戶端它們需要使用DHCPv6來取得非IP位址的網路組態,最後使用 ipv6 dhcp server 來啟用DHCP選項功能。

R1#config t
R1(config)# ipv6 dhcp pool DHCP-Pool
R1(config-dhcpv6)#dns-server 2001:1234:5678::2
R1(config-dhcpv6)#dns-server 2001:1234:5678::3
R1(config-dhcpv6)# domain-name lij.local

R1(config)#interface FastEthernet0/0
R1(config-if)#ipv6 address 2001:1234:5678::1/64
R1(config-if)#ipv6 nd other-config-flag
R1(config-if)#ipv6 dhcp server DHCP-Pool

 


架設 Cisco路由器為全狀態 DHCPv6伺服器

CISCO路由器也可以設定為全狀態(Stateful)DHCPv6伺服器,用以維護動態配置的位址,方便日後的監控管理,您需要在DHCP Pool內定義所要配置的首碼,並設定RA的M位元和O位元為1。

R1#config t
R1(config)#ipv6 dhcp pool DHCPPOOL
R1(config-dhcpv6)#address prefix 2001:1234:5678:9abc::/64 lifetime infinite infinite
R1(config-dhcpv6)#dns-server 2001:1234:5678:9abc::1
R1(config-dhcpv6)#domain-name lij.local
R1(config-dhcpv6)#exit
R1(config)#interface FastEthernet0/0
R1(config-if)#ipv6 address 2001:1234:5678:9abc::2/64
R1(config-if)#ipv6 enable 
R1(config-if)#ipv6 nd other-config-flag
R1(config-if)#ipv6 nd managed-config-flag
R1(config-if)#ipv6 dhcp server DHCPPOOL

管理員日後可使用指令 "show ipv6 dhcp pool DHCPPOOL" 和"sh ipv6 dhcp binding"顯示目前用戶端的租用狀態


架設Linux成為無狀態DHCPv6伺服 (Stateless DHCPv6)

Linux上支援DHCPv6的著名軟體有:ISC DHCP 4.x、Dibbler、WIDE DHCPv6等,由於作者較常使用CentOS Linux,而CentOS預設的ISC DHCP 4.x就可以支援DHCPv6,所以本節將示範如何在CentOS Linux,上利用radvd、ISC DHCP 4.x建構一個無狀態的DHCPv6系統。

一. 設定IPv6路由器- radvd

Linux radvd扮演IPv6路由器的角色,如果您的網路上已存在其它IPv6路由器(例如Cisc路由器),則需要控制正確的RA封包M位元和O位元,本節的radvd路由器,則只需在組態檔 /etc/radvd.conf新增並設定下面二個設定值。

  • AdvManagedFlag on/off:此為RA封包內的 "Managed address configuration" 位元。
  • AdvOtherConfigFlag on/off:為RA封包的 "Other configuration" 位元。

請注記,由於radvd需要啟用IPv6 Forwarding功能,所以記得在/etc/sysctl.conf 檔案中,加入底下一行:

net.ipv6.conf.all.forwarding=1

下表列出了用以支援無狀態DHCPv6的radvd 組態檔/etc/radvd.conf內容如下:

interface eth0
{
     AdvSendAdvert on;        #啟用路由器公告(RA)功能
     MinRtrAdvInterval 30;     #每隔30-100秒間送出公告訊息
     MaxRtrAdvInterval 100;
     AdvHomeAgentFlag off;   # 停用行動IP的支援
     AdvManagedFlag off;       # M bit =0
    AdvOtherConfigFlag on;   # O bit =1
  prefix 2002:1234:5678:9abc::/64   #
送出的首碼
    {
          AdvOnLink on;
          AdvAutonomous on;  #公告的首碼可用來自動位置配置
          AdvRouterAddr off;  #強制radvd送出首碼而非介面位址
     };
};

#service radvd start

二. 設定ISC DHCPv6

請編輯 /etc/dhcp/dhcpd6.conf如下所示:

# see 'man 5 dhcpd.conf'
# run 'service dhcpd6 start' or 'dhcpd -6 -cf /etc/dhcp/dhcpd6.conf'
#
# DHCP for IPv6 Server Configuration file.

# 啟用 RFC 5007 支援
allow leasequery;

# 租用檔案的路徑
dhcpv6-lease-file-name "/var/lib/dhcpd/dhcpd6.leases";

# 通用設定二個IPv6選項--DNS伺服器與網域查詢字串
option dhcp6.name-servers 2002:1234:5678:9abc::123;
option dhcp6.domain-search "lij.local";

# 當網上只有一部DHCP伺服器時,請設定偏好值為255 (最大值) 以避免等待其它伺服器
option dhcp6.preference 255;

subnet6 2002:1234:5678:9abc::/64 {
}

#service dhcpd6 start


架設Linux成為全狀態DHCPv6伺服器 (Stateful DHCPv6)

若您需要由DHCPv6來配發IPv6位址並且維護這些動態配置的訊息,則您需要採用Stateful DHCPv6伺服服務的架構,首先,您需要在IPv6路由器上設定M位元和O位元均為1 ,以本文範例所使用的radvd服務而言,其組態檔/etc/radvd.conf檔案如下:

interface eth0
{
     AdvSendAdvert on;        #啟用路由器公告(RA)功能
     MinRtrAdvInterval 30;     #每隔30-100秒間送出公告訊息
     MaxRtrAdvInterval 100;
     AdvHomeAgentFlag off;   # 停用行動IP的支援
     AdvManagedFlag on;       # M bit =1
    AdvOtherConfigFlag on;   # O bit =1
 
};

# service radvd start

編輯 /etc/dhcp/dhcpd6.conf 如下所示:

# see 'man 5 dhcpd.conf'
# run 'service dhcpd6 start' or 'dhcpd -6 -cf /etc/dhcp/dhcpd6.conf'
#
# DHCP for IPv6 Server Configuration file.

# 啟用 RFC 5007 支援
allow leasequery;

#設定IPv6租用租用期 (30天),此為有效生命週期,過了此時間點,此IP將不再可用

default-lease-time 2592000;

#IPv6位址偏好租用期 (7天),目前還在連線的應用程式應讓在此時限內使用有效的IP
preferred-lifetime 604800;


#T1時間
option dhcp-renewal-time 3600;
#T2時間
option dhcp-rebinding-time 7200;


# 租用檔案的路徑
dhcpv6-lease-file-name "/var/lib/dhcpd/dhcpd6.leases";

# 設定二個通用IPv6選項--DNS伺服器與網域查詢字串
option dhcp6.name-servers 2002:1234:5678:9abc::111;
option dhcp6.domain-search "lij.com.tw";

# 當網上只有一部DHCP伺服器時,請設定偏好值為255 (最大值) 以避免等待其它伺服器
option dhcp6.preference 255;

#設定配置的IP範圍和,並設二個subnet選項
subnet6 2002:1234:5678:9abc::/64 {

        range6 2002:1234:5678::9abc:129 2002:1234:5678:9abc::254;
        option dhcp6.name-servers 2002:1234:5678:9abc::111;
        option dhcp6.domain-search "lij.com.tw";
}

利用一部Windows 7電腦測試如下圖,透過linux dhcpd6 取得subnet內所定義的IP位址與租用期30天,並取得subnet6內的選項DNS與搜尋尾碼。

dhcpd6_win7


架設Windows Server 2008 R2為 DHCPv6伺服器

將一部Windows Server 2008 R2系統架設為DHCPv6 伺服器的步驟如下:

  1. 啟動『伺服器管理員』,新增『DHCP伺服器』角色
    windhcp1
  2. 由於本範例只設定為DHCPv6伺服器,所以IP在精靈程式上,對v4 相關的設定頁均直接按下一步跳過即可,直到畫面出現了『設定DHCPv6無狀態模式』設定頁,在此設定頁將決定此DHCPv6伺服器將設定為無狀態DHCPv6,或是全狀態DHCPv6,若您打算將Windows Server 2008 R2設定為Stateless DHCPv6伺服器,則選取第一項『啟用這部伺服器的DHCPv6無狀態模式』,若希望做為Stateful DHCPv6伺服器,則應選取第二項『停用這部伺服器的DHCPv6無狀態模式』。
    wind2008dhcp2
  3. 如果您選擇了『啟用這部伺服器的DHCPv6無狀態模式』而打算設定為無狀態DHCPv6伺服器,則接下來您需要輸入二個選項『父系網域』和『DNS伺服器IPv6位址』。
    win2008dhcp3
  4. 最後,完成安裝
  5. 測試,由於Windows Server 2008 R2做為無狀態伺服器,所以用戶端的IP位址仍是由路由器取得首碼而產生(記得IPv6路由器需設定 M Flag 為o 0 且 O Flag 為 1),只有DNS伺服器和網域名稱二個選項由DHCP伺服器取得。

若您需要設定為全狀態 (Statefule) DHCPv6伺服器,則您需要先將網路的IPv6路由器需設定二個旗標位元 M Flag和 O Flag 均為 1,然後在DHCP主控台管理工具上新增一個IPv6領域(Scope)即可,做法及步驟如下:

  1. 啟動DHCP主控台管理工具。
  2. 以滑鼠右鍵按一下『IPv6』,再選取『新增領域』。
    win2008dhcp5
  3. 接下來請輸入領域名稱和描述。
  4. 輸入IPv6首碼,並在喜好設定上輸入255 (如果只有一部DHCPv6伺服器),以便可以加速租用過程。
    win2008dhcp7
  5. 接下來新增排除範圍。
    win2008dhcp8
  6. 輸入有效存留期和慣用存留期。
    win2008dhcp9
  7. 最後,選擇立即啟用領域後,完成領域新增精靈程式。
    win2008dhcp10
  8. 底下為建立IPv6領域後,DHCP管理主控台上所維護的IP租用狀態(Statefule),包括用戶端的IP位址,名稱與到期日。
    win2008dhcp12
  9. 最後,您也可以在Windows 7的用戶電腦下以ipconfig /all 命令查看租用的IP、租用期限和取得的選項值。
    win2008dhcp11

一部Windows Server 2008 R2的Statefule DHCPv6伺服器,日後若希望轉變為Stateless DHCPv6伺服器時,只需停用或刪除IPv6領域,然後再變更IPv6路由器的M位元為0,O位元為1即可。