Windows ortamlarında ağ yapılandırması denince aklıma hep o eski refleks gelir: sağ tık, Properties, TCP/IP ayarları… Oysa bu yöntem hem yavaş hem de özellikle sunucu ortamlarında scriptlenemez. netsh komutu, Windows’un yerleşik ağ yapılandırma aracı olarak yıllardır sistem yöneticilerinin hayatını kolaylaştırıyor. IP adresi atamaktan firewall kuralı yazmaya, wireless profil yönetiminden proxy ayarlarına kadar neredeyse her ağ işlemini komut satırından halledebilirsin. Bu yazıda netsh‘i gerçek dünya senaryolarıyla derinlemesine inceleyeceğiz.
Netsh Nedir ve Neden Kullanmalısın?
netsh (Network Shell), Windows’ta ağ bileşenlerini yapılandırmak için kullanılan komut satırı aracıdır. Windows 2000’den bu yana var olan bu araç, zamanla inanılmaz derecede güçlü bir hal aldı. Neden GUI yerine netsh kullanasın?
- Otomasyon: PowerShell scriptleri veya batch dosyalarıyla entegre çalışır
- Uzaktan yapılandırma: PsExec veya WinRM üzerinden uzak makinelere uygulanabilir
- Hız: Özellikle çok sayıda sunucuyu yapılandırırken dakikalarca süren GUI işlemi saniyeye iner
- Tekrarlanabilirlik: Aynı konfigürasyonu onlarca sunucuya tutarlı şekilde uygulayabilirsin
- Dışa aktarım: Tüm ağ yapılandırmasını bir dosyaya aktarıp başka bir makineye import edebilirsin
Hadi pratik kısma geçelim.
Temel Netsh Yapısı ve Bağlamlar
netsh bağlam (context) tabanlı çalışır. Yani önce hangi bileşeni yapılandıracağını belirtirsin, sonra komutunu yazarsın.
netsh [bağlam] [alt-bağlam] [komut] [parametreler]
Mevcut bağlamları görmek için:
netsh /?
En sık kullanılan bağlamlar şunlardır:
- interface: Ağ arayüzü ayarları (IP, DNS, DHCP)
- firewall / advfirewall: Windows Firewall kuralları
- wlan: Kablosuz ağ yönetimi
- winhttp: WinHTTP proxy ayarları
- http: HTTP dinleyici yapılandırması
- ipsec: IPSec politikaları
IP Adresi Yapılandırması
Statik IP Atama
Sunucuya statik IP atamak, netsh‘in en temel kullanım senaryolarından biridir. Önce hangi arayüzlerin mevcut olduğunu görelim:
netsh interface show interface
Bu komut sana arayüz adlarını listeler. Arayüz adı genellikle “Ethernet0”, “Local Area Connection” veya “Ethernet” gibi bir şeydir. Bu adı not al çünkü sonraki komutlarda kullanacaksın.
Statik IP atamak için:
netsh interface ipv4 set address name="Ethernet0" static 192.168.1.100 255.255.255.0 192.168.1.1
Buradaki parametreler sırasıyla:
- name: Arayüz adı
- static: Statik IP kullanılacağını belirtir
- 192.168.1.100: IP adresi
- 255.255.255.0: Subnet mask
- 192.168.1.1: Default gateway
DHCP’ye Geri Dönmek
Bazen test ortamında statik yaptığın bir arayüzü tekrar DHCP’ye almak gerekir:
netsh interface ipv4 set address name="Ethernet0" dhcp
DNS Sunucusu Atama
Statik IP atadıktan sonra DNS sunucusunu da ayarlaman gerekir:
netsh interface ipv4 set dns name="Ethernet0" static 8.8.8.8 primary
netsh interface ipv4 add dns name="Ethernet0" 8.8.4.4 index=2
İlk komut birincil DNS’i atar, ikinci komut ise alternatif DNS’i ekler. index=2 parametresi bunun ikinci DNS sunucusu olduğunu belirtir.
DNS’i de DHCP’den almasını istersen:
netsh interface ipv4 set dns name="Ethernet0" dhcp
Mevcut IP Yapılandırmasını Görüntüleme
netsh interface ipv4 show config name="Ethernet0"
Bu komut sana IP adresi, subnet, gateway, DNS ve WINS bilgilerini düzenli bir şekilde gösterir.
Gerçek Dünya Senaryosu: Toplu Sunucu IP Yapılandırması
Diyelim ki 10 adet yeni Windows Server 2022 kuruyorsun ve hepsine farklı IP adresleri ataman gerekiyor. Bunu bir batch script haline getirebilirsin:
@echo off
REM Sunucu IP yapılandırma scripti
REM Parametreler: %1=IP, %2=GW, %3=DNS1
set IFACE=Ethernet0
set MASK=255.255.255.0
echo IP adresi ataniyor: %1
netsh interface ipv4 set address name="%IFACE%" static %1 %MASK% %2
echo DNS ataniyor...
netsh interface ipv4 set dns name="%IFACE%" static %3 primary
netsh interface ipv4 add dns name="%IFACE%" 10.0.0.2 index=2
echo Yapılandırma tamamlandi.
netsh interface ipv4 show config name="%IFACE%"
Bu scripti config_ip.bat 192.168.1.100 192.168.1.1 10.0.0.1 şeklinde çağırabilirsin. PsExec ile uzak makinelerde de çalıştırabilirsin.
Windows Firewall Yönetimi
Advfirewall Bağlamı
Windows Vista sonrasında netsh firewall yerini netsh advfirewall‘a bıraktı. Eski bağlam hala çalışıyor ama deprecate edilmiş. Her zaman advfirewall kullan.
Firewall durumunu kontrol etmek için:
netsh advfirewall show allprofiles
Bu komut Domain, Private ve Public profillerin durumunu gösterir.
Firewall’ı Açma veya Kapama
REM Tüm profillerde firewall'ı aç
netsh advfirewall set allprofiles state on
REM Sadece domain profilinde kapat (dikkatli kullan!)
netsh advfirewall set domainprofile state off
Tabii ki production’da firewall’ı kapatmak istemezsin, ama troubleshooting sırasında geçici olarak bunu yapman gerekebilir.
Inbound Kural Ekleme
Yeni bir uygulama kurduğunda port açman gerekebilir. Örneğin web sunucusu için:
netsh advfirewall firewall add rule name="Web Sunucusu HTTP" protocol=TCP dir=in localport=80 action=allow
netsh advfirewall firewall add rule name="Web Sunucusu HTTPS" protocol=TCP dir=in localport=443 action=allow
Daha spesifik bir senaryo: Sadece belirli bir IP’den RDP erişimine izin vermek:
netsh advfirewall firewall add rule name="RDP Kisitli Erisim" protocol=TCP dir=in localport=3389 remoteip=10.0.0.50 action=allow
Mevcut Kuralları Listeleme ve Silme
REM Tüm inbound kuralları listele
netsh advfirewall firewall show rule name=all dir=in
REM Belirli bir kuralı göster
netsh advfirewall firewall show rule name="Web Sunucusu HTTP"
REM Kural silme
netsh advfirewall firewall delete rule name="Web Sunucusu HTTP"
Firewall Log Ayarları
Güvenlik loglarını aktifleştirmek için:
netsh advfirewall set currentprofile logging filename "C:WindowsSystem32LogFilesFirewallpfirewall.log"
netsh advfirewall set currentprofile logging maxfilesize 4096
netsh advfirewall set currentprofile logging droppedconnections enable
netsh advfirewall set currentprofile logging allowedconnections enable
Bu ayarlar özellikle bir güvenlik olayı sonrasında log analizi yapman gerektiğinde hayat kurtarır.
Gerçek Dünya Senaryosu: Uygulama Sunucusu Firewall Yapılandırması
Yeni bir SQL Server kuruyorsun ve sadece uygulama sunucularının bağlanmasına izin vereceksin:
@echo off
echo SQL Server firewall kurallari ekleniyor...
REM SQL Server varsayılan port
netsh advfirewall firewall add rule ^
name="SQL Server 1433" ^
protocol=TCP ^
dir=in ^
localport=1433 ^
remoteip=10.0.1.0/24 ^
action=allow ^
description="Uygulama sunuculari icin SQL erisimi"
REM SQL Server Browser servisi
netsh advfirewall firewall add rule ^
name="SQL Server Browser" ^
protocol=UDP ^
dir=in ^
localport=1434 ^
remoteip=10.0.1.0/24 ^
action=allow
echo Kurallar eklendi. Mevcut durum:
netsh advfirewall firewall show rule name="SQL Server 1433"
Burada sadece 10.0.1.0/24 subnet’indeki makineler SQL’e bağlanabilir. Güvenli ve pratik.
Proxy Ayarları: Winhttp ve Winsock
Kurumsal ortamlarda proxy üzerinden internete çıkılır. Bazı servisler proxy için WinHTTP’yi kullanır ve bunu da netsh ile yapılandırabilirsin.
WinHTTP Proxy Ayarlama
netsh winhttp set proxy proxy-server="proxy.sirket.com:8080" bypass-list="*.sirket.com;10.*;192.168.*"
Bypass listesine dahili adresleri eklemek önemli. Yoksa dahili sistemlere de proxy üzerinden gitmeye çalışır.
Proxy’yi Kaldırmak
netsh winhttp reset proxy
Internet Explorer/WinINET Proxy’sini WinHTTP’ye Aktarmak
Bazen kullanıcının IE proxy ayarlarını sistem seviyesine almak gerekir:
netsh winhttp import proxy source=ie
Bu komut özellikle Windows Update’in proxy arkasında çalışmaması gibi sorunlarda işe yarar.
Winsock ve TCP/IP Stack Sıfırlama
Ağ bağlantısı sorunlarında en etkili çözüm yöntemlerinden biri TCP/IP stack ve Winsock’u sıfırlamaktır. Yıllarca süren bir alışkanlık olarak her ağ sorununda şu iki komutu arka arkaya çalıştırıyorum:
netsh winsock reset
netsh int ip reset resetlog.txt
İkinci komut sıfırlama logunu resetlog.txt dosyasına yazar. Komutları çalıştırdıktan sonra sistemi yeniden başlatman gerekir. Bu adım, özellikle malware temizliği sonrasında veya ağ sürücüsü güncellemelerinden sonra ortaya çıkan bağlantı sorunlarını çözer.
HTTP Namespace Yönetimi
IIS dışında kendi HTTP listener’ını çalıştıran uygulamalar (WCF servisleri, custom HTTP sunucuları) için URL rezervasyonları gerekebilir.
URL Rezervasyonu Ekleme
netsh http add urlacl url=http://+:8080/myapp/ user="NETWORK SERVICE"
Bu komut, NETWORK SERVICE hesabının 8080 portundaki /myapp/ yolunu dinlemesine izin verir.
Mevcut Rezervasyonları Listeleme
netsh http show urlacl
SSL Sertifikası Bağlama
Kendi HTTP sunucun için SSL sertifikası bağlamak gerekirse:
netsh http add sslcert ipport=0.0.0.0:443 certhash=SERTIFIKA_PARMAK_IZI appid={UYGULAMA-GUID}
Bu senaryo özellikle IIS kullanmadan HTTPS dinleyen servislerde karşına çıkar.
Tüm Yapılandırmayı Dışa Aktarma ve İçe Aktarma
netsh‘in en az bilinen ama en güçlü özelliklerinden biri tüm ağ yapılandırmasını bir script dosyasına aktarabilmesidir:
netsh -c interface dump > network_config.txt
Bu dosyayı başka bir makineye taşıyıp şu şekilde uygulayabilirsin:
netsh -f network_config.txt
Ya da sadece firewall kurallarını aktarmak için:
netsh advfirewall export "C:Backupfirewall_rules.wfw"
netsh advfirewall import "C:Backupfirewall_rules.wfw"
Bu özellik, aynı güvenlik politikasını birden fazla sunucuya uygulamak için mükemmel.
Gerçek Dünya Senaryosu: Yeni Sunucu Klonlama
Bir sunucu template’i oluştururken ya da yeni bir sunucuyu mevcut bir sunucuyla aynı yapıya getirirken:
@echo off
REM Kaynak sunucuda çalıştır: tüm ayarları yedekle
echo Ağ yapılandırması dışa aktarılıyor...
netsh interface dump > "\dosya-sunucusuBackups%COMPUTERNAME%_network.txt"
netsh advfirewall export "\dosya-sunucusuBackups%COMPUTERNAME%_firewall.wfw"
echo Yedekleme tamamlandi.
Restore scripti:
@echo off
REM Hedef sunucuda çalıştır
echo Ağ yapılandırması geri yükleniyor...
netsh -f "\dosya-sunucusuBackupsKAYNAK_SUNUCU_network.txt"
netsh advfirewall import "\dosya-sunucusuBackupsKAYNAK_SUNUCU_firewall.wfw"
echo Geri yükleme tamamlandi. Lütfen sistemi yeniden baslatın.
IPv6 Yapılandırması
IPv6’yı tamamen devre dışı bırakmak için (bazı eski uygulamalar bunu gerektirir):
netsh interface ipv6 set prefix ::/0 50 1 store=active
netsh interface ipv6 set prefix ::/0 50 1 store=persistent
Ya da belirli bir arayüzde IPv6’yı kapatmak için:
netsh interface ipv6 set interface "Ethernet0" routerdiscovery=disabled
IPv6 adres atamak için:
netsh interface ipv6 add address interface="Ethernet0" address=2001:db8::1/64
Route Yönetimi
Statik route eklemek, özellikle multi-homed sunucularda veya VPN senaryolarında sıkça gerekir:
REM Kalıcı statik route ekle
netsh interface ipv4 add route 10.20.0.0/16 "Ethernet0" 192.168.1.254 store=persistent
REM Geçici route ekle (reboot sonrası silinir)
netsh interface ipv4 add route 10.20.0.0/16 "Ethernet0" 192.168.1.254 store=active
REM Route listesi
netsh interface ipv4 show route
REM Route silme
netsh interface ipv4 delete route 10.20.0.0/16 "Ethernet0"
store=persistent ile store=active arasındaki farka dikkat et. Bunu atlayıp sadece active store’a eklemek, sunucu yeniden başladığında route’un kaybolmasına neden olur. Yıllarca bu hatayı yapan, sonra “neden çalışmıyor” diye saatler harcayan insanlar gördüm.
Wireless Ağ Yönetimi
Sunucu ortamında pek kullanılmasa da bazı küçük ofis kurulumlarında ya da test makinelerinde kablosuz yönetimi de netsh ile yapabilirsin.
REM Mevcut wireless profilleri listele
netsh wlan show profiles
REM Belirli bir profile bağlan
netsh wlan connect name="Ofis-WiFi"
REM Wireless adapter'ı aç/kapat
netsh interface set interface "Wi-Fi" admin=enabled
netsh interface set interface "Wi-Fi" admin=disabled
REM Wireless profil dışa aktar (şifre dahil)
netsh wlan export profile name="Ofis-WiFi" folder="C:Backup" key=clear
Diagnostics: Neyi Kontrol Ediyorum?
netsh sadece yapılandırma için değil, mevcut durumu incelemek için de kullanılır. Sorun giderme sırasında çalıştırdığım tipik komut seti:
REM Tüm arayüzlerin özeti
netsh interface show interface
REM IP yapılandırmalarının özeti
netsh interface ipv4 show addresses
REM TCP bağlantıları
netsh interface ipv4 show tcpconnections
REM DNS önbelleğini görüntüle
netsh interface ipv4 show dnsservers
REM Neighbor Discovery tablosu (ARP tablosuna benzer)
netsh interface ipv4 show neighbors
Bu komutlar sana hızlı bir ağ sağlık kontrolü sağlar. Özellikle show addresses ile tüm arayüzlerin IP bilgisini tek seferde görmek, ipconfig /all‘dan daha temiz bir çıktı verir.
Netsh ile Sonuçların Doğrulanması
Yapılandırma sonrası doğrulama yapmak iyi bir alışkanlıktır. Bir değişiklik scripti her zaman doğrulama adımıyla bitmelidir:
@echo off
echo === Ağ Yapılandırma Doğrulama ===
echo.
echo --- IP Adresleri ---
netsh interface ipv4 show addresses
echo.
echo --- DNS Sunucuları ---
netsh interface ipv4 show dnsservers
echo.
echo --- Aktif Firewall Profili ---
netsh advfirewall show currentprofile
echo.
echo --- Routing Tablosu ---
netsh interface ipv4 show route
echo.
echo === Doğrulama Tamamlandi ===
Bu scripti her yapılandırma değişikliğinden sonra çalıştırıp çıktıyı log olarak saklamak, özellikle audit gerektiren ortamlarda çok işe yarar.
Netsh ve PowerShell Birlikte Kullanımı
Modern Windows yönetiminde PowerShell ön planda olsa da netsh hala bazı şeylerde daha pratik. İkisini birleştirmek mümkün:
$output = netsh advfirewall firewall show rule name=all dir=in | Select-String "Rule Name"
$output | ForEach-Object { Write-Host $_.Line }
Ya da toplu IP değişikliği için PowerShell döngüsü içinde netsh kullanabilirsin:
$sunucular = @("10.0.0.1", "10.0.0.2", "10.0.0.3")
foreach ($sunucu in $sunucular) {
Invoke-Command -ComputerName $sunucu -ScriptBlock {
netsh advfirewall set allprofiles logging droppedconnections enable
}
}
Sonuç
netsh, Windows ağ yönetiminde hala vazgeçilmez bir araç. PowerShell’in NetAdapter, NetFirewallRule gibi cmdlet’leri giderek daha popüler hale gelse de netsh daha eski sistemlerle uyumluluk, daha hızlı yazım ve bazı işlemler için daha doğrudan bir arayüz sunuyor. Özellikle firewall export/import, Winsock reset ve URL reservation gibi konularda netsh hala rakipsiz.
Burada anlattıklarımı özetleyecek olursam: IP ve DNS yapılandırması için interface ipv4 bağlamını, güvenlik duvarı yönetimi için advfirewall bağlamını, proxy için winhttp‘yi ve ağ stack sorunları için winsock reset ile int ip reset kombinasyonunu aklında tut. Bu dört alan, günlük sysadmin hayatında karşına çıkacak durumların büyük çoğunluğunu kapsar.
Son bir öneri: netsh komutlarını batch script haline getirip versiyon kontrolüne (Git) ekle. Hangi sunucuya ne yapılandırdığını, ne zaman değiştirdiğini izleyebilmek, özellikle birden fazla kişinin çalıştığı ortamlarda çok kritik. Yapılandırmanı kod gibi yönet.