Windows Server’da Statik IP Adresi Atama ve Yönetimi
Yıllar içinde fark ettim ki ağ yapılandırması konusunda en çok sorun yaşanan şeylerden biri, aslında en temel adımlardan biri olan statik IP atamasında yapılan hatalar. “Sunucuya IP verdim, çalışıyor” deyip geçmek kolay, ama iki ay sonra DNS sorunu yaşıyorsunuz, ya da network ekibi sizi arıyor ve “bu sunucu hangi IP’de?” sorusuna cevap veremiyorsunuz. Bu yazıda Windows Server üzerinde statik IP atama işini sadece “tıkla, yaz, tamam” seviyesinde değil, gerçekten anlaşılır ve yönetilebilir bir şekilde ele alacağız.
Neden Statik IP Zorunlu?
DHCP kullanışlıdır, masaüstü makineler için mükemmeldir. Ama sunucular için DHCP kullanmak, her sabah işe geldiğinizde masanızın farklı bir yerde olabileceğini kabul etmek gibidir. DNS kayıtlarınız bozulur, monitoring araçlarınız sunucuyu kaybeder, backup job’larınız fail eder. Domain controller, SQL Server, dosya sunucusu, web sunucusu… Bunların hepsi sabit bir kimliğe ihtiyaç duyar.
Özellikle şunu vurgulayayım: DHCP reservation da bir çözüm gibi görünse de sunucu tarafında statik yapılandırma yapmadan bırakmak, DHCP servisinin çökmesi durumunda sunucunuzu ağsız bırakabilir. Production ortamında bu riski almaya değmez.
GUI ile Statik IP Atama
Windows Server’ın GUI sürümlerinde (Desktop Experience kurulumlarında) en hızlı yol Network and Sharing Center üzerinden gitmektir.
Adımlar:
Win + Rtuşlarıylancpa.cplçalıştırın- Yapılandırmak istediğiniz ağ adaptörüne sağ tıklayın
- Properties seçin
- Listeden Internet Protocol Version 4 (TCP/IPv4) seçip tekrar Properties açın
- Use the following IP address seçeneğini işaretleyin
- IP adresinizi, subnet mask’ı, default gateway’i girin
- Use the following DNS server addresses kısmına DNS sunucularınızı girin
Bu kadar basit gibi görünüyor. Ama burada birkaç kritik nokta var:
Subnet mask’ı doğru girin. /24 için 255.255.255.0, /25 için 255.255.128.0 gibi. Yanlış subnet mask, aynı switch’e bağlı iki sunucunun birbirini görmemesine neden olabilir ve bu tip sorunları debug etmek saatler alabilir.
Alternate DNS mutlaka doldurun. Primary DNS sunucusu bakıma alındığında secondary devreye girer. Bunu boş bırakmak, özellikle domain üyesi sunucularda ciddi sorunlara yol açar.
PowerShell ile Statik IP Atama
Sunucu sayısı ikinin üzerine çıktığında GUI ile uğraşmak zaman kaybıdır. PowerShell burada hem hız hem de tekrarlanabilirlik sağlar. Core kurulumlarında zaten GUI seçeneğiniz yok.
Önce mevcut ağ adaptörlerinizi listeleyin:
Get-NetAdapter | Select-Object Name, InterfaceDescription, Status, MacAddress
Hangi adaptörü yapılandıracağınızı belirledikten sonra mevcut IP konfigürasyonunu görüntüleyin:
Get-NetIPConfiguration -InterfaceAlias "Ethernet"
Şimdi statik IP atayalım. Burada dikkat edilmesi gereken nokta: Önce varsa mevcut IP’yi kaldırmak, sonra yeni IP’yi atamak daha temiz bir yaklaşımdır.
# Mevcut IP adresini kaldır (DHCP'den geliyorsa veya eski statik IP varsa)
Remove-NetIPAddress -InterfaceAlias "Ethernet" -Confirm:$false
# Default gateway'i temizle
Remove-NetRoute -InterfaceAlias "Ethernet" -DestinationPrefix "0.0.0.0/0" -Confirm:$false
# Yeni statik IP ata
New-NetIPAddress `
-InterfaceAlias "Ethernet" `
-IPAddress "192.168.10.50" `
-PrefixLength 24 `
-DefaultGateway "192.168.10.1"
DNS sunucularını ayrıca yapılandırın:
Set-DnsClientServerAddress `
-InterfaceAlias "Ethernet" `
-ServerAddresses ("192.168.10.10", "192.168.10.11")
Yapılandırmayı doğrulayın:
Get-NetIPConfiguration -InterfaceAlias "Ethernet" |
Select-Object InterfaceAlias, IPv4Address, IPv4DefaultGateway, DNSServer
Toplu Sunucu Yapılandırması için Script
Gerçek dünya senaryosu: 15 sunucu kuruyorsunuz ve her birinin farklı IP’si var. Bu durumda bir CSV dosyasından okuyarak toplu yapılandırma yapabilirsiniz.
Önce bir CSV dosyası hazırlayın (servers.csv):
# servers.csv içeriği:
# ServerName,Interface,IPAddress,PrefixLength,Gateway,DNS1,DNS2
# WEB01,Ethernet,192.168.10.51,24,192.168.10.1,192.168.10.10,192.168.10.11
# DB01,Ethernet,192.168.10.52,24,192.168.10.1,192.168.10.10,192.168.10.11
Şimdi bu CSV’yi okuyarak remote sunucularda yapılandırma yapan script:
$servers = Import-Csv -Path "C:Scriptsservers.csv"
foreach ($server in $servers) {
Write-Host "Yapılandıriliyor: $($server.ServerName)" -ForegroundColor Cyan
Invoke-Command -ComputerName $server.ServerName -ScriptBlock {
param($cfg)
# Mevcut konfigürasyonu temizle
$adapter = Get-NetAdapter -Name $cfg.Interface
Get-NetIPAddress -InterfaceIndex $adapter.InterfaceIndex -AddressFamily IPv4 |
Remove-NetIPAddress -Confirm:$false -ErrorAction SilentlyContinue
Get-NetRoute -InterfaceIndex $adapter.InterfaceIndex -DestinationPrefix "0.0.0.0/0" |
Remove-NetRoute -Confirm:$false -ErrorAction SilentlyContinue
# Yeni IP ata
New-NetIPAddress `
-InterfaceIndex $adapter.InterfaceIndex `
-IPAddress $cfg.IPAddress `
-PrefixLength ([int]$cfg.PrefixLength) `
-DefaultGateway $cfg.Gateway
# DNS ayarla
Set-DnsClientServerAddress `
-InterfaceIndex $adapter.InterfaceIndex `
-ServerAddresses ($cfg.DNS1, $cfg.DNS2)
Write-Host "$($cfg.IPAddress) adresi atandi." -ForegroundColor Green
} -ArgumentList $server
}
Bu script WinRM’in aktif olduğunu varsayıyor. WinRM aktif değilse önce Enable-PSRemoting -Force ile aktifleştirmeniz gerekir.
Netsh ile Eski Usul Yöntem
Eski sunucularda veya bazı otomasyon senaryolarında hala netsh kullanılıyor. Ayrıca bazı ekipler batch script tercih ettiğinden bu yöntemi bilmek faydalı:
# Statik IP atama
netsh interface ipv4 set address name="Ethernet" static 192.168.10.50 255.255.255.0 192.168.10.1
# DNS atama
netsh interface ipv4 set dns name="Ethernet" static 192.168.10.10
netsh interface ipv4 add dns name="Ethernet" 192.168.10.11 index=2
# Mevcut konfigürasyonu görüntüle
netsh interface ipv4 show config name="Ethernet"
netsh yöntemi hala çalışıyor fakat Microsoft bunun yerine PowerShell cmdlet’lerini öneriyor. Yine de karışık ortamlarda (Windows Server 2008 R2 hala kullananlar var, bunu biliyorum) bu yöntemi bilmek gerekiyor.
IPv6 Yönetimi
Birçok ortamda IPv6 devre dışı bırakılıyor ama bu her zaman doğru yaklaşım değil. Özellikle Windows Server 2016 ve sonrasında bazı dahili servisler IPv6’ya bağımlı. Eğer IPv6 kullanmayacaksanız tamamen kapatmak yerine, sadece gereksiz IPv6 adreslerini yönetmek daha sağlıklı.
Mevcut IPv6 adreslerini listeleyin:
Get-NetIPAddress -AddressFamily IPv6 |
Select-Object InterfaceAlias, IPAddress, PrefixLength, AddressState
IPv6 statik adres atamak gerekiyorsa:
New-NetIPAddress `
-InterfaceAlias "Ethernet" `
-IPAddress "2001:db8:cafe::50" `
-PrefixLength 64 `
-DefaultGateway "2001:db8:cafe::1" `
-AddressFamily IPv6
Set-DnsClientServerAddress `
-InterfaceAlias "Ethernet" `
-ServerAddresses ("2001:db8:cafe::10", "192.168.10.10")
Çoklu NIC Senaryoları
Üretim ortamında sunucular genellikle birden fazla NIC’e sahip oluyor. Database sunucusu örneğini ele alalım: Bir NIC yönetim trafiği için, diğeri uygulama trafiği için, bir diğeri backup trafiği için kullanılıyor.
Bu senaryoda her NIC için ayrı yapılandırma yapılır, ama dikkat edilmesi gereken kritik nokta şudur: Sadece bir NIC’te default gateway tanımlanmalıdır.
Birden fazla NIC’te default gateway tanımlamak routing tablonuzu karmaşıklaştırır ve paketlerin yanlış interface üzerinden çıkmasına neden olabilir.
# Management interface - gateway var
New-NetIPAddress `
-InterfaceAlias "Management" `
-IPAddress "10.0.0.50" `
-PrefixLength 24 `
-DefaultGateway "10.0.0.1"
# Application interface - gateway YOK, sadece local network için
New-NetIPAddress `
-InterfaceAlias "Application" `
-IPAddress "192.168.50.50" `
-PrefixLength 24
# Backup interface - gateway YOK
New-NetIPAddress `
-InterfaceAlias "Backup" `
-IPAddress "172.16.100.50" `
-PrefixLength 24
Belirli bir ağa ulaşmak için statik route eklemek gerektiğinde:
# Backup ağı üzerinden 172.16.200.0/24 ağına route ekle
New-NetRoute `
-InterfaceAlias "Backup" `
-DestinationPrefix "172.16.200.0/24" `
-NextHop "172.16.100.1" `
-RouteMetric 10
IP Yapılandırmasını Doğrulama ve Test
IP atadıktan sonra yapılandırmanın doğru çalışıp çalışmadığını test etmek, aynı adım kadar önemli.
# Temel connectivity testi
Test-NetConnection -ComputerName "192.168.10.1" -InformationLevel Detailed
# DNS çözümleme testi
Resolve-DnsName -Name "dc01.sirket.local" -Server "192.168.10.10"
# Belirli porta bağlantı testi (örneğin domain controller'a LDAP)
Test-NetConnection -ComputerName "192.168.10.10" -Port 389
# Routing tablosunu görüntüle
Get-NetRoute -AddressFamily IPv4 |
Where-Object {$_.RouteMetric -lt 256} |
Select-Object InterfaceAlias, DestinationPrefix, NextHop, RouteMetric |
Sort-Object RouteMetric
Şunu vurgulamak isterim: ping ve ipconfig ile yetinmeyin. Test-NetConnection çok daha fazla bilgi veriyor ve gerçek dünya bağlantı sorunlarını tespit etmekte daha etkin.
Sık Karşılaşılan Sorunlar ve Çözümleri
Sorun: IP atandı ama ağa çıkamıyor
Büyük ihtimalle gateway yanlış ya da subnet mask hatalı. Şunu kontrol edin:
# ARP tablosunu kontrol et - gateway MAC adresi görünüyor mu?
Get-NetNeighbor -InterfaceAlias "Ethernet" -AddressFamily IPv4
# Gateway'e ping
Test-NetConnection -ComputerName "192.168.10.1"
Gateway’in ARP tablosunda görünmemesi, farklı subnet’te olduğunuza işaret eder. Subnet mask’ı kontrol edin.
Sorun: DNS çalışmıyor ama ping IP adresiyle çalışıyor
# DNS sunucusuna erişim var mı?
Test-NetConnection -ComputerName "192.168.10.10" -Port 53
# DNS cache'i temizle ve tekrar dene
Clear-DnsClientCache
Resolve-DnsName -Name "google.com"
Sorun: Network adapter “Unidentified Network” olarak görünüyor
Bu genellikle domain ortamlarında default gateway’in erişilememesi ya da NLA (Network Location Awareness) servisinin ağı tanıyamamasından kaynaklanır:
# NLA servisini yeniden başlat
Restart-Service NlaSvc
# Network adapter'ı devre dışı bırakıp tekrar aktif et
Disable-NetAdapter -Name "Ethernet" -Confirm:$false
Start-Sleep -Seconds 3
Enable-NetAdapter -Name "Ethernet"
IP Değişikliklerini Belgeleyin
Bu kısmı teknik değil ama üzerinde durulması gereken bir nokta. Yapılandırmayı değiştirdiğinizde, neyi neden değiştirdiğinizi kayıt altına alın. CMDB’niz varsa oraya girin. Yoksa en azından bir Excel veya şirket wiki’si işinizi görür.
Sunucunun IP geçmişini PowerShell ile de çekebilirsiniz, Event Log’lardan:
# Network konfigürasyon değişikliklerini event log'dan çek
Get-WinEvent -LogName System |
Where-Object {$_.Id -in (4199, 4200, 10400, 10401)} |
Select-Object TimeCreated, Id, Message |
Format-List
Event ID 4199 ve 4200 IP çakışmalarını, 10400/10401 ise DHCP/statik geçişlerini kaydeder.
Sonuç
Windows Server’da statik IP yönetimi, yüzeyde basit görünen ama detayları olan bir konu. GUI yeterli tek sunucu ortamları için işe yarar, ama production ortamlarında PowerShell ile çalışmak hem hız hem de tekrarlanabilirlik açısından çok daha avantajlı.
Özellikle şunu aklınızda tutun: IP atamak tek başına yeterli değil. Doğru subnet mask, tek bir default gateway, güvenilir DNS yapılandırması ve sonrasında bağlantı testleri yapılandırmanın tamamını oluşturuyor. Çoklu NIC senaryolarında routing tablonuzu kontrol altında tutmak, ileride yaşanabilecek troubleshooting seanslarından sizi kurtarır.
Toplu yapılandırma ihtiyacı varsa, CSV bazlı script yaklaşımı hem zaman kazandırır hem de insan hatasını minimize eder. Onlarca sunucu için aynı IP’yi iki kez yazmak gibi hataları bu şekilde önleyebilirsiniz. Zaten bize en çok zaman kaybettiren sorunların büyük çoğunluğu, dikkat edilseydi baştan önlenebilecek türden hatalar.
