创建DHCP作用域

使用微软管理控制台(MMC)的DHCP管理单元来创建一个DHCP服务器,授权它,接着再创建一个DHCP作用域是一个相当普通的小任务。
不幸的是,如果你必须定期地创建并管理一打甚至数以百计的子网时,通过图形界面来创建带有全部所需选项(比如排除-exclusion和保留-reservation)的DHCP作用域,这可就远非易事了。如果不愿意使用MMC来创建你新的DHCP作用域,你也许会很高兴听到原来还可以在一个命令提示符里来完成这个任务。Windows Server 2003包括一个叫做Netsh的程序,你可以用它来在命令提示符中控制DHCP服务器参数。当然,这意味着你可以编写DHCP作用域设置的脚本,甚至把它合并为一个自动工作流程的一部分。

Netsh
根据微软的文档所介绍的:“Netsh是一个可以让你本地或远程地显示或修改一台正在运行的计算机的网络配置的命令行脚本程序。”你可以把Netsh仅仅作为另一个类似于xcopy.exe或net.exe的命令行程序,但是它实际上更像是一个类似于Telnet或FTP的命令行程序。事实上,如果你打开一个命令提示符,并且键入:
netsh 
你得到一个可以输入交互式命令的Netsh提示符。
你可以使用Netsh来查看并更改网络配置,包括DHCP、RAS、路由,以及WINS配置。Windows XP和Windows Server 2003系统中都包含Netsh,但是不同的操作系统版本中的两个命令之间稍有不同。例如:你不能使用Windows XP版本的Netsh来访问DHCP服务器的配置信息。

有关此命令的更多信息请查看“Netsh overview”(http://technet2.microsoft.com/WindowsServer/en/Library/61427fbd-de1f-4c8a-b613-321f7a3cca6a1033.mspx)。

CreateDHCPScope脚本
列表1所示的CreateDHCPScope.cmd的Windows命令行脚本,使用Netsh来完成它大部分的工作。该脚本执行下列动作:
• 在一台指定的服务器上创建一个DHCP作用域。
• 设置IP范围和默认网关。
• 激活该作用域。
我还会告诉你如何修改脚本来创建排除和保留。

@Echo Off
If #%8#==## Goto :syntax
Set server=%1
Set netid=%2
Set subnetmask=%3
Set name=%4
Set comment=%5
Set gateway=%6
Set iprangestart=%7
Set iprangeend=%8

Echo Creating DHCP Scope...
Netsh dhcp server %server% add scope %netid% %subnetmask% %name% > NUL
Netsh dhcp server %server% scope %netid% set name %name% > NUL
Netsh dhcp server %server% scope %netid% set comment %comment% > NUL

Echo Configuring IP range and default gateway...
Netsh dhcp server %server% scope %netid% add iprange %iprangestart%
 %iprangeend% BOTH > NUL
Netsh dhcp server %server% scope %netid% set optionvalue 003 IPADDRESS
 %gateway% > NUL

Echo Activate scope...
Netsh dhcp server %server% scope %netid% set state 1 > NUL

Echo Done!
Goto :EOF

:syntax
Echo.
Echo Syntax: CreateDHCPScope.cmd ^<server^> ^<net_address^>
 ^<subnet_mask^> ^<scope_name^> ^<description^> ^<default_gateway^>
 ^<ip_range_start^> ^<ip_range_end^>
Echo.
Echo Example: CreateDHCPScope.cmd \\MyDHCPServer 192.168.100.0 255.255.255.0
 "Test Scope" "Test Scope Description" 192.168.100.1 192.168.100.2 192.168.100.254
Echo.
Goto :EOF

列表1:CreateDHCPScope.cmd代码

CreateDHCPScope脚本使用8个参数,这几个参数是为了使一个DHCP作用域生效的最少设置。在从命令行中检索出这些参数,并给它们分配一些更有用的变量名以后,脚本的第一个次任务是创建作用域。在callout A里的代码里,你可以看到脚本如何创建一个作用域,并给它取名及做注释(这与DHCP管理单元里的描述相同)。
在脚本创建完作用域之后,它使用如callout B里的代码来设置IP范围和默认网关。你会注意到有一个明显的命令来设置IP范围,但是默认网关是通过选项003来设置的。你可以使用这个方法来设置其它的选项。表1显示了一些常用的DHCP选项及其描述。

表1:常用的DHCP选项

该脚本的最后一步是激活该作用域(如callout C代码所示)。默认情况下,使用Netsh来创建作用域会使其处于休眠状态,你需要把状态值设置为1来激活它。如果你是在一个生产环境的网络里测试这个脚本,我建议在确认作用域的所有设置都正确之前,你要么注释此部分,要么明确地把状态值设为0来使作用域处于休眠状态。
许多DHCP作用域包含CreateDHCPScope脚本不显示的两个额外设置。它们就是DHCP排除和DHCP保留。DHCP排除允许你指定在一个DHCP作用域所包含的范围里服务器不会分配的IP地址范围。排除IP地址是为了路由器以及那些需要静态IP地址的服务器和打印机节点而准备的。
另一个不需要访问每个节点就可以分配静态IP地址的方法是执行DHCP保留。保留为一个设备(用设备的MAC地址表示)保留一个IP地址,这样每当节点想要从DHCP服务器获得一个IP地址时,它始终会收到相同的IP地址。除了为节点(比如打印机)分配静态IP地址而无须手动改变节点的设置之外,由于把静态IP地址记录集中地存储在你的服务器上,保留还使将来保管静态IP地址的记录变得十分容易。保留还对改变该子网、子网设置、DNS服务器以及路由器十分有用,这样就无须再对个别装置进行访问。
排除一个IP范围的命令类似于设置一个特殊的DHCP作用域IP范围。例如命令:
Netsh dhcp server 
  
\\mydhcpserver 
  scope 192.168.100.0 
  add excluderange 192.168.100.1 
  192.168.100.10 
将会排除所有通过名为mydhcpserver的DHCP服务器分配的从192.168.100.1到192.168.100.10的IP地址。注意:因为你只是在那个作用域的IP范围里排除一个IP地址的子集,所以排除范围必须属于你原来设置的IP地址所包含的范围。
创建一个DHCP保留的范例命令如下:
Netsh dhcp server
  
\\mydhcpserver 
  scope 192.168.100.0 
  add reservedip 192.168.100.2 
  00433FBB0023 
  printerA "test printer" BOTH 
这个范例命令会为MAC地址为00433FBB 0023的节点保留192.168.100.2的IP地址。它给保留命名为printerA,并注释为test printer。BOTH是客户端类型,显示保留应该为DHCP和BOOTP客户端的需要工作。

应用该脚本 
由于CreateDHCPScope脚本需要依靠Netsh dhcp命令,所以它必须从Windows Server 2003的服务器中执行。注意:脚本使用无错误校验来检查作用域是否成功创建,因此我特别建议你在DHCP管理单元里确认在运行脚本时指定的作用域是否创建成功。一般情况下,如果创建一个作用域的脚本不成功的话,是因为代码编写者为该作用域网络ID提供了一个不正确的子网掩码。
正如你所看到的,只需寥寥数行的代码就可以使DHCP环境的管理工作变得更加容易。你可以使用这个代码,并根据你自己的目的将其扩展。例如:对于每个创建的作用域,一个脚本可以创建某些“哑元(dummy)”保留来适应将来可能需要的任何保留,比如有一台新的打印机被增加到子网中了。你还可以通过使用Netsh dhcp的export和import子命令来备份并移植DHCP作用域。

分享到