CMD ile Netsh Kullanarak Ağ Yapılandırması

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.

Yorum yapın