本文將逐一說明如何將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 |
管理員日後可使用指令 "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
# 租用檔案的路徑 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; |
利用一部Windows 7電腦測試如下圖,透過linux dhcpd6 取得subnet內所定義的IP位址與租用期30天,並取得subnet6內的選項DNS與搜尋尾碼。
架設Windows Server 2008 R2為 DHCPv6伺服器
將一部Windows Server 2008 R2系統架設為DHCPv6 伺服器的步驟如下:
- 啟動『伺服器管理員』,新增『DHCP伺服器』角色
- 由於本範例只設定為DHCPv6伺服器,所以IP在精靈程式上,對v4 相關的設定頁均直接按下一步跳過即可,直到畫面出現了『設定DHCPv6無狀態模式』設定頁,在此設定頁將決定此DHCPv6伺服器將設定為無狀態DHCPv6,或是全狀態DHCPv6,若您打算將Windows Server 2008 R2設定為Stateless DHCPv6伺服器,則選取第一項『啟用這部伺服器的DHCPv6無狀態模式』,若希望做為Stateful DHCPv6伺服器,則應選取第二項『停用這部伺服器的DHCPv6無狀態模式』。
- 如果您選擇了『啟用這部伺服器的DHCPv6無狀態模式』而打算設定為無狀態DHCPv6伺服器,則接下來您需要輸入二個選項『父系網域』和『DNS伺服器IPv6位址』。
- 最後,完成安裝
- 測試,由於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)即可,做法及步驟如下:
- 啟動DHCP主控台管理工具。
- 以滑鼠右鍵按一下『IPv6』,再選取『新增領域』。
- 接下來請輸入領域名稱和描述。
- 輸入IPv6首碼,並在喜好設定上輸入255 (如果只有一部DHCPv6伺服器),以便可以加速租用過程。
- 接下來新增排除範圍。
- 輸入有效存留期和慣用存留期。
- 最後,選擇立即啟用領域後,完成領域新增精靈程式。
- 底下為建立IPv6領域後,DHCP管理主控台上所維護的IP租用狀態(Statefule),包括用戶端的IP位址,名稱與到期日。
- 最後,您也可以在Windows 7的用戶電腦下以ipconfig /all 命令查看租用的IP、租用期限和取得的選項值。
一部Windows Server 2008 R2的Statefule DHCPv6伺服器,日後若希望轉變為Stateless DHCPv6伺服器時,只需停用或刪除IPv6領域,然後再變更IPv6路由器的M位元為0,O位元為1即可。