Wie kann ich die IP-Addresse mit meinem PI zu meiner 1&1 Domain senden?

CosmoCortney

Komplett-PC-Aufrüster(in)
Hallo,
nachdem ich mir erst eine Domain bei Strato gekauft hatte und ich von denen keine eindeutige Information erhielt, ob meine persönlichen Daten von der WHOIS-Abfrage anonymisiert werden können (obwohl das eigentlich mölich ist), habe ich mir diese bei 1&1 geholt.
Bin deren Anleitung gefolgt mit der man einen Pi zu einem DNS-Server macht: So machen Sie aus dem Raspberry Pi einen DNS-Server - 1&1
Aber es wird nicht beschrieben, Wie und wo ich meinen Domain- und/oder meinen Nutzernamen und Passwort eintrage.
 
Der Pi steht bei dir zuhause oder?
Und du möchtest das deine Domain darauf verweist oder?

Da benötigst du eine Feste IPv4 Adresse und in den Einstellungen der Domain gibst du deine Feste IP Adresse an.
Danach nur noch die Firewall zuhause konfigurieren.

Wenn die Punkte korrekt sind, kann ich dir das gerne ausführlicher beschreiben, musst es nur sagen.
 
Der Pi steht bei dir zuhause oder?
Und du möchtest das deine Domain darauf verweist oder?
Genau

Da benötigst du eine Feste IPv4 Adresse und in den Einstellungen der Domain gibst du deine Feste IP Adresse an.
Danach nur noch die Firewall zuhause konfigurieren.

Wenn die Punkte korrekt sind, kann ich dir das gerne ausführlicher beschreiben, musst es nur sagen.
Wieso eine statische IP, wenn man die dynamische der Domain zuweisen kann?
Bei Strato und no-ip funktioniert das ja. Bei no-ip möchte ich aber nicht meine Domain kaufen, da man dann noch Premium-Services dazu kaufen muss (wenn ich das richtig erkannt habe). Bei Strato hatte ich das Problem, dass meine personenbezogenen Daten über die WHOIS-Abfrage erfasst werden konnten und ich so nervige Mails und Anrufe bekam. Ich habe mich auf Empfehlung eines Forenmitglieds an Strato gewendet, da er seine Daten dort hat anonymisiert bekommen. Ich habe aber diesbezüglich vom Support keine (für mich) eindeutige Information erhalten
 
Ich glaub ich kann da helfen.
Ich habe selber eine 1und1 Domain, wobei eine Subdomain davon auf meine dynamische IP bei mir daheim läuft.
Ich benutze eine Kombination aus:
1und1 Domain, Cloudflare Free und DNS-O-Matic

Bei dir würde vielleicht auch nur 1und1 und Cloudflare reichen

Also Cloudflare Account erstellen > bei 1und1 Domain Cloudflare Nameserver eintragen > Anleitungen über CloudFlare DDNS Raspberry folgen

Bei mir ist nur der unterschied das mein Asus Router die IP an DNS-O-Matic weitergibt, einfach aus den Grund damit ich DDNS mit Domain und OpenDNS gleichzeitig benutzen kann

Edit: Da die Domain immer noch über 1und1 registriert ist, wird sich an den WHOIS-Daten nichts ändern ^^
Edit2: Bei der CloudFlare habe ich die Domain (bei mir Subdomain) nicht durch die Cloud gejagt, habe ich also bei den DNS Einstellungen abgewählt
 
Zuletzt bearbeitet:
Ich glaub ich kann da helfen.
Ich habe selber eine 1und1 Domain, wobei eine Subdomain davon auf meine dynamische IP bei mir daheim läuft.
Ich benutze eine Kombination aus:
1und1 Domain, Cloudflare Free und DNS-O-Matic

Bei dir würde vielleicht auch nur 1und1 und Cloudflare reichen
Okay, was genau ist Cloudflare?

Also Cloudflare Account erstellen > bei 1und1 Domain Cloudflare Nameserver eintragen > Anleitungen über CloudFlare DDNS Raspberry folgen

Bei mir ist nur der unterschied das mein Asus Router die IP an DNS-O-Matic weitergibt, einfach aus den Grund damit ich DDNS mit Domain und OpenDNS gleichzeitig benutzen kann

Edit: Da die Domain immer noch über 1und1 registriert ist, wird sich an den WHOIS-Daten nichts ändern ^^
Edit2: Bei der CloudFlare habe ich die Domain (bei mir Subdomain) nicht durch die Cloud gejagt, habe ich also bei den DNS Einstellungen abgewählt
Also die WHOIS-Abfrage liefert nun keine meiner Daten zurück
 
Naja, Cloudflare ist schwer zu erklären...
Vielleicht hilft dir die Wiki Seite weiter Cloudflare – Wikipedia
Eigentlich bräuchtest wahrscheinlich die meisten Funktionen nicht und ist für dich auch etwas überladen :ugly:
Für dich wäre wohl nur DNS interessant mit der Möglichkeit ne Dynamische IP auf die Domain zu binden.

PS: Da fällt mir auf das die Webadresse "www.pcgameshardware.de" auch Cloudflare benutzt...
 
Achso okay, danke.
Ich hatte mal ne Zeit lang eine kostenfreie, anonyme Domain von no-ip, aber das ganze ist etwas sehr unflexibel. no-ip2 hat immer meine ip zur Domain gebunden.
Für 2 Wochen hatte ich mir eine bei Strato gekauft, aber wie gesagt, wieder gekündigt, da meine Daten auf WHOIS landeten und ich nervige Anrufe bekam. Außerdem möchte ich nicht, dass meine physikalische Addresse einsehbar ist (mit sowas hatte ich schon schlechte Erfahrung machen müssen). Da habe ich die IP via Cronjob geupdatet. Ein Forum-Mitglied half mir dabei.
Aber ich blicke nicht s ganz durch, wie ich das bei 1&1 einrichten kann.
Ich wäre sehr dankbar und glücklich, wenn wir schonmal alles so hinbekommen, dass ich wieder meine IP automatisch zur Domain gebunden bekomme :)
Danach kümmere ich mich um Cloudflare
 
Sorry, war ne weile im RealLife ^^
Wenn deine IP deiner Leitung nicht Öffentlich sein soll, einfach durch die Cloud (CDN) von Cloudflare jagen.
Die WHOIS-Abfrage wird gleich bleiben also mit 1und1 Adresse.
Also Cloudflare Account erstellen > Cloudflare mit der Domain verbinden und hier ne Anleitung für den Pi, für IP wechsel mit Cloudflare
How to Set Up Dynamic DNS from a Raspberry Pi * BitPi.co

Edit: Falls de die Mailserver von 1und1 in Kombination mit Cloudflare benutzen möchtest, einfach ein MX Record erstellen.
Schaut bei 1und1 so aus:
MXRecord.png

Die andere Sache wäre für was ist die Domain gedacht? Für Webseiten funktioniert die Cloudflare CDN ganz gut.
Für Sachen wie VPN-Server sollte es aber nicht durch die Cloud gejagt werden, da der VPN-Client nicht die richtige IP bekommt
Es gibt natürlich auch Anbieter die haben nur DDNS, aber bei jeden DDNS wird es wohl sein das deine IP sozusagen abrufbar ist.
Also hat Cloudflare sozusagen den Vorteil das deine IP, sofern CDN aktiviert ist, nicht sichtbar ist.

Habe gerade ein Script zum Updaten gefunden, falls du nichts auf den Pi extra installen willst: (Habe ich aber nicht getestet)
Code:
[COLOR=#000000]#!/bin/shversion='0.2'
cfddns='[CloudFlareDDNS-'$version']'

#Get current public ip

MYIP=$(curl -s ipinfo.io/ip)
OLDIP=$(cat oldip.txt)


# Instructions:
# Define variables for API calls. Replace these with your own values!                  #
#################################################################################
token=12345678901234567890                                                  # CloudFlare token                    #
email=example@example.com                                                      # Cloudflare login account    #
z=example.com                                                                             # Domain Name                                #
id=1234567890                                                                              # CloudFlare Record ID            #
type=A                                                                                               # CloudFlare Record Type        #
ttl=1                                                                                              # TTL value                                    #
content=$MYIP                                                                              # IP address                                #
#################################################################################

if [ "$1" = "-f" ]
then
    echo 'cf-ddns called with -f, forcing update!'
    OLDIP=''
else
    echo 'No parameter found, normal run'
fi

if [ "$MYIP" = "$OLDIP" ]

then
  logger -s $cfddns "[INFO] No IP change detected" # Write to Syslog

else
  logger -s $cfddns "[INFO] IP change detected, updating CloudFlare trough API. Old IP was "$OLDIP" - New IP is " $MYIP             # Write to syslog


#########
# Instructions:
# Copy this block for the different hostnames you want to dynamically update, and insert unique id and name for the record.
########

# hostname: test.example.com
    id=51234567890
    name=test.example.com

    # Update record:
    curl -s -k  -L -X POST -H 'Content-Type: application/x-www-form-urlencoded' -d 'a=rec_edit&tkn='$token'&email='$email'&z='$z'&id='$id'&type='$type'&name='$name'&ttl='$ttl'&content='$content 'https://www.cloudflare.com/api_json.html'

# hostname: test2.example.com
    id=1234567891
    name=test2.example.com

    # Update record
    curl -s -k  -L -X POST -H 'Content-Type: application/x-www-form-urlencoded' -d 'a=rec_edit&tkn='$token'&email='$email'&z='$z'&id='$id'&type='$type'&name='$name'&ttl='$ttl'&content='$content 'https://www.cloudflare.com/api_json.html'


 echo $MYIP > oldip.txt
  logger -s $cfddns [INFO] "New IP is: " $MYIP
fi

Die Quelle des Codes
 
Zuletzt bearbeitet:
Sorry, war ne weile im RealLife ^^
Auf dem Server war ich bis eben auch :p

Wenn deine IP deiner Leitung nicht Öffentlich sein soll, einfach durch die Cloud (CDN) von Cloudflare jagen.
Die WHOIS-Abfrage wird gleich bleiben also mit 1und1 Adresse.
Also Cloudflare Account erstellen > Cloudflare mit der Domain verbinden und hier ne Anleitung für den Pi, für IP wechsel mit Cloudflare
How to Set Up Dynamic DNS from a Raspberry Pi * BitPi.co

Edit: Falls de die Mailserver von 1und1 in Kombination mit Cloudflare benutzen möchtest, einfach ein MX Record erstellen.
Schaut bei 1und1 so aus:
Anhang anzeigen 991219

Die andere Sache wäre für was ist die Domain gedacht? Für Webseiten funktioniert die Cloudflare CDN ganz gut.
Für Sachen wie VPN-Server sollte es aber nicht durch die Cloud gejagt werden, da der VPN-Client nicht die richtige IP bekommt
Es gibt natürlich auch Anbieter die haben nur DDNS, aber bei jeden DDNS wird es wohl sein das deine IP sozusagen abrufbar ist.
Also hat Cloudflare sozusagen den Vorteil das deine IP, sofern CDN aktiviert ist, nicht sichtbar ist.

Die Domain soll für ne simple Website sein, die ich mir zusammengeschustert habe. Mit der Adresse, die ich anonymisiert haben will meine ich meine physikalische Postadresse (wo ich wohne) (Wäre Telefon und email ersichtbar, könnte ich damit leben. Aber Anschrift möchte ich einfach schon aus vergangenen Situationen nicht öffentlich einsehbar haben). Mache ich eine WHOIS-Abfrage mit meiner IP, kommt da nur Gedöns der Telekom.

Also, um Websites zu hosten ist schon alles eingerichtet (Apache2, MySQL, phpmyadmin etc). Mein Router (Speedport :/) leitet Anfragen zu Port 80 und 81 an den Pi weiter.

Bei 1&1 kann ich diverse Einstellungen vornehmen.
Da muss ich doch den 1&1-Nameserver beibehalten, oder?
Die A/AAAA-Einträge sind doch meine IPv4 und IPV6-Addressen, oder? Genau diese sollten dann vom Pi automatisch z. B. alle 10 Minuten übermittelt werden (so wie es bei Strato mit einen Cronjob möglich ist). Aber ich weiß nicht, wie ich das bei 1&1 tun soll :(
 
Sorry, hab verpeilt, dass Du deinen Post bearbeitet hast lol
Hab nen Account bei CloudFlare und bei 1&1 die beiden Nameserver angegeben.
Nun bin ich mir mit dem Script ein wenig unsicher.
Was ist mit <i>token</i> und <i>CloudFlareID</i> gemeint bzw wo bekomme ich diese Information her?
Ist eines davon die Zone-ID?

Zur Kontrolle:
Code:
#!/bin/sh
version='0.2'
cfddns='[CloudFlareDDNS-'$version']'

#Get current public ip

MYIP=$(curl -s ipinfo.io/ip)
OLDIP=$(cat oldip.txt)


# Instructions:
# Define variables for API calls. Replace these with your own values! #
#################################################################################
token=?????????????????????	# CloudFlare token #
email=***@***.***	# Cloudflare login account #
z=follow-the-white-rabbit.net	# Domain Name #
id=????			# CloudFlare Record ID #
type=A				# CloudFlare Record Type #
ttl=1				# TTL value #
content=$MYIP			# IP address #
#################################################################################

if [ "$1" = "-f" ]
then
    echo 'cf-ddns called with -f, forcing update!'
    OLDIP=''
else
    echo 'No parameter found, normal run'
fi

if [ "$MYIP" = "$OLDIP" ]

then
  logger -s $cfddns "[INFO] No IP change detected" # Write to Syslog

else
  logger -s $cfddns "[INFO] IP change detected, updating CloudFlare trough API. Old IP was "$OLDIP" - New IP is " $MYIP # Write to syslog


#########
# Instructions:
# Copy this block for the different hostnames you want to dynamically update, and insert unique id and name for the record.
########

# hostname: test.example.com
    id=???????????
    name=follow-the-white-rabbit.net

    # Update record:
    curl -s -k  -L -X POST -H 'Content-Type: application/x-www-form-urlencoded' -d 'a=rec_edit&tkn='$token'&email='$email'&z='$z'&id='$id'&type='$type'&name='$name'&ttl='$ttl'&content='$content 'https://www.cloudflare.com/api_json.html'


 echo $MYIP > oldip.txt
  logger -s $cfddns [INFO] "New IP is: " $MYIP
fi
 
Habe gerade gesehen das Script ist etwas veraltet

Hier ein neues:
Diesmal getestet :ugly:

Code:
[COLOR=#000000]#!/usr/bin/env bashset -o errexit
set -o nounset
set -o pipefail

# Automatically update your CloudFlare DNS record to the IP, Dynamic DNS
# Can retrieve cloudflare Domain id and list zone's, because, lazy

# Place at:
# /usr/local/bin/cf-ddns.sh
# run `crontab -e` and add next line:
# 0 * * * * /usr/local/bin/cf-ddns.sh >/dev/null 2>&1

# run /usr/local/bin/cf-ddns.sh in terminal to check all settings are valid

# Usage:
# cf-ddns.sh -k cloudflare-api-key \
#            -u user@example.com \
#            -h host.example.com \     # fqdn of the record you want to update
#            -z example.com \          # will show you all zones if forgot, but you need this

# Optional flags:
#            -i cloudflare-record-id \ # script will show this
#            -a true|false \           # auto get zone list and record id
#            -f false|true \           # force dns update, disregard local stored ip

# default config

# API key, see https://www.cloudflare.com/a/account/my-account,
# incorrect api-key results in E_UNAUTH error
CFKEY=

# Zone name, will list all possible if missing, eg: example.com
CFZONE=

# Domain id, will retrieve itself by default
CFID=

# Username, eg: user@example.com
CFUSER=

# Hostname to update, eg: homeserver.example.com
CFHOST=

# Cloudflare TTL for record, between 120 and 86400 seconds
CFTTL=120
# Get domain ID from Cloudflare using awk/sed and python json.tool
GETID=true
# Ignore local file, update ip anyway
FORCE=false
# Site to retrieve WAN ip, other examples are: bot.whatismyipaddress.com, https://api.ipify.org/ ...
WANIPSITE="http://icanhazip.com"

# get parameter
while getopts a:k:i:u:h:z:f: opts; do
  case ${opts} in
    a) GETID=${OPTARG} ;;
    k) CFKEY=${OPTARG} ;;
    i) CFID=${OPTARG} ;;
    u) CFUSER=${OPTARG} ;;
    h) CFHOST=${OPTARG} ;;
    z) CFZONE=${OPTARG} ;;
    f) FORCE=${OPTARG} ;;
  esac
done

# If required settings are missing just exit
if [ "$CFKEY" = "" ]; then
  echo "Missing api-key, get at: https://www.cloudflare.com/a/account/my-account"
  echo "and save in ${0} or using the -k flag"
  exit 2
fi
if [ "$CFUSER" = "" ]; then
  echo "Missing username, probably your email-address"
  echo "and save in ${0} or using the -u flag"
  exit 2
fi
if [ "$CFHOST" = "" ]; then 
  echo "Missing hostname, what host do you want to update?"
  echo "save in ${0} or using the -h flag"
  exit 2
fi

# If the hostname is not a FQDN
if [ "$CFHOST" != "$CFZONE" ] && ! [ -z "${CFHOST##*$CFZONE}" ]; then
  CFHOST="$CFHOST.$CFZONE"
  echo " => Hostname is not a FQDN, assuming $CFHOST"
fi

# If CFZONE is missing, retrieve them all from CF
if [ "$CFZONE" = "" ]; then
  echo "Missing zone"
  if ! [ "$GETID" == true ]; then exit 2; fi
  echo "listing all zones: (if api-key is valid)"
  curl -s https://www.cloudflare.com/api_json.html \
    -d a=zone_load_multi \
    -d tkn=$CFKEY \
    -d email=$CFUSER \
    | grep -Eo '"zone_name":"([^"]+)"' \
    | cut -d':' -f2 \
    | awk '{gsub("\"","");print "* "$1}'
  echo "Please specify the matching zone in ${0} or specify using the -z flag"
  exit 2
fi

# Get current and old WAN ip
WAN_IP=`curl -s ${WANIPSITE}`
if [ -f $HOME/.wan_ip-cf.txt ]; then
  OLD_WAN_IP=`cat $HOME/.wan_ip-cf.txt`
else
  echo "No file, need IP"
  OLD_WAN_IP=""
fi

# If WAN IP is unchanged an not -f flag, exit here
if [ "$WAN_IP" = "$OLD_WAN_IP" ] && [ "$FORCE" = false ]; then
  echo "WAN IP Unchanged, to update anyway use flag -f true"
  exit 0
fi

# If CFID is missing retrieve and use it
if [ "$CFID" = "" ]; then
  echo "Missing DNS record ID"
  if ! [ "$GETID" == true ]; then exit 2; fi
  echo "fetching from Cloudflare..."
  if ! CFID=$(
  curl -s https://www.cloudflare.com/api_json.html \
    -d a=rec_load_all \
    -d tkn=$CFKEY \
    -d email=$CFUSER \
    -d z=$CFZONE \
    | grep -Eo '"(rec_id|name|type)":"([^"]+)"' \
    | cut -d':' -f2 \
    | awk 'NR%3{gsub("\"","");printf $0" ";next;}1' \
    | grep -E "${CFHOST//./\\.}" \
    | grep -e '"A"' \
    | grep -Eo "(^|\s)([0-9]+)(\s|$)"
  ); then
    echo " => Incorrect zone, or zone doesn't contain the A-record ${CFHOST}!"
    echo "listing all records for zone ${CFZONE}:"
    (printf "ID RECORD TYPE\n";
    curl -s https://www.cloudflare.com/api_json.html \
      -d a=rec_load_all \
      -d tkn=$CFKEY \
      -d email=$CFUSER \
      -d z=$CFZONE \
      | grep -Eo '"(rec_id|name|type)":"([^"]+)"' \
      | cut -d':' -f2 \
      | awk 'NR%3{gsub("\"","");printf $0" ";next;}1'
    )| column -t
    exit 2
  fi
  echo " => Found CFID=${CFID}, advising to save this to ${0} or set it using the -i flag"
fi

# If WAN is changed, update cloudflare
echo "Updating DNS to $WAN_IP"
RESPONSE=$(
curl -s https://www.cloudflare.com/api_json.html \
  -d a=rec_edit \
  -d tkn=$CFKEY \
  -d email=$CFUSER \
  -d z=$CFZONE \
  -d id=$CFID \
  -d ttl=$CFTTL \
  -d type=A \
  -d name=$CFHOST \
  -d "content=$WAN_IP"
) 
if [ "$RESPONSE" != "${RESPONSE%success*}" ]; then
  echo "Updated succesfuly!"
  echo $WAN_IP > $HOME/.wan_ip-cf.txt
  exit
else
  echo 'Something went wrong :('
  echo "Response: $RESPONSE"
  exit 1 [COLOR=#000000]fi

Quelle des Codes
 
Zum API Key geht es hier Cloudflare | Web Performance & Security
Zone Name deine Domain ohne sub also z.b: pcgh.de also ohne www oder so

Edit: Ich sehe gerade bei deiner WHOIS Abfrage, das bei deiner 1und1 Domain noch nicht die Cloudflare Nameserver eingetragen sind. Die sind Wichtig ^^

Danke^^
Also, da ich (noch) keine Subdomain habe, sind Zonename und Hostname identisch?
Hmm, ich habe die beiden Nameserver gestern schon eingetragen:
nameservers.PNG

Und was ist mit Domain-ID?


Hier das Script:
Code:
#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail

# Automatically update your CloudFlare DNS record to the IP, Dynamic DNS
# Can retrieve cloudflare Domain id and list zone's, because, lazy

# Place at:
# /usr/local/bin/cf-ddns.sh
# run `crontab -e` and add next line:
# 0 * * * * /usr/local/bin/cf-ddns.sh >/dev/null 2>&1

# run /usr/local/bin/cf-ddns.sh in terminal to check all settings are valid

# Usage:
# cf-ddns.sh -k cloudflare-api-key \
#            -u user@example.com \
#            -h host.example.com \     # fqdn of the record you want to update
#            -z example.com \          # will show you all zones if forgot, but you need this

# Optional flags:
#            -i cloudflare-record-id \ # script will show this
#            -a true|false \           # auto get zone list and record id
#            -f false|true \           # force dns update, disregard local stored ip

# default config

# API key, see https://www.cloudflare.com/a/account/my-account,
# incorrect api-key results in E_UNAUTH error
CFKEY="****"

# Zone name, will list all possible if missing, eg: example.com
CFZONE="follow-the-white-rabbit.net"

# Domain id, will retrieve itself by default
CFID=???

# Username, eg: user@example.com
CFUSER="***@***.***"

# Hostname to update, eg: homeserver.example.com
CFHOST="follow-the-white-rabbit.net"

# Cloudflare TTL for record, between 120 and 86400 seconds
CFTTL=600
# Get domain ID from Cloudflare using awk/sed and python json.tool
GETID=true
# Ignore local file, update ip anyway
FORCE=false
# Site to retrieve WAN ip, other examples are: bot.whatismyipaddress.com, https://api.ipify.org/ ...
WANIPSITE="http://icanhazip.com"

# get parameter
while getopts a:k:i:u:h:z:f: opts; do
  case ${opts} in
    a) GETID=${OPTARG} ;;
    k) CFKEY=${OPTARG} ;;
    i) CFID=${OPTARG} ;;
    u) CFUSER=${OPTARG} ;;
    h) CFHOST=${OPTARG} ;;
    z) CFZONE=${OPTARG} ;;
    f) FORCE=${OPTARG} ;;
  esac
done

# If required settings are missing just exit
if [ "$CFKEY" = "" ]; then
  echo "Missing api-key, get at: https://www.cloudflare.com/a/account/my-account"
  echo "and save in ${0} or using the -k flag"
  exit 2
fi
if [ "$CFUSER" = "" ]; then
  echo "Missing username, probably your email-address"
  echo "and save in ${0} or using the -u flag"
  exit 2
fi
if [ "$CFHOST" = "" ]; then 
  echo "Missing hostname, what host do you want to update?"
  echo "save in ${0} or using the -h flag"
  exit 2
fi

# If the hostname is not a FQDN
if [ "$CFHOST" != "$CFZONE" ] && ! [ -z "${CFHOST##*$CFZONE}" ]; then
  CFHOST="$CFHOST.$CFZONE"
  echo " => Hostname is not a FQDN, assuming $CFHOST"
fi

# If CFZONE is missing, retrieve them all from CF
if [ "$CFZONE" = "" ]; then
  echo "Missing zone"
  if ! [ "$GETID" == true ]; then exit 2; fi
  echo "listing all zones: (if api-key is valid)"
  curl -s https://www.cloudflare.com/api_json.html \
    -d a=zone_load_multi \
    -d tkn=$CFKEY \
    -d email=$CFUSER \
    | grep -Eo '"zone_name":"([^"]+)"' \
    | cut -d':' -f2 \
    | awk '{gsub("\"","");print "* "$1}'
  echo "Please specify the matching zone in ${0} or specify using the -z flag"
  exit 2
fi

# Get current and old WAN ip
WAN_IP=`curl -s ${WANIPSITE}`
if [ -f $HOME/.wan_ip-cf.txt ]; then
  OLD_WAN_IP=`cat $HOME/.wan_ip-cf.txt`
else
  echo "No file, need IP"
  OLD_WAN_IP=""
fi

# If WAN IP is unchanged an not -f flag, exit here
if [ "$WAN_IP" = "$OLD_WAN_IP" ] && [ "$FORCE" = false ]; then
  echo "WAN IP Unchanged, to update anyway use flag -f true"
  exit 0
fi

# If CFID is missing retrieve and use it
if [ "$CFID" = "" ]; then
  echo "Missing DNS record ID"
  if ! [ "$GETID" == true ]; then exit 2; fi
  echo "fetching from Cloudflare..."
  if ! CFID=$(
  curl -s https://www.cloudflare.com/api_json.html \
    -d a=rec_load_all \
    -d tkn=$CFKEY \
    -d email=$CFUSER \
    -d z=$CFZONE \
    | grep -Eo '"(rec_id|name|type)":"([^"]+)"' \
    | cut -d':' -f2 \
    | awk 'NR%3{gsub("\"","");printf $0" ";next;}1' \
    | grep -E "${CFHOST//./\\.}" \
    | grep -e '"A"' \
    | grep -Eo "(^|\s)([0-9]+)(\s|$)"
  ); then
    echo " => Incorrect zone, or zone doesn't contain the A-record ${CFHOST}!"
    echo "listing all records for zone ${CFZONE}:"
    (printf "ID RECORD TYPE\n";
    curl -s https://www.cloudflare.com/api_json.html \
      -d a=rec_load_all \
      -d tkn=$CFKEY \
      -d email=$CFUSER \
      -d z=$CFZONE \
      | grep -Eo '"(rec_id|name|type)":"([^"]+)"' \
      | cut -d':' -f2 \
      | awk 'NR%3{gsub("\"","");printf $0" ";next;}1'
    )| column -t
    exit 2
  fi
  echo " => Found CFID=${CFID}, advising to save this to ${0} or set it using the -i flag"
fi

# If WAN is changed, update cloudflare
echo "Updating DNS to $WAN_IP"
RESPONSE=$(
curl -s https://www.cloudflare.com/api_json.html \
  -d a=rec_edit \
  -d tkn=$CFKEY \
  -d email=$CFUSER \
  -d z=$CFZONE \
  -d id=$CFID \
  -d ttl=$CFTTL \
  -d type=A \
  -d name=$CFHOST \
  -d "content=$WAN_IP"
) 
if [ "$RESPONSE" != "${RESPONSE%success*}" ]; then
  echo "Updated succesfuly!"
  echo $WAN_IP > $HOME/.wan_ip-cf.txt
  exit
else
  echo 'Something went wrong :('
  echo "Response: $RESPONSE"
  exit 1 fi
 
Zuletzt bearbeitet:
gibt es nicht mal eine www. Subdomain?
einfach in Cloudflare erstellen ist ein A Record bei name einfach www eingeben.
wenn du dann deine Domain ohne www eingibst und nicht auf die www.domain.net umgeleitet wirst einfach bei Page Rules
Forwarding URL erstellen, also domain.net/* eingeben Forwarding URL auswählen mit Statuscode 301 und Destination URL domain.net

Edit mir ist gerade aufgefallen das, dass letzte fi nicht in der letzten Zeile ist ^^ Und das schon bei meinen Post ^^
Code:
[COLOR=#000000]#!/usr/bin/env bashset -o errexit
set -o nounset
set -o pipefail

# Automatically update your CloudFlare DNS record to the IP, Dynamic DNS
# Can retrieve cloudflare Domain id and list zone's, because, lazy

# Place at:
# /usr/local/bin/cf-ddns.sh
# run `crontab -e` and add next line:
# 0 * * * * /usr/local/bin/cf-ddns.sh >/dev/null 2>&1

# run /usr/local/bin/cf-ddns.sh in terminal to check all settings are valid

# Usage:
# cf-ddns.sh -k cloudflare-api-key \
#            -u user@example.com \
#            -h host.example.com \     # fqdn of the record you want to update
#            -z example.com \          # will show you all zones if forgot, but you need this

# Optional flags:
#            -i cloudflare-record-id \ # script will show this
#            -a true|false \           # auto get zone list and record id
#            -f false|true \           # force dns update, disregard local stored ip

# default config

# API key, see https://www.cloudflare.com/a/account/my-account,
# incorrect api-key results in E_UNAUTH error
CFKEY="****"

# Zone name, will list all possible if missing, eg: example.com
CFZONE="follow-the-white-rabbit.net"

# Domain id, will retrieve itself by default
CFID=???

# Username, eg: user@example.com
CFUSER="***@***.***"

# Hostname to update, eg: homeserver.example.com
CFHOST="www.dmain.net"

# Cloudflare TTL for record, between 120 and 86400 seconds
CFTTL=600
# Get domain ID from Cloudflare using awk/sed and python json.tool
GETID=true
# Ignore local file, update ip anyway
FORCE=false
# Site to retrieve WAN ip, other examples are: bot.whatismyipaddress.com, https://api.ipify.org/ ...
WANIPSITE="http://icanhazip.com"

# get parameter
while getopts a:k:i:u:h:z:f: opts; do
  case ${opts} in
    a) GETID=${OPTARG} ;;
    k) CFKEY=${OPTARG} ;;
    i) CFID=${OPTARG} ;;
    u) CFUSER=${OPTARG} ;;
    h) CFHOST=${OPTARG} ;;
    z) CFZONE=${OPTARG} ;;
    f) FORCE=${OPTARG} ;;
  esac
done

# If required settings are missing just exit
if [ "$CFKEY" = "" ]; then
  echo "Missing api-key, get at: https://www.cloudflare.com/a/account/my-account"
  echo "and save in ${0} or using the -k flag"
  exit 2
fi
if [ "$CFUSER" = "" ]; then
  echo "Missing username, probably your email-address"
  echo "and save in ${0} or using the -u flag"
  exit 2
fi
if [ "$CFHOST" = "" ]; then 
  echo "Missing hostname, what host do you want to update?"
  echo "save in ${0} or using the -h flag"
  exit 2
fi

# If the hostname is not a FQDN
if [ "$CFHOST" != "$CFZONE" ] && ! [ -z "${CFHOST##*$CFZONE}" ]; then
  CFHOST="$CFHOST.$CFZONE"
  echo " => Hostname is not a FQDN, assuming $CFHOST"
fi

# If CFZONE is missing, retrieve them all from CF
if [ "$CFZONE" = "" ]; then
  echo "Missing zone"
  if ! [ "$GETID" == true ]; then exit 2; fi
  echo "listing all zones: (if api-key is valid)"
  curl -s https://www.cloudflare.com/api_json.html \
    -d a=zone_load_multi \
    -d tkn=$CFKEY \
    -d email=$CFUSER \
    | grep -Eo '"zone_name":"([^"]+)"' \
    | cut -d':' -f2 \
    | awk '{gsub("\"","");print "* "$1}'
  echo "Please specify the matching zone in ${0} or specify using the -z flag"
  exit 2
fi

# Get current and old WAN ip
WAN_IP=`curl -s ${WANIPSITE}`
if [ -f $HOME/.wan_ip-cf.txt ]; then
  OLD_WAN_IP=`cat $HOME/.wan_ip-cf.txt`
else
  echo "No file, need IP"
  OLD_WAN_IP=""
fi

# If WAN IP is unchanged an not -f flag, exit here
if [ "$WAN_IP" = "$OLD_WAN_IP" ] && [ "$FORCE" = false ]; then
  echo "WAN IP Unchanged, to update anyway use flag -f true"
  exit 0
fi

# If CFID is missing retrieve and use it
if [ "$CFID" = "" ]; then
  echo "Missing DNS record ID"
  if ! [ "$GETID" == true ]; then exit 2; fi
  echo "fetching from Cloudflare..."
  if ! CFID=$(
  curl -s https://www.cloudflare.com/api_json.html \
    -d a=rec_load_all \
    -d tkn=$CFKEY \
    -d email=$CFUSER \
    -d z=$CFZONE \
    | grep -Eo '"(rec_id|name|type)":"([^"]+)"' \
    | cut -d':' -f2 \
    | awk 'NR%3{gsub("\"","");printf $0" ";next;}1' \
    | grep -E "${CFHOST//./\\.}" \
    | grep -e '"A"' \
    | grep -Eo "(^|\s)([0-9]+)(\s|$)"
  ); then
    echo " => Incorrect zone, or zone doesn't contain the A-record ${CFHOST}!"
    echo "listing all records for zone ${CFZONE}:"
    (printf "ID RECORD TYPE\n";
    curl -s https://www.cloudflare.com/api_json.html \
      -d a=rec_load_all \
      -d tkn=$CFKEY \
      -d email=$CFUSER \
      -d z=$CFZONE \
      | grep -Eo '"(rec_id|name|type)":"([^"]+)"' \
      | cut -d':' -f2 \
      | awk 'NR%3{gsub("\"","");printf $0" ";next;}1'
    )| column -t
    exit 2
  fi
  echo " => Found CFID=${CFID}, advising to save this to ${0} or set it using the -i flag"
fi

# If WAN is changed, update cloudflare
echo "Updating DNS to $WAN_IP"
RESPONSE=$(
curl -s https://www.cloudflare.com/api_json.html \
  -d a=rec_edit \
  -d tkn=$CFKEY \
  -d email=$CFUSER \
  -d z=$CFZONE \
  -d id=$CFID \
  -d ttl=$CFTTL \
  -d type=A \
  -d name=$CFHOST \
  -d "content=$WAN_IP"
) 
if [ "$RESPONSE" != "${RESPONSE%success*}" ]; then
  echo "Updated succesfuly!"
  echo $WAN_IP > $HOME/.wan_ip-cf.txt
  exit
else
  echo 'Something went wrong :('
  echo "Response: $RESPONSE"
  exit 1 
fi

Edit: Zum Nameserver und WHOIS www.whois.comhat anscheinend noch nicht geupdatet ein eine andere Whois seite gibt die Cloudflare Nameserver
 
Zuletzt bearbeitet:
Achso, ja, www gibt es. Ich dachte das bezieht sich nur auf soetwas wie das extreme bei extreme.pcgameshardware.de.
Bei A-Record ist bereits www eingetragen.
a-record.PNG

Also:
Code:
# API key, see https://www.cloudflare.com/a/account/my-account,
# incorrect api-key results in E_UNAUTH error
CFKEY="***"

# Zone name, will list all possible if missing, eg: example.com
CFZONE="follow-the-white-rabbit.net"

# Domain id, will retrieve itself by default
CFID=????????

# Username, eg: user@example.com
CFUSER="***@***.***"

# Hostname to update, eg: homeserver.example.com
CFHOST="www.follow-the-white-rabbit.net"
?
 
Zuletzt bearbeitet:
Irgendeine Einstellung scheint noch zu fehlen.
Wenn ich auf meinem 1&1& Profil bin, wird angezeigt, die Domain sei nicht aktiv.
Oder soll ich warten, weil: "Hinweis: Bei Änderungen der DNS-Einstellungen kann es bis zu 48 Stunden dauern, bis diese Änderungen im gesamten System umgesetzt sind."
 
Ja könnte sein das es so lange dauert bis es übernommen wird.
Bei mir hat es auch so lange gedauert, bis die Profilseite aktualisiert wurde.
Aber Website war vorher schon erreichbar ^^
 
Zurück