netsh Komutu ile Windows Ağ Yapılandırması

Yıllarca Linux tarafında ip ve nmcli ile uğraştıktan sonra Windows tarafına geçtiğimde, GUI üzerinden ağ yapılandırması yapmak bana hep yavaş ve verimsiz geldi. Sonra netsh ile tanıştım. O günden bu yana Windows sunucularımda ağ ayarlarını neredeyse tamamen komut satırından yönetiyorum. Bu yazıda, netsh komutunun gerçekten işe yarar kısımlarını, üretim ortamlarında kullandığım örneklerle aktaracağım.

netsh Nedir ve Neden Önemlidir?

netsh (Network Shell), Windows’un yerleşik ağ yapılandırma aracıdır. 2000’li yılların başından beri Windows’ta bulunuyor, ama birçok sistem yöneticisi hâlâ GUI’ye muhtaç kalıyor. Oysa netsh ile IP adresi atamaktan firewall kuralları oluşturmaya, proxy ayarlarından kablosuz ağ profillerine kadar onlarca işlemi script içinden halledebilirsiniz.

Windows Server Core kurulumlarında veya uzaktan yönetim senaryolarında netsh adeta hayat kurtarıcı oluyor. Bir datacenter’da fiziksel erişiminiz yokken, RDP bağlantısı kesilmişken veya sadece PowerShell remoting üzerinden bağlıyken, ağ yapılandırmasını hızla değiştirmeniz gerekebilir. İşte tam o an netsh devreye giriyor.

Temel Söz Dizimi ve Çalışma Mantığı

netsh hiyerarşik bir yapıya sahip. Önce bir context (bağlam) seçiyorsunuz, ardından o bağlam içindeki komutları çalıştırıyorsunuz. Bunu kafanızda otururken şöyle düşünebilirsiniz: netsh bir kabuk, içindeki interface, firewall, wlan gibi modüller ise ayrı birer alt kabuk.

# Genel söz dizimi
netsh [context] [subcontext] [command] [parameters]

# Örnek: interface ip bağlamında yardım almak
netsh interface ip help

# netsh'i interaktif modda başlatmak
netsh
# Artık netsh> prompt'u görürsünüz, direkt komutları yazabilirsiniz

Interaktif mod özellikle öğrenme aşamasında çok işe yarıyor. netsh> prompt’una geçtikten sonra interface yazıp enter’a basarsanız, netsh interface> bağlamına geçersiniz. Buradan ip yazarak netsh interface ip> seviyesine inebilirsiniz. Her seviyede ? veya help yazarak mevcut komutları görebilirsiniz.

IP Adresi Yapılandırması

En sık kullanılan senaryo bu. DHCP’den statik IP’ye geçiş ya da tam tersi. Önce hangi interface’lerin olduğunu görelim:

# Tüm network interface'lerini listele
netsh interface show interface

# Daha detaylı bilgi için
netsh interface ipv4 show interfaces

Çıktıda “Ethernet0”, “Local Area Connection 2” gibi isimler göreceksiniz. Bu isimler önemli, çünkü sonraki komutlarda kullanacaksınız.

# Statik IP adresi atama
netsh interface ipv4 set address name="Ethernet0" static 192.168.1.100 255.255.255.0 192.168.1.1

# DHCP'ye geri dönmek
netsh interface ipv4 set address name="Ethernet0" dhcp

# DNS sunucu adresi ekleme (birincil)
netsh interface ipv4 set dns name="Ethernet0" static 8.8.8.8

# İkincil DNS ekleme
netsh interface ipv4 add dns name="Ethernet0" 8.8.4.4 index=2

Burada dikkat edilmesi gereken bir nokta: set dns komutu mevcut DNS ayarını sıfırlayıp yenisini yazıyor. Eğer birden fazla DNS sunucusu ekleyecekseniz, ilki için set, sonrakiler için add kullanmalısınız. Bunu bir keresinde production ortamında karıştırıp ikincil DNS’i silerek fark ettim, ondan sonra aklımda kaldı.

# Mevcut IP yapılandırmasını görüntüle
netsh interface ipv4 show config name="Ethernet0"

# Tüm interface'lerin IP yapılandırmasını göster
netsh interface ipv4 show addresses

IPv6 Yönetimi

IPv6 artık görmezden gelemeyeceğimiz bir gerçek. Özellikle dual-stack ortamlarda IPv6 yapılandırmasını da bilmeniz gerekiyor.

# IPv6 adresi atama
netsh interface ipv6 add address interface="Ethernet0" address=2001:db8::1/64

# IPv6 default gateway ekleme
netsh interface ipv6 add route ::/0 interface="Ethernet0" nexthop=2001:db8::1

# IPv6'yı interface üzerinde devre dışı bırakma
netsh interface ipv6 set interface "Ethernet0" routerdiscovery=disabled

# Mevcut IPv6 adreslerini görüntüle
netsh interface ipv6 show addresses

Windows Firewall Yönetimi

netsh advfirewall modern Windows Firewall yönetimi için kullanılıyor. Eski netsh firewall komutları deprecated durumda, o yüzden yeni komutları öğrenmek daha mantıklı.

# Firewall durumunu kontrol et
netsh advfirewall show allprofiles

# Belirli bir profili kapat (dikkatli kullanın!)
netsh advfirewall set privateprofile state off

# Tüm profilleri aç
netsh advfirewall set allprofiles state on

# Inbound port kuralı ekle (örnek: 8080 TCP)
netsh advfirewall firewall add rule name="WebApp Port 8080" protocol=TCP dir=in localport=8080 action=allow

# Belirli bir IP'den gelen trafiğe izin ver
netsh advfirewall firewall add rule name="Allow Management IP" protocol=TCP dir=in localip=any remoteip=10.0.0.50 action=allow

# Kural silme
netsh advfirewall firewall delete rule name="WebApp Port 8080"

# Mevcut kuralları listeleme
netsh advfirewall firewall show rule name=all

Büyük bir kurumda çalışırken yüzlerce firewall kuralı birikmiş sunucularla karşılaşıyorsunuz. Bu kuralları show rule name=all ile listeleyip bir dosyaya yönlendirerek analiz etmek çok işe yarıyor:

# Tüm kuralları dosyaya yaz
netsh advfirewall firewall show rule name=all > C:firewall_rules_backup.txt

# Tüm firewall yapılandırmasını export et
netsh advfirewall export "C:firewall_backup.wfw"

# Import etmek için
netsh advfirewall import "C:firewall_backup.wfw"

Export/import özelliği, aynı firewall kurallarını birden fazla sunucuya uygulamanız gerektiğinde hayat kurtarıcı.

Routing Tablosu Yönetimi

Çok NIC’li sunucularda veya router görevi gören Windows sistemlerde routing yönetimi kritik önem taşıyor.

# Mevcut routing tablosunu görüntüle
netsh interface ipv4 show route

# Statik route ekle
netsh interface ipv4 add route 10.20.0.0/16 "Ethernet0" 192.168.1.254

# Route silme
netsh interface ipv4 delete route 10.20.0.0/16 "Ethernet0"

# Persistent (kalıcı) route ekle
netsh interface ipv4 add route 172.16.0.0/12 "Ethernet0" 192.168.1.1 store=persistent

store=persistent parametresi önemli. Bunu belirtmezseniz eklediğiniz route, sistem yeniden başladığında kaybolur. Öğrendiğimde bunu atlayıp neden sunucu reboot sonrası bağlantı kesildi diye saatlerce uğraşmıştım.

Proxy Ayarları

Kurumsal ortamlarda proxy kullanımı yaygın. netsh winhttp komutu, özellikle Windows servislerinin ve sistem seviyesi HTTP isteklerinin proxy üzerinden geçmesi için kullanılıyor.

# Mevcut proxy ayarlarını göster
netsh winhttp show proxy

# Proxy ayarla
netsh winhttp set proxy proxy-server="http://proxy.sirket.com:8080" bypass-list="*.sirket.com;localhost;127.*"

# Internet Explorer proxy ayarlarını import et
netsh winhttp import proxy source=ie

# Proxy ayarlarını sıfırla
netsh winhttp reset proxy

winhttp ile wininet arasındaki farkı anlamak önemli. winhttp sistem servisleri ve arka plan uygulamaları için kullanılırken, wininet Internet Explorer ve onu kullanan uygulamalar için geçerli. Windows Update, WSUS istemcisi gibi servisler winhttp ayarlarını kullanıyor.

Kablosuz Ağ (WLAN) Yönetimi

Server ortamında pek kullanmasanız da laptop’unuzdaki Windows’ta veya bazı edge senaryolarda WLAN yönetimi gerekebilir.

# Kablosuz ağ adapterini göster
netsh wlan show interfaces

# Mevcut profilleri listele
netsh wlan show profiles

# Belirli bir profile ait detayları göster (şifre dahil)
netsh wlan show profile name="OfficeWiFi" key=clear

# Bir ağa bağlan
netsh wlan connect name="OfficeWiFi"

# Bağlantıyı kes
netsh wlan disconnect

# Profili sil
netsh wlan delete profile name="EskiWiFi"

# Profili export et
netsh wlan export profile name="OfficeWiFi" folder=C:WlanProfiles

# Profili import et
netsh wlan add profile filename="C:WlanProfilesOfficeWiFi.xml"

Port Yönlendirme (Port Forwarding)

netsh interface portproxy ile Windows üzerinde NAT benzeri port yönlendirme yapabilirsiniz. Özellikle test ortamlarında veya geçici çözüm olarak inanılmaz kullanışlı.

# Port yönlendirme ekle (IPv4'ten IPv4'e)
netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=80 connectaddress=192.168.1.200

# Mevcut port yönlendirme kurallarını listele
netsh interface portproxy show all

# Port yönlendirmeyi sil
netsh interface portproxy delete v4tov4 listenport=8080 listenaddress=0.0.0.0

# Tüm portproxy kurallarını temizle
netsh interface portproxy reset

Bir senaryoyu paylaşayım: Geliştirme ortamında, bir uygulama sunucusu sadece localhost:3000’de dinlerken, dışarıdan erişim gerekiyordu. Sunucuya RDP erişimim vardı ama uygulamayı değiştiremiyorduk. portproxy ile dış IP:8080 trafiğini localhost:3000’e yönlendirerek sorunu çözdük. Beş dakikada halloldu.

Yapılandırmayı Script ile Otomatikleştirme

Tüm bu komutları bir araya getirip deployment script’lerine gömmek, gerçek değeri ortaya çıkarıyor. İşte bir sunucu kurulumunda kullandığım temel ağ yapılandırma script’inin iskeletinden bir örnek:

@echo off
REM Sunucu ağ yapılandırma scripti
REM Dikkat: Admin yetkisiyle çalıştırın

SET IFACE=Ethernet0
SET IP=192.168.10.50
SET MASK=255.255.255.0
SET GW=192.168.10.1
SET DNS1=192.168.10.10
SET DNS2=192.168.10.11

echo Statik IP ayarlaniyor...
netsh interface ipv4 set address name="%IFACE%" static %IP% %MASK% %GW%

echo DNS sunucular ayarlaniyor...
netsh interface ipv4 set dns name="%IFACE%" static %DNS1%
netsh interface ipv4 add dns name="%IFACE%" %DNS2% index=2

echo Firewall kurallari ekleniyor...
netsh advfirewall firewall add rule name="Allow RDP" protocol=TCP dir=in localport=3389 action=allow
netsh advfirewall firewall add rule name="Allow HTTPS" protocol=TCP dir=in localport=443 action=allow

echo Yapılandırma tamamlandi.
netsh interface ipv4 show config name="%IFACE%"

Bu tarz script’leri Windows Server kurulum otomasyonunun bir parçası olarak kullanıyorum. Özellikle Sysprep sonrası ilk boot script’lerine entegre etmek, her seferinde elle yapılandırma zahmetinden kurtarıyor.

Sorun Giderme Komutları

netsh sadece yapılandırma için değil, sorun giderme için de kullanılıyor.

# Network interface istatistiklerini göster
netsh interface ipv4 show ipstats

# TCP bağlantı istatistikleri
netsh interface ipv4 show tcpstats

# ARP tablosunu göster
netsh interface ipv4 show neighbors

# DNS önbelleğini temizle
netsh interface ipv4 set dns name="Ethernet0" static 8.8.8.8
ipconfig /flushdns

# Winsock sıfırlama (ağ bağlantısı sorunlarında)
netsh winsock reset

# TCP/IP yığınını sıfırla
netsh int ip reset

# Netsh trace ile ağ trafiği yakalama
netsh trace start capture=yes tracefile=C:network_trace.etl

# Trace'i durdur
netsh trace stop

netsh winsock reset ve netsh int ip reset komutları, açıklanamayan ağ sorunlarında ilk başvuru noktam. Özellikle güvenlik yazılımları veya hatalı sürücüler bazen TCP/IP yığınını bozabiliyor. Bu iki komut ve ardından gelen reboot, birçok garip sorunu çözüyor.

netsh trace ise az bilinen ama çok güçlü bir özellik. Ağ paketlerini yakalayıp .etl formatında kaydediyor. Microsoft Message Analyzer veya Wireshark ile açarak analiz edebilirsiniz. Ortamınızda Wireshark kuramadığınız durumlarda çok işe yarıyor.

Dikkat Edilmesi Gereken Noktalar

netsh kullanırken birkaç önemli nokta var:

  • Yönetici yetkisi gerekli: Çoğu netsh komutu Administrator yetkisi istiyor. Script’lerinizi “Run as Administrator” ile çalıştırdığınızdan emin olun.
  • Interface isimlerindeki boşluklar: Interface adında boşluk varsa (örn. “Local Area Connection”) tırnak işareti zorunlu. Aksi hâlde komut hata verir.
  • Değişikliklerin anlık uygulanması: IP adresi değiştirirken mevcut RDP bağlantınız kopabilir. Uzaktan yönetim yapıyorsanız, önce yedek bir erişim yolu hazırlayın.
  • Store parametresi: Route ve bazı diğer ayarlarda store=active (geçici) ya da store=persistent (kalıcı) belirtmek gerekiyor. Default değer her komut için farklı olabilir.
  • PowerShell alternatifi: Windows Server 2012 ve sonrasında NetAdapter, NetTCPIP gibi PowerShell modülleri netsh‘in birçok işlevini karşılıyor. Ancak netsh bazı özel senaryolarda (özellikle portproxy ve winhttp) hâlâ daha uygun.

Sonuç

netsh, yılların getirdiği deneyimle olgunlaşmış, kapsamlı bir ağ yönetim aracı. GUI’nin olmadığı veya yetersiz kaldığı durumlarda, script otomasyonunda ve hızlı müdahale senaryolarında vazgeçilmez oluyor. Özellikle Server Core kurulumlarında ve toplu yapılandırma görevlerinde netsh olmadan işleri yürütmek çok daha zor olurdu.

PowerShell’in NetAdapter cmdlet’leri daha modern ve okunabilir olsa da, netsh her Windows sistemde garantili olarak bulunuyor ve bazı işlevler için hâlâ en doğrudan yol. İkisini birbirinin rakibi değil, tamamlayıcısı olarak görmek daha doğru bir yaklaşım.

Bu yazıda ele aldığım komutları kendi ortamınızda test ortağında deneyin, sık kullandıklarınızı snippet olarak saklayın. Zamanla hangi senaryoda hangi komutu kullanacağınız içgüdüsel hâle geliyor. O noktaya geldiğinizde, Windows ağ sorunlarına bakış açınızın da değiştiğini göreceksiniz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir