Entwicklung eines Roboters zur Änderung und Aktualisierung der IP-Adresse auf Cloudflare basierend auf den vom Amazon-Server empfangenen IP-Adressen.
Schritt-für-Schritt-Anleitung zum Erstellen eines Bots zur Aktualisierung dynamischer IP-Adressen auf Cloudflare mithilfe von AWS.

Entwicklung eines Roboters zur Änderung und Aktualisierung der IP-Adresse auf Cloudflare basierend auf den vom Amazon-Server empfangenen IP-Adressen.

0 Aktien
0
0
0
0

Voraussetzungen

Vor Beginn der Arbeiten müssen Sie die folgenden Dinge vorbereiten, damit der Roboter ordnungsgemäß funktioniert.

  • Cloudflare-Konto und Zugriff auf die Verwaltung der Domain-DNS.
  • Schaffung API-Token In Cloudflare mit Zugriffsebene Zone:DNS:Bearbeiten Für die gewünschte Zone.
  • Zugang zu Zonen-ID Domain- und Datensatzname (z.B. vpn.example.com).
  • Ein Server oder Dienst in AWS (EC2) mit einer öffentlich zugänglichen IP-Adresse oder ein AWS-API-Zugriff für Abfragen.
  • Grundlegende Werkzeuge: Locke, jq, Python3+ Anfragen.
  • Sicherheitshinweis: Bewahren Sie das Token in AWS Secrets Manager oder geschützte Umweltvariablen.

Methoden zum Abrufen einer IP-Adresse von AWS

Es gibt mehrere gängige Methoden, um eine öffentliche IP-Adresse von Amazon-Servern zu erhalten; die Wahl der Methode hängt vom jeweiligen Anwendungsszenario ab.

1. Innerhalb von EC2 (Metadaten)

Wenn das Skript auf derselben EC2-Instanz ausgeführt wird, ist die einfachste Methode die Verwendung des Metadatendienstes:

curl -s http://169.254.169.254/latest/meta-data/public-ipv4

Für IPv6:

curl -s http://169.254.169.254/latest/meta-data/ipv6

2. Mit AWS CLI/SDK

Verwendung describe-instances Sie können nach Tag oder Instanz-ID filtern, um die IP-Adresse zu erhalten. Mit IAM-Rollen entfällt die Notwendigkeit von Zugriffsschlüsseln.

aws ec2 describe-instances --instance-ids i-0123456789abcdef --query "Reservations[].Instances[].PublicIpAddress" --output text

3. Elastisches IP und komplexe Netzwerke

Bei Elastic IP oder komplexen Netzwerkkonfigurationen sollten Sie die Zuordnungen mit Adressen beschreiben Die Methode ist angemessen.

Roboterdesign: Vorgeschlagene Architektur

Je nach Bedarf und Umfang gibt es mehrere geeignete Architekturmuster:

  • Einfache Option: Das Skript läuft auf derselben EC2-Instanz und überprüft die IP-Adresse alle n Minuten; ändert sie sich, wird sie über die Cloudflare-API aktualisiert.
  • Skalierbare Option: Mehrere EC2-Instanzen in verschiedenen Regionen → Eine zentrale Lambda/Serverless-Instanz ist für das Sammeln von IPs und das Aktualisieren mehrerer Datensätze zuständig.
  • Speicherstatus: Lokale Datei oder S3/DB zur Speicherung der zuletzt registrierten IP-Adresse, um unnötige Aktualisierungen zu vermeiden.
  • Fehlerbehandlung und Wiederholungsversuche: Backoff und Protokollierung (CloudWatch) verwenden.

Schnelle Implementierung mit Bash + curl (praktisches Beispiel)

Dieses Beispiel setzt voraus, dass das Skript auf derselben EC2-Instanz ausgeführt wird und einen A-Record aktualisiert. Zuerst müssen Sie die Zonen-ID und die Record-ID einmalig abrufen:

curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=example.com" -H "Authorization: Bearer $CF_API_TOKEN" -H "Content-Type: application/json" | jq -r '.result[0].id'

curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?name=vpn.example.com" -H "Authorization: Bearer $CF_API_TOKEN" -H "Content-Type: application/json" | jq -r '.result[0].id'

Beispielskript update-ip.sh:

#!/usr/bin/env bash
set -e
CF_TOKEN="---FROM SECRETS MANAGER OR ENV---"
ZONE_ID="your_zone_id"
RECORD_NAME="vpn.example.com"
RECORD_ID="your_record_id"
PROXY=false
TTL=120

get_ip() {
  curl -s http://169.254.169.254/latest/meta-data/public-ipv4
}

current_ip=$(get_ip)
old_ip_file="/var/run/current_ip_${RECORD_NAME}"

if [ -f "$old_ip_file" ]; then
  old_ip=$(cat "$old_ip_file")
else
  old_ip=""
fi

if [ "$current_ip" = "" ]; then
  echo "No public IP found" >&2
  exit 1
fi

if [ "$current_ip" != "$old_ip" ]; then
  echo "Updating Cloudflare DNS from $old_ip to $current_ip"
  payload=$(jq -n --arg type "A" --arg name "$RECORD_NAME" --arg content "$current_ip" --argjson proxied $PROXY --argjson ttl $TTL '{type:$type, name:$name, content:$content, proxied:$proxied, ttl:$ttl}')
  resp=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" -H "Authorization: Bearer $CF_TOKEN" -H "Content-Type: application/json" --data "$payload")
  success=$(echo "$resp" | jq -r '.success')
  if [ "$success" = "true" ]; then
    echo "$current_ip" > "$old_ip_file"
    echo "Update successful"
  else
    echo "Update failed: $resp" >&2
    exit 2
  fi
else
  echo "IP unchanged ($current_ip)"
fi

Tipps: Aus jq Wird zum Erstellen von JSON verwendet. Speichert IP-Adressen in /var/run Dies dient dazu, unnötige Aktualisierungen zu vermeiden. Speichern Sie das Token in einer Umgebungsvariablen oder im Secrets Manager, nicht in einem Skript.

Zuverlässige Implementierung mit Python (praktisches Beispiel)

Ein Beispiel für ein Python-Skript, das als Lambda-Funktion oder auf dem Server ausgeführt werden kann und mehrere Datensätze verwaltet.

requests
boto3
import os, requests, json
CF_TOKEN = os.environ['CF_TOKEN']
ZONE_ID = os.environ['ZONE_ID']
RECORDS = json.loads(os.environ.get('RECORDS_JSON', '[]'))

HEADERS = {
    "Authorization": f"Bearer {CF_TOKEN}",
    "Content-Type": "application/json"
}

def get_ec2_public_ip():
    try:
        r = requests.get("http://169.254.169.254/latest/meta-data/public-ipv4", timeout=2)
        if r.ok:
            return r.text.strip()
    except:
        pass
    return None

def find_record_id(name, type="A"):
    url = f"https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/dns_records?name={name}&type={type}"
    r = requests.get(url, headers=HEADERS)
    data = r.json()
    if data.get("success") and data["result"]:
        return data["result"][0]["id"]
    return None

def update_record(record_id, name, ip, type="A", ttl=120, proxied=False):
    url = f"https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/dns_records/{record_id}"
    payload = {"type": type, "name": name, "content": ip, "ttl": ttl, "proxied": proxied}
    r = requests.put(url, headers=HEADERS, json=payload)
    return r.json()

def lambda_handler(event, context=None):
    ip = get_ec2_public_ip()
    if not ip:
        print("No public IP found")
        return
    for rec in RECORDS:
        name = rec["name"]
        typ = rec.get("type","A")
        rec_id = find_record_id(name, typ)
        if not rec_id:
            print(f"No record id for {name}")
            continue
        resp = update_record(rec_id, name, ip, typ, rec.get("ttl",120), rec.get("proxied",False))
        print(resp)

if __name__ == "__main__":
    lambda_handler(None)

Bereitstellung und Verwaltung (systemd, cron, Lambda)

Gängige Methoden zum Betrieb und zur Verwaltung eines Roboters:

  • systemdErstellen Sie eine Unit, die das Skript alle 5 Minuten ausführt, oder einen Daemon-Dienst, der Änderungen überwacht.
  • CronPeriodische Ausführung (alle n Minuten) mit lokalem Zustandsspeicher, um redundante Aktualisierungen zu vermeiden.
  • AWS Lambda + EventBridgePeriodische Ausführung ohne Serverwartung, mit IAM-Rolle und Secrets Manager.
  • Protokolle: Protokolle an CloudWatch senden und Alarme für persistente Fehler definieren.

Sicherheit, Schlüsselaufbewahrung und minimaler Zugriff

Sicherheitsanforderungen zur Risikominderung und Einhaltung des Grundsatzes des minimalen Zugriffs:

  • API-Token beschränkt: Verwenden Sie in Cloudflare ein API-Token anstelle eines globalen API-Schlüssels und beschränken Sie den Gültigkeitsbereich auf Zone:DNS:Bearbeiten Nur für die gewünschte Zone.
  • IAM-Rolle: In AWS verwenden Sie die IAM-Rolle für EC2/Lambda und den AWS Secrets Manager oder den SSM Parameter Store, um CF_TOKEN zu speichern.
  • Token aus den Protokollen löschen: Protokolle aus dem Tokenspeicher löschen und TLS verwenden.
  • Limitaktualisierungen: Wenn sich die IP-Adresse nicht geändert hat, senden Sie keine Aktualisierungen, um eine Ratenbegrenzung zu vermeiden.

Praktische Tipps: TTL, Proxy, IPv6, Fehlerbehebung und Überwachung

  • TTLNiedrige TTL-Werte (z. B. 120 Sekunden) eignen sich gut für schnelle Änderungen, erhöhen aber die Anzahl der Abfragen.
  • Proxy (Cloudflare orange Wolke): Wenn Sie möchten, dass der Datenverkehr über Cloudflare (CDN, WAF, DDoS-Schutz) geleitet wird, proxy=true. Aber für Whitelist-IPs wie die von Börsen benötigen Sie proxy=false Um das eigentliche geistige Eigentum zu schützen.
  • IPv6Falls eine IPv6-Adresse existiert, aktualisieren Sie diese. AAAA Aufzeichnungen sind ebenfalls unerlässlich.
  • Wiederholungsversuche: Verwenden Sie exponentielles Backoff und protokollieren Sie Fehler, wenn Netzwerkfehler auftreten.
  • Überwachung: Erfassen Sie Kennzahlen zu erfolgreichen/fehlgeschlagenen Aktualisierungen, API-Antwortzeiten und IP-Änderungen im Dashboard und richten Sie Benachrichtigungen für häufige Fehler ein.

Vergleich und praktische Empfehlungen für Handel, Spiele und das Web

Handel: Ping und Stabilität sind sehr wichtig. Es wird empfohlen, einen Trading-VPS in der Nähe der Börse mit DDoS-Schutz zu nutzen. Für eine feste IP-Adresse empfiehlt sich eine Elastic IP oder ein Update-Roboter. Für einige Börsen-APIs… proxy=false Es ist notwendig.

Spiel: Geringe Latenz und Stabilität sind wichtig. Wählen Sie einen Standort in der Nähe der Spieler. Je nach Spiel ist die Verwendung von Cloudflare Spectrum oder der Verzicht auf einen Proxy ausschlaggebend.

Web und API: Cloudflare verwenden mit proxy=true Empfohlen für CDN-, WAF- und DDoS-Schutz. In diesem Fall ist ein IP-Wechsel weniger kritisch, der Ursprung muss jedoch verwaltet werden.

Abschluss

Mit den oben beschriebenen Methoden können Sie DNS-Einträge auf Cloudflare automatisch und sicher auf Basis der von EC2 empfangenen IPs aktualisieren.

  • Aus API-Token beschränkt Nutzen Sie Cloudflare.
  • Aus IAM-Rolle Und Geheimnismanager Nutzen Sie die Vorteile von AWS.
  • Implementieren Sie geeignete Protokollierungs-, Überwachungs- und Wiederholungsmechanismen, um den Prozess robust zu gestalten.
  • Für spezielle Anforderungen (Handel, Gaming, KI/Rendering) sollten spezialisierte Server, Anti-DDoS-Schutz und optimierte Standorte genutzt werden, um die Latenz zu reduzieren und die Stabilität zu erhöhen.

Bereitschaft, technische Unterstützung in Anspruch zu nehmen

Wenn Sie Unterstützung bei der professionellen Implementierung, der Wahl des richtigen Standorts oder der sicheren Bereitstellung auf AWS und Cloudflare benötigen, können Sie sich an das technische Team wenden, um eine maßgeschneiderte Lösung und umfassenden Support zu erhalten.

Häufig gestellte Fragen

Das könnte Ihnen auch gefallen