18.10.2022

Powershel ile ağ ayarlarını değiştirme

Ağ adresi yapılandırmasını powershell ile yapmaya alışamadım. Çok komut var, hangisi ne iş yapıyor bir türlü kafamda oturtamadım. Grafik arayüze ihtiyaç duymadan IP adresini powershell ile girme yolundaki çabalarımından birini daha paylaşıyorum.

Öncelikle bilgisayarımızda hangi ağ kartları var, bir bakalım.

PS> Get-NetAdapter

Name      InterfaceDescription                       ifIndex Status MacAddress        LinkSpeed
----      --------------------                       ------- ------ ----------        ---------
Ethernet0 Intel(R) 82574L Gigabit Network Connection      10 Up     xx-xx-xx-xx-xx-xx    1 Gbps

Buradan aklımızda kalması gereken, hedef ağ arayüzümüzün endeksi 10. Bunun yerine Get-NetIPInterface'i de kullanabiliriz.

DOS komutu ipconfig'e benzeyen bir komut ise Get-NetIPConfiguration. Bu cmdlet'i -Detailed parametresi ile de kullanmak isteyebiliriz. Bu durumda şöyle bir ayrıntılı çıktı üretir:

ComputerName                          : DESKTOP-6HMFMLR
InterfaceAlias                        : Ethernet0
InterfaceIndex                        : 10
InterfaceDescription                  : Intel(R) 82574L Gigabit Network Connection
NetCompartment.CompartmentId          : 1
NetCompartment.CompartmentDescription : Default Compartment
NetAdapter.LinkLayerAddress           : XX-XX-XX-
XX-XX-XX
NetAdapter.Status                     : Up
NetProfile.Name                       : Ağ
NetProfile.NetworkCategory            : Public
NetProfile.IPv6Connectivity           : NoTraffic
NetProfile.IPv4Connectivity           : Internet
IPv6LinkLocalAddress                  : fe80::458e:8efe:1c9c:c32f%10
IPv4Address                           : 192.168.239.134
IPv6DefaultGateway                    :
IPv4DefaultGateway                    : 192.168.239.2
NetIPv6Interface.NlMTU                : 1500
NetIPv4Interface.NlMTU                : 1500
NetIPv6Interface.DHCP                 : Enabled
NetIPv4Interface.DHCP                 : Enabled
DNSServer                             : 192.168.239.2

Burada büyük bir eksik var: DHCP adresi. Bazen bu çok gerekli olabiliyor. Bunu öğrenmek için WMI/CIM sorgularına ihtiyacımız var:

PS> Get-CimInstance Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=$true" | Select DHCPServer

Get-NetIPAddress ile TCP ayarlarımızı görüntüleyebiliyoruz. Bilgisayarımızda birden fazla ağ arayüzü (kablolu, kablosuz vs) varsa ve birden fazla IP sürümü (IPv4 ve IPv6)  varsa ve hatta birden fazla IP ataması yapılmışsa liste modunda uzun bir liste çıkar karşımıza. Liste değil de tablo şeklinde yazmak, biraz da alan kısıtlaması yapmak için

PS> Get-NetIPAddress | ft ifIndex, IPAddress, InterfaceAlias, PrefixLength, PrefixOrigin

kullanabiliriz.

Bu adımdan önce bilgisayarımızdaki ağ arayüzlerinin listesini görmek için Get-NetAdapter kullanabiliriz.

Birince senaryomuzda ağ kartımızda DHCP seçili olsun. Yani IP adresimizi bir çeşit sunucudan alıyoruz. Bu durumda yukarıdaki komut şuna benzer bir çıktı üretir:

ifIndex ifAlias IPAddress                    PrefixLength PrefixOrigin
------- ------- ---------                    ------------ ------------
     10         fe80::458e:8efe:1c9c:c32f%10           64    WellKnown
      1         ::1                                   128    WellKnown
     10         192.168.239.134                        24         Dhcp
      1         127.0.0.1                               8    WellKnown

İlk satır, ethernet kartımızın IPv6 kaydı. Altındaki IPv6 için looopback adresi. Üçüncü satır ağımızdaki DHCP sistemi tarafından bize ataması yapılan C sınıfı ağ adresini kullanan ethernet kartımıza ait kayıt. En sondaki de IPv4 loopback kaydımız. Prefix length altağ maskesi (subnet mask). CIDR notasyonu; burada prefix'in 24 olması, altağ maskesinin 255.255.255.0 demek. En son sütunda görüldüğü gibi bu adresi ağımızdaki DHCP bize vermiş.

Ağ kartımızı DHCP'den vazgeçip elle IP adresi ataması yapmaya karar verirsek Set ile başlayan bir cmdlet kullanmadan önce New-NetIPAddress kullanmalıyız:

PS> New-NetIPAddress -ifIndex -10 -IPAddress 192.168.77.7 -PrefixLength 24 -DefaultGateway 192.168.77.2

Burada IP adresimiz, prefix uzunluğumuzu (altağ maskesi) ve varsayılan ağ geçicimizi (default gateway) belirttik. DNS sunucu bilgisi kaldı. Onu da Set-DNSClientServerAddress ile yapacağız.

PS> Set-DNSClientServerAddress -Server 192.168.7.2, 192.168.7.3 -InterfaceIndex 10

Eğer amacımız varolan bir DNS sunucu girişini silmek olsaydı

PS> Set-DNSClientServerAddress -InterfaceIndex 10 -ResetServerAddress

kullanabilirdik. Bu da ikinci senaryomuz; IP adresi ataması yapılmış bir ağ arayüzünün yapılandırmasını görmek için tekrar Get-NetIPAddress cmdlet'ini çalıştıralım:

Get-NetIPAddress | ft ifIndex, IPAddress, InterfaceAlias, PrefixLength, PrefixOrigin

ifIndex IPAddress                    InterfaceAlias              PrefixLength PrefixOrigin
------- ---------                    --------------              ------------ ------------
     10 fe80::458e:8efe:1c9c:c32f%10 Ethernet0                             64    WellKnown
      1 ::1                          Loopback Pseudo-Interface 1          128    WellKnown
     10 192.168.77.7                 Ethernet0                             24       Manual
      1 127.0.0.1                    Loopback Pseudo-Interface 1            8    WellKnown

Görüldüğü gibi elle atadığımız IP adresinin yanında artık "Dhcp" değil, "Manual" yazıyor.

Bu aşamadan sonra eğer varolan atamayla ilgili bir değişiklik yapacaksak Set-NetIPAddress cmdlet'ini kullanabiliriz. Örneğin PrefixLength'i değiştirmek için

PS> Set-NetIPAddress -ifIndex 10 -IPAddress 192.168.77.7 -PrefixLength 16

yapabiliriz. Ama varolan IP adresini değiştirmek mümkün değil. Bunun için varolan atamayı Remove-NetIPAddress kullanarak silmek, daha sonra yine Net-NetIPAddress kullanarak yeniden bir atama yapmak gerek. Var olan IP atamasını silmek için

PS> Remove-NetIPAddress -IPAddress 192.168.77.7

Şu şekilde de olabilirdi:

PS> Get-NetIPAddress -IPAddress 192.168.77.7 | Remove-NetIPAddress

Şu ağ arayüzümüzün üzerindeki IP adresi ataması silindi, ama varsayılan ağ geçidi bilgisi hala duruyor. Onu da silmek için:

PS> Get-NetIPAddress -ifIndex 10 | Remove-NetRoute

Bu durumdan sonra ağ kartımızın 169.254.0.0/16 aralığında bir APIPA adresi ataması olacak:

PS> Get-NetIPConfiguration

InterfaceAlias       : Ethernet0
InterfaceIndex       : 10
InterfaceDescription : Intel(R) 82574L Gigabit Network Connection
NetProfile.Name      : Tanımlanmayan ağ
IPv4Address          : 169.254.195.47
IPv6DefaultGateway   :
IPv4DefaultGateway   :
DNSServer            : 8.8.8.8
                       8.8.4.4

Get-NetIPAddress ile baktığımızda ise

Get-NetIPAddress | ft ifIndex, IPAddress, InterfaceAlias, PrefixLength, PrefixOrigin

ifIndex IPAddress                    InterfaceAlias              PrefixLength PrefixOrigin
------- ---------                    --------------              ------------ ------------
     10 fe80::458e:8efe:1c9c:c32f%10 Ethernet0                             11    WellKnown
      1 ::1                          Loopback Pseudo-Interface 1          128    WellKnown
     10 169.254.195.47               Ethernet0                             16    WellKnown
      1 127.0.0.1                    Loopback Pseudo-Interface 1            8    WellKnown

Vurgulamak istediğim, PrefixOrigin sütunundaki Wellknown alanıydı.

Son durumda bu ağ kartını tekrar DHCP'den IP adresi alacak şekilde ayarlamak kaldı. Bunu yapmanın ön koşuşu tüm IP adresi atamasını temizlemek. Ondan sonra ise

PS> Get-NetAdapter | Set-NetIPInterface -Dhcp Enabled

Bu komutu verdikten hemen sonra ağ kartımı kontrol ettiğimde DHCP'den bir IP adresi ataması almadığını gördüm. Şu sitede son aşamada bir kez daha Remove-NetRoute'ı çalıştırmak önerilmiş. Bu oldu; ama benim tercihim ağ kartını disable edip tekrar etkinleştirmek (Restart-NetAdapter ?) oldu:

PS> Get-NetAdapter | Disable-NetAdapter

PS> Get-NetAdapter | Enable-NetAdapter

Tamamen Powershell dünyasında kalma amacımıza hizmet edecek başka iki cmdlet daha DNS önbelleğini görüntüleme ve/veya silme için aşağıdakiler olabilir

PS> Get-DNSClientCache

PS> Clear-DNSClientCache


Hiç yorum yok: