To get Server Core’s network stack set up, you can use the Netsh utility, which has gone through some recent changes. Here’s how to use the latest incarnation.
If you’re like me, you’re excited about the prospect of Server Core, Windows Server 2008’s GUI-less alternative. In this space, I’ve tackled a few aspects of Server Core configuration. Now, it’s time to get Server Core’s network stack set up. To do that, I’ll use Netsh, a tool that I’ve described in the past but that’s changed enough to warrant a new look.
IP and DNS
Netsh can accomplish many tasks, and one of those is to set a system’s IP address and DNS servers. Like the IPv4 Properties GUI that you’ll find in the full Server 2008 installation, Netsh lets you choose to either assign a static IP address or get IP information from a DHCP server. Using DHCP makes for a simpler command, so let’s start with that:
netsh int ip set address “<adapter name>” dhcp \[store=active|persistent\]store= parameter is new to Server 2008 and Windows Vista— store=active makes this change to the TCP/IP stack but undoes it at the next reboot, and the default store=persistent makes the change permanent. For example, to configure a Server Core system to get an IP address for an Ethernet adapter from a DHCP server, you’d type
netsh int ip set address “local area connection” dhcpDHCP is the default setting, so it’s more likely that you’ll want to set a static IP address. To do so, assemble a Netsh command as follows:
netsh int ip set address “<adapter name>” static <IP address> <netmask> \[<gateway IP address> \[<metric>\]\] \[store=active|persistent\]
Notice that the gateway is now optional. Some older versions of Netsh complained if you left the default gateway’s IP address off a Netsh command. For example, to assign a static IP address of 192.168.2.2 on a /24 network with a default gateway address of 192.168.2.1, you’d type
netsh int ip set address “local area connection” static 192.168.2.2 255.255.255.0 192.168.2.1Here, I specified a default gateway but not a gateway metric; again, earlier versions of Netsh wouldn’t have allowed that. Also, I specified the network interface’s entire name—“local area connection.” Previously, I’ve advised people to shorten “local area connection” to “local” to save typing time and to avoid the need for quotation marks, but I fear that the days of abbreviating network interface names are gone forever. Server 2008’s insistence on IPv6 means that every NIC has at least one tunnel adapter with a name such as “local area connection 8.” Therefore, you must specify the full adapter name of “local area connection”; otherwise, Netsh might get confused and assign that IP address to your tunnel adapter rather than the NIC for which you intended it.
First, Second, Third…
Finally, you’ll want to specify one or more DNS servers’ IP addresses that your Server Core system can use for resolving names. Netsh can do that, but the syntax is a bit unexpected: You use netsh int ip set dns to set the preferred DNS server and netsh int ip add dns to specify your additional choices. The syntax for setting the first DNS server is easier than for setting the IP address:
netsh int ip set dns “<adapter name>” static <IP address> | dhcpFor example, to give your Server Core system a preferred DNS server with an IP address of 10.50.50.4, you’d type
netsh int ip set dns “local area connection” static 10.50.50.4
To add subsequent DNS servers to search, you’d use the syntax
netsh int ip add dns “<adapter name>” <IP address>No static keyword is necessary in this command; you can’t tell your system to accept a statically assigned, preferred DNS address but then get the subsequent DNS server IP addresses from DHCP. So, for example, to tell your Server Core system to look to the DNS server at 10.50.50.1 when the DNS server at 10.50.50.4 doesn’t respond, you would type
netsh int ip add dns “local area connection” 10.50.50.1Assemble a Batch File
By now, you’re pretty far along in the process of setting up your Server Core system. I recommend assembling a batch file that contains all your setup commands—it would be a great tool either for rebuilding after a disaster or building a test network that parallels your real network!