이 글에서는 PowerShell을 사용해 Windows에서 네트워크 어댑터 파라미터를 구성하는 방법을 소개합니다. 고정(Static) IP 주소와 DNS 서버를 조회·설정하는 방법, 그리고 네트워크 인터페이스가 DHCP 서버로부터 IP 구성을 자동으로 받도록 설정하는 방법까지 단계별로 알아보겠습니다. 이러한 cmdlet은 Windows Server의 Core/Nano 버전이나 Hyper-V Server에서 네트워크를 구성할 때, 원격 컴퓨터나 서버의 IP 설정을 변경할 때, 그리고 직접 작성하는 PowerShell 스크립트 안에서도 유용하게 활용할 수 있습니다.
PowerShell NetTCPIP 모듈이란?
예전에는 CLI 환경에서 netsh interface ipv4 명령어를 사용해 Windows 네트워크 설정을 구성했습니다. 하지만 PowerShell 3.0 이상 버전에서는 내장 모듈인 NetTCPIP 모듈을 사용해 Windows 네트워크 설정을 관리할 수 있습니다.
이 모듈에 포함된 cmdlet 목록을 확인하려면 다음 명령어를 실행하세요.
get-command -module NetTCPIP
참고로 이 모듈에는 Test-NetConnection cmdlet도 포함되어 있어, 원격 컴퓨터의 TCP 포트 개방 여부를 테스트하는 데에도 사용할 수 있습니다.
PowerShell로 네트워크 어댑터 관리하기
컴퓨터에서 사용 가능한 네트워크 인터페이스 목록을 표시하려면 아래 명령어를 실행합니다.
Get-NetAdapter
이 cmdlet은 인터페이스 이름, 상태(Up/Down), MAC 주소, 포트 속도 정보를 반환합니다.
다음 예제처럼 컴퓨터에 여러 개의 네트워크 어댑터가 있을 수 있습니다. 물리적 연결인 Ethernet0 외에도 Hyper-V나 VMware Player의 가상 네트워크 인터페이스들이 함께 표시됩니다.
네트워크 인터페이스는 이름 또는 인덱스(Index 열)로 지정할 수 있습니다. 예를 들어 물리 LAN 어댑터인 Intel 82574L을 선택하려면 다음 명령어를 사용합니다.
Get-NetAdapter -Name "Ethernet0"
또는 다음과 같이 인덱스로 지정할 수도 있습니다.
Get-NetAdapter -InterfaceIndex 8
어댑터 이름은 다음과 같이 변경할 수 있습니다.
Rename-NetAdapter -Name Ethernet0 -NewName LAN
네트워크 인터페이스를 비활성화하려면 아래 명령어를 사용합니다.
Get-NetAdapter -InterfaceIndex 13| Disable-NetAdapter
반대로 인터페이스를 활성화할 때는 아직 인덱스가 할당되지 않았으므로 인덱스를 사용할 수 없습니다. 이 경우 어댑터 이름이나 설명(Description)을 지정해야 합니다.
Enable-NetAdapter -InterfaceDescription “Hyper-V Virtual Ethernet Adapter"
어댑터에 VLAN이 지정되어 있다면 다음과 같이 확인할 수 있습니다.
Get-NetAdapter | ft Name, Status, Linkspeed, VlanID
네트워크 어댑터 드라이버 정보를 조회하는 방법은 다음과 같습니다.
Get-NetAdapter | ft Name, DriverName, DriverVersion, DriverInformation, DriverFileName
물리적 네트워크 어댑터의 세부 정보(PCI 슬롯, 버스 정보 등)는 아래 명령어로 확인합니다.
Get-NetAdapterHardwareInfo
PowerShell로 TCP/IP 네트워크 어댑터 설정 확인하는 방법
현재 네트워크 어댑터 설정(IP 주소, DNS, 기본 게이트웨이)을 조회하려면 다음 명령어를 실행합니다.
Get-NetIPConfiguration -InterfaceAlias Ethernet0
현재 네트워크 어댑터의 TCP/IP 구성에 대한 상세 정보를 보려면 아래 명령어를 사용하세요.
Get-NetIPConfiguration -InterfaceAlias Ethernet0 -Detailed
이렇게 하면 인터페이스에 할당된 네트워크 프로필(NetProfile.NetworkCategory), MTU 설정(NetIPv4Interface.NlMTU), DHCP를 통한 IP 자동 할당 여부(NetIPv4Interface.DHCP) 등 유용한 추가 정보가 함께 표시됩니다.
인터페이스의 IPv4 주소만 확인하려면 다음 명령어를 사용합니다.
(Get-NetAdapter -Name ethernet0 | Get-NetIPAddress).IPv4Address
PowerShell로 고정 IP 주소 설정하기
이번에는 NIC에 고정 IP 주소를 설정해 보겠습니다. 네트워크 인터페이스의 IP 주소, 서브넷 마스크, 기본 게이트웨이를 변경하려면 다음 명령어를 사용합니다.
New-NetIPAddress –IPAddress 192.168.2.50 -DefaultGateway 192.168.2.1 -PrefixLength 24 -InterfaceIndex 8
배열(해시 테이블) 구조를 사용해 좀 더 보기 좋게 IP 주소를 설정할 수도 있습니다.
$ipParams = @{
InterfaceIndex = 8
IPAddress = "192.168.2.50"
PrefixLength = 24
AddressFamily = "IPv4"
}
New-NetIPAddress @ipParams
또한 New-NetIPAddress cmdlet을 사용하면 하나의 네트워크 어댑터에 두 번째 IP 주소(별칭)를 추가할 수도 있습니다.
이미 고정 IP가 구성되어 있는 상태에서 이를 변경하려면 Set-NetIPAddress cmdlet을 사용합니다.
Set-NetIPAddress -InterfaceIndex 8 -IPAddress 192.168.2.90
어댑터가 DHCP에서 IP 주소를 받지 않도록 하려면 다음 명령어를 실행합니다.
Set-NetIPInterface -InterfaceAlias Ethernet0 -Dhcp Disabled
라우팅 테이블을 조회하려면 Get-NetRoute cmdlet을 사용하고, 새 경로를 추가하려면 New-NetRoute cmdlet을 사용합니다.
New-NetRoute -DestinationPrefix "0.0.0.0/0" -NextHop "192.168.2.2" -InterfaceIndex 8
네트워크 어댑터에서 IPv6 프로토콜을 비활성화하려면 다음 명령어를 실행합니다.
Get-NetAdapterBinding -InterfaceAlias Ethernet0 | Set-NetAdapterBinding -Enabled:$false -ComponentID ms_tcpip6
Set-DnsClientServerAddress로 기본 및 보조 DNS 서버 주소 설정하기
Windows에서 기본(primary) 및 보조(secondary) DNS 서버 IP 주소를 설정하려면 Set-DNSClientServerAddress cmdlet을 사용합니다. 예를 들면 다음과 같습니다.
Set-DNSClientServerAddress –InterfaceIndex 8 –ServerAddresses 192.168.2.11,10.1.2.11
배열 구조를 사용해 DNS 서버를 지정할 수도 있습니다.
$dnsParams = @{
InterfaceIndex = 8
ServerAddresses = ("8.8.8.8","8.8.4.4")
}
Set-DnsClientServerAddress @dnsParams
DNS 설정을 변경한 후에는 아래 명령어로 DNS 리졸버 캐시를 초기화하는 것이 좋습니다.
Clear-DnsClientCache
PowerShell로 고정 IP를 DHCP로 변경하는 방법
네트워크 어댑터가 DHCP 서버로부터 동적 IP 주소를 받도록 하려면 다음 명령어를 실행합니다.
Set-NetIPInterface -InterfaceAlias Ethernet0 -Dhcp Enabled
그다음 DNS 서버 설정을 초기화합니다.
Set-DnsClientServerAddress –InterfaceIndex 8 -ResetServerAddresses
그리고 어댑터를 재시작하여 DHCP 서버로부터 IP 주소를 자동으로 받아오도록 합니다.
Restart-NetAdapter -InterfaceAlias Ethernet0
이전에 기본 게이트웨이가 구성되어 있었다면 아래 명령어로 제거합니다.
Set-NetIPInterface -InterfaceAlias Ethernet0| Remove-NetRoute -Confirm:$false
PowerShell로 원격지 컴퓨터의 IP 주소 및 DNS 설정 변경하기
PowerShell을 사용하면 여러 대의 원격 컴퓨터에서 IP 주소나 DNS 서버 설정을 한 번에 변경할 수 있습니다. 예를 들어 특정 AD 컨테이너(OU, 조직 구성 단위)에 속한 모든 서버의 DNS 설정을 변경해야 한다고 가정해 보겠습니다. 아래 스크립트는 Get-ADComputer cmdlet으로 컴퓨터 목록을 가져오고, Invoke-Command cmdlet(WinRM)을 통해 원격으로 접속해 설정을 변경합니다.
$Servers = Get-ADComputer -SearchBase ‘OU=Servers,OU=Berlin,OU=DE,DC=woshub,DC=cpm’ -Filter '(OperatingSystem -like "Windows Server*")' | Sort-Object Name
ForEach ($Server in $Servers) {
Write-Host "Server $($Server.Name)"
Invoke-Command -ComputerName $Server.Name -ScriptBlock {
$NewDnsServerSearchOrder = "192.168.2.11","8.8.8.8"
$Adapters = Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object {$_.DHCPEnabled -ne 'True' -and $_.DNSServerSearchOrder -ne $null}
Write-Host "Old DNS settings: "
$Adapters | ForEach-Object {$_.DNSServerSearchOrder}
$Adapters | ForEach-Object {$_.SetDNSServerSearchOrder($NewDnsServerSearchOrder)} | Out-Null
$Adapters = Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object {$_.DHCPEnabled -ne 'True' -and $_.DNSServerSearchOrder -ne $null}
Write-Host "New DNS settings: "
$Adapters | ForEach-Object {$_.DNSServerSearchOrder}
}
}
이처럼 PowerShell의 NetTCPIP 모듈을 활용하면 로컬은 물론 원격 서버의 네트워크 설정도 일관된 방식으로 손쉽게 관리할 수 있습니다. GUI 없이 운영되는 Server Core 환경이나 반복 작업 자동화 스크립트를 작성할 때 위 cmdlet들을 적극적으로 활용해 보시기 바랍니다.