Das ausgehende Netzwerk muss die Verbindung zu der / den Ziel IP Adressen freigeben, das empfangende Netzwerk muss die IP Adressen des Absenders in seine Whitelist aufnehmen.
Sofern Daten zwischen zwei Netzwerken übertragen werden, spielen immer IP Adressen und Firwalls ein Rolle. Damit OCT Daten zwischen Netzwerken übertragen kann, müssen daher Freigaben erstellt werden:
Meist passiert der Transfer zwischen Ihrem Firmennetzwerk und einem Cloudnetzwerk, wir müssen dabei bedenken
Ihr Firmennetzwerk leitet Traffic ggf. über mehrere öffentliche IPs in das Internet (redundante Anbindungen durch mehrere Provider, Poxys, Loadbalancer)
Das Cloudnetzwerk ordnet Ressourcen ggf. mehrere IP Adressen zu, da Loadbalancer, dynamische Skalierungen und Georedundanz die Ressourcen laufend ändern können
Konfiguration des Firmennetzwerks
Nennen Sie uns alle IP Adressen, über welche Daten von Ihnen gesendet werden. Sofern Sie darüber unsicher sind, führen Sie Script 1 aus.
Geben Sie auf Ihrer Firewall die Verbindung zum Cloudnetzwerk frei
A: für den von uns genannten Hostnamen (das macht die Sache am leichtesten, aber nicht jede Firewall kann das) auf dem genannten Port (meist 1433)
B: für die von uns genannten IP Adressen auf dem genannten Port (meist 1433)
Warten Sie unsere Rückmeldung zur Aufnahme Ihrer IP Adressen auf die Whitelist ab
A: testen Sie die dann die Verbindung zum Zielserver mit Script 4 für 10 Minuten, falls wir Ihnen einen Ziel Hostnamen geben
B: testen Sie die Verbindung zur Ziel IP Adresse mit Script 3, falls wir Ihnen eine Ziel IP Adresse gegeben haben.
Konfiguration des Cloudnetzwerkes
die IP Adressen des Kundennetzwerkes werden als zulässig für den Zugriff auf Cloudressourcen konfiguriert (Whitelisting)
die Freigabe erfolgt auf unterster Ressourcenebene, in der Regel sind das die Datenbankfirewall und eine Storageaccountfirewall
sofern neue Cloudressourcen geschaffen werden, können deren genutzte IP Adressen mit Script 2 geprüft werden.
Diagnosedetails
gibt es mehrere ausgehende IP Adressen, welche ggf. in der Firewall der Zieldatenbank freigeschalten werden müssen ?
ändert sich die IP Adresse der Zieldatenbank ? Besonders bei Azure Datenbanken ist das oft der Fall, da diese über Load Balancer etc. geroutet werden
nutzen Sie Script 2, welches die IP Adresse der ZielURL jede Minute aufzeichnet - lassen Sie das mal die ganze Nacht laufen
prüfen Sie, ob die Verbinung zu jeder dieser Zieladressen möglich ist (Script 3)
sie können auch die Script 4 laufen lassen, welches die Verbindung zum Hostname alle 30 Sekunden prüft - diese wechselt dann bei Probleme immer zwischen erreichbar / nicht erreichbar
Powershellscripte für Verbindungstests
Script 1, prüft fortlaufend die öffentliche IP Adresse über welcher Traffice das Netzwerk verlässt - Pfad konfigurieren !
POWERSHELL
# Pfad zur Logdatei
$logFile = "C:\Pfad\zur\Logdatei\ip_log.txt"
# Initiale IPv4-Adresse auf null setzen
$lastIpAddress = $null
# Endlosschleife für die wiederholte Abfrage
while ($true) {
try {
# Aktuelle öffentliche IPv4-Adresse abrufen
$currentIpAddress = (Invoke-RestMethod -Uri "http://ipv4.icanhazip.com").Trim()
# Zeitstempel für die Logdatei erstellen
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
# Wenn die IP-Adresse sich ändert oder es die erste Abfrage ist
if ($currentIpAddress -ne $lastIpAddress) {
# Nachricht mit Markierung bei IP-Änderung
$logEntry = "$timestamp - NEUE IP ADRESSE: $currentIpAddress"
# Letzte IP-Adresse aktualisieren
$lastIpAddress = $currentIpAddress
} else {
# Normale Log-Nachricht ohne Änderung
$logEntry = "$timestamp - IP Adresse unverändert: $currentIpAddress"
}
# Eintrag in die Logdatei schreiben
Add-Content -Path $logFile -Value $logEntry
}
catch {
# Bei Fehlern in der Abfrage eine Fehlermeldung in die Logdatei schreiben
$errorMessage = "$timestamp - Fehler beim Abrufen der IP-Adresse"
Add-Content -Path $logFile -Value $errorMessage
}
# Eine Minute warten
Start-Sleep -Seconds 60
}
Script 2, logt fortlaufend die IP Adresse einer ZielURL - Pfad und Ziel URL konfigurieren !
POWERSHELL
# Pfad zur Logdatei
$logFile = "C:\tmp\target_ip_log.txt"
# Ziel-URL, deren IP-Adresse abgefragt werden soll
$targetUrl = "xxx.database.windows.net"
# Initiale IP-Adresse auf null setzen
$lastIpAddress = $null
# Endlosschleife für die wiederholte Abfrage
while ($true) {
try {
# Aktuelle IP-Adresse der Ziel-URL abrufen
$currentIpAddress = [System.Net.Dns]::GetHostAddresses($targetUrl) |
Where-Object { $_.AddressFamily -eq 'InterNetwork' } |
Select-Object -First 1
# Zeitstempel für die Logdatei erstellen
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
# Wenn die IP-Adresse sich ändert oder es die erste Abfrage ist
if ($currentIpAddress -ne $lastIpAddress) {
# Nachricht mit Markierung bei IP-Änderung
$logEntry = "$timestamp - NEUE IP für $targetUrl : $currentIpAddress"
# Letzte IP-Adresse aktualisieren
$lastIpAddress = $currentIpAddress
} else {
# Normale Log-Nachricht ohne Änderung
$logEntry = "$timestamp - IP für $targetUrl unverändert: $currentIpAddress"
}
# Eintrag in die Logdatei schreiben
Add-Content -Path $logFile -Value $logEntry
}
catch {
# Bei Fehlern in der Abfrage eine Fehlermeldung in die Logdatei schreiben
$errorMessage = "$timestamp - Fehler beim Abrufen der IP-Adresse für $targetUrl"
Add-Content -Path $logFile -Value $errorMessage
}
# Eine Minute warten
Start-Sleep -Seconds 60
}
Script 3, prüft die ausgehende Verbindung zu einer IP Adresse prüft
POWERSHELL
$ipAddress = "123.123.123.123" # Die gewünschte IP-Adresse
$port = 1433 # Der gewünschte Port (z.B. 80 für HTTP)
# Teste die Verbindung zur IP-Adresse und zum Port
$result = Test-NetConnection -ComputerName $ipAddress -Port $port
# Überprüfe das Ergebnis und gib eine entsprechende Meldung aus
if ($result.TcpTestSucceeded) {
Write-Output "Verbindung zu $ipAddress auf Port $port ist möglich."
} else {
Write-Output "Verbindung zu $ipAddress auf Port $port ist nicht möglich."
}
Script 4, prüft die Erreichbarkeit eines Hostnamens fortlaufend
POWERSHELL
$hostname = "xxx.database.windows.net" # Der gewünschte DNS-Name oder die IP-Adresse
$port = 1433 # Der gewünschte Port (z.B. 80 für HTTP)
$interval = 30 # Zeitintervall in Sekunden
while ($true) {
# Teste die Verbindung zum DNS-Namen/IP-Adresse und zum Port
$result = Test-NetConnection -ComputerName $hostname -Port $port
# Überprüfe das Ergebnis und gib eine entsprechende Meldung aus
if ($result.TcpTestSucceeded) {
Write-Output "$(Get-Date): Verbindung zu $hostname auf Port $port ist möglich."
} else {
Write-Output "$(Get-Date): Verbindung zu $hostname auf Port $port ist nicht möglich."
}
# Warte für das festgelegte Zeitintervall, bevor der Test erneut ausgeführt wird
Start-Sleep -Seconds $interval
}