IP Source Adresse

Solange ein PC oder Server nur genau eine IP-Adresse hat, wird er bei ausgehenden Verbindungen auch immer diese als "Source-IP" verwenden und kann auch in Firewalls als Filterkriterium heran gezogen werden. Aber oft haben Server mehrere IP-Adressen und dann muss man schon genauer hinschauen.

Einsatz mehrerer IP-Adressen

Ein Computer kann mehrere IP-Adressen haben. Das kann Absicht sein, z.B. bei Servern, auf denen mehrere Dienste die gleichen Ports verwenden. Aber auch Workstations haben gerne mal mehrere IP-Adressen, insbesondere wenn diese per LAN und WiFi eine Verbindung haben. Allerdings sind diese dann in der Regel auf unterschiedlichen Netzwerkkarten.

Server hingegen haben auch auf einer Netzwerkkarte gerne mal mehrere IP-Adressen. Dies ist unter Windows auch per GuI ganz einfach einzurichten:

Schaut man sich dann die Daten per IPCONFIG /ALL an, dann sind beide IP-Adressen bei der Karte als "bevorzugt" zu sehen:

C:\> ipconfig /ALL

Ethernet-Adapter VMware Network Adapter Gigabit1:

   Verbindungsspezifisches DNS-Suffix:
   Beschreibung. . . . . . . . . . . : VMware Virtual Ethernet Adapter für VMnet1
   Physikalische Adresse . . . . . . : 00-50-56-C0-00-01
   DHCP aktiviert. . . . . . . . . . : Nein
   Autokonfiguration aktiviert . . . : Ja
   Verbindungslokale IPv6-Adresse  . : fe80::193b:1b82:d12c:192%25(Bevorzugt)
   IPv4-Adresse  . . . . . . . . . . : 10.1.1.1(Bevorzugt)
   Subnetzmaske  . . . . . . . . . . : 255.0.0.0
   IPv4-Adresse  . . . . . . . . . . : 10.1.1.2(Bevorzugt)
   Subnetzmaske  . . . . . . . . . . : 255.0.0.0
   Standardgateway . . . . . . . . . :
   DHCPv6-IAID . . . . . . . . . . . : 1140871254
   DHCPv6-Client-DuID. . . . . . . . : 00-01-00-01-13-AE-C8-EE-5C-FF-35-00-6D-E5
   DNS-Server  . . . . . . . . . . . : fec0:0:0:ffff::1%1
                                       fec0:0:0:ffff::2%1
                                       fec0:0:0:ffff::3%1
   NetBIOS über TCP/IP . . . . . . . : Aktiviert

Eine "primäre" Adresse im eigentlichen Sinne gibt es so wohl nicht (Windows 7)

Auswahl der Source-IP

Damit stellt sich die Frage, mit welcher IP-Adresse ein Clients dann ein Paket versendet. Gehen wir zuerst einmal davon aus, dass der Client oder Server selbst die Verbindung initiiert. Dann ist die Lösung zumindest am Anfang noch einfach: Der PC nutzt die Routingtable. Ich beschränke mich hier auf IPv4

C:\>route print
===========================================================================
Schnittstellenliste
 10...5c ff 35 00 6d e5 ......Intel(R) 82577LM Gigabit Network Connection
 12...00 24 d7 17 92 18 ......Intel(R) Centrino(R) ultimate-N 6300 AGN
  1...........................Software Loopback Interface 1
===========================================================================

IPv4-Routentabelle
===========================================================================
Aktive Routen:
     Netzwerkziel    Netzwerkmaske          Gateway    Schnittstelle Metrik
          0.0.0.0          0.0.0.0   192.168.100.12     192.168.102.2    296
        127.0.0.0        255.0.0.0   Auf Verbindung         127.0.0.1    306
        127.0.0.1  255.255.255.255   Auf Verbindung         127.0.0.1    306
  127.255.255.255  255.255.255.255   Auf Verbindung         127.0.0.1    306
    192.168.100.0    255.255.252.0   Auf Verbindung     192.168.102.1    276
    192.168.102.2  255.255.255.255   Auf Verbindung     192.168.102.1    276
  192.168.182.255  255.255.255.255   Auf Verbindung     192.168.102.1    276
        224.0.0.0        240.0.0.0   Auf Verbindung         127.0.0.1    306
        224.0.0.0        240.0.0.0   Auf Verbindung     192.168.182.1    276
  255.255.255.255  255.255.255.255   Auf Verbindung         127.0.0.1    306
  255.255.255.255  255.255.255.255   Auf Verbindung     192.168.182.1    276
===========================================================================
Ständige Routen:
  Keine

Hier ist das Bild noch einfach. ich habe zwar zwei Netzwerkkarten aber eine ist nicht aktiv. Selbst wenn beide aktiv wären, so hätte bei mir die Gigabit-Karte immer die "billigeren Kosten" (Metric) und wäre daher präferiert. Sollten dann aber zwei Netzwerkkarten "gleich gut" sein, dann wird ein "Round Robin" pro TCP-Connection genutzt.

Interessanterweise nutzt Windows 2003 und früher ein "Weak Host"-Modell, bei dem eine Software die "SourceIP" bestimmen kann. Das kann in einer Konfiguration mit zwei Netzwerkkarten dazu führen, dass der IP-Stack ein Paket mit einer SourceIP über die "falsche" Netzwerkarte versendet, wenn die Route zum Ziel den Weg über die andere Karte vorgibt.

Erst Windows 2008 und höher haben ein "Strong Host"-Model und das Paket verlässt den Host über die Netzwerkkarte, die auch die SourceIP gebunden hat.

Anders sieht es aber aus, wenn nur noch eine Netzwerkkarte übrig ist, die aber zwei oder mehr IP-Adressen hat. Dann kommt per Default die IP-Adresse als Quelle zum Einsatz, die am nächsten an der IP-Adresse des Gateways liegt. Hier ein Beispiel 

Auch wenn es zwei Leitwege gibt, über die der PC sein Paket los werden kann, so wird dieser PC immer erst mit der Source-IP=11 senden, da sie näher am Gateway 1 liegt.

Source-IP und DNS

Zusammen mit der Source-IP gilt es auch das Thema DNS-Registrierung zu beleuchten. Per Default registriert ein PC immer alle IP-Adressen auf allen Netzwerkkarten im DNS. Sie können natürlich in den Eigenschaften der Netzwerkkarte diese Registrierung abschalten

Dies gilt dann aber für alle IP-Adressen auf dieser Netzwerkkarte und nicht für einzelne IP-Adressen. Ich habe bislang dann bei solchen Servern mit mehreren IP-Adressen, bei denen ich nur die erste Adresse im DNS unter dem Hostnamen bekannt machen wollte, diese Option abgeschaltet und den Namen im DNS "statisch" eingetragen.

Erst ein entsprechender Hotfix erlaubt es für Windows per NETSH eine IP-Adresse zu addieren, die dann nicht im DNS eingetragen wird.

  • 975808 All IP addresses are registered on the DNS servers when the IP addresses are assigned to one network adapter on a computer that is running Windows Server 2008 SP2 or Windows Vista SP2
  • 2386184 IP addresses are still registered on the DNS servers even if the IP addresses are not used für outgoing traffic on a computer that is running Windows 7 or Windows Server 2008 R2

Konfiguration mit NetSH

Solche Einstellungen können natürlich auch nachträglich per NETSH ausgeführt werden. Hier die relevanten Einträge

Netsh int ipv4 add address <Interface Name> <ip address> skipassource=true

Anzeigen, welche Adapter das Flag skipassource=true gesetzt hat

Netsh int ipv4 show ipaddresses level=verbose

Konfiguration mit PowerShell

Seit Windows 8 / 2012 ist es auch per PowerShell möglich, diese Daten anzuzeigen und zu verändern.

# Anzeige der Netzwerkarapter mit deren IP-Adressen und der SkipAsSource-Einstellung

Get-NetAdapter `
   | Get-NetIPAddress `
   | Select IPAddress, SkipAsSource

Ebenso einfach ist es, die Eigenschaft pro IP-Adresse zu steuern.

# Bestimmte IP-Adresse als Quelle deaktivieren

Get-NetIPAddress 192.168.5.217 | Set-NetIPAddress -SkipAsSource $true

Ab sofort muss ich also nicht mehr die DNS-Registrierung auf der kompletten Netzwerkkarte abschalten, sondern kann dies pro IP-Adresse machen. Es ist schon häufiger der Fall, dass ein Server zwei oder mehr IP-Adressen hat.

Weitere Links