netcup bietet ja verschiedene APIs an, u.a. auch für die DNS-Verwaltung.
Leider ist die Doku zu dieser entweder dürftig oder ich bin zu blöde die Infos alle zu finden.
Wie dem auch sei, nun habe ich mir die Brocken zusammengesucht und endlich ein funktionierendes Skript hinbekommen, welches mir die DNS-Einträge zuverlässig ändert.
Damit nicht jeder das Rad neu erfinden muss, teile ich das mal hier:
Bash
#!/bin/bash
APIKEY="API-Key"
APIPW="API-Passwort"
CID="Kundennummer"
[ $# -lt 3 ] && echo "usage: setdns.sh domain type value [subdomain]" && exit
DOMAIN=$1
TYPE=$2
VALUE=$3
HOST="@"
[ $# -gt 3 ] && HOST=$4
LOGIN=$(curl --no-progress-meter -X POST https://ccp.netcup.net/run/webservice/servers/endpoint.php?JSON -H 'Content-Type: application/json' -d '{
"action":"login",
"param":{
"apikey":"'"$APIKEY"'",
"apipassword":"'"$APIPW"'",
"customernumber":"'"$CID"'"
}
}')
APISESSIONID=$(echo $LOGIN | jq -r '.responsedata.apisessionid')
RECORDS=$(curl --no-progress-meter -X POST https://ccp.netcup.net/run/webservice/servers/endpoint.php?JSON -H 'Content-Type: application/json' -d '{
"action":"infoDnsRecords",
"param":{
"apikey":"'"$APIKEY"'",
"apisessionid":"'"$APISESSIONID"'",
"customernumber":"'"$CID"'",
"domainname":"'"$DOMAIN"'"
}
}' | jq '.responsedata.dnsrecords[] | select(.hostname=="'"$HOST"'") | select(.type=="'"$TYPE"'") | {dnsrecords: [.]}')
echo Old Record:
echo $RECORDS | jq
ID=$(echo $RECORDS | jq '.dnsrecords[]' | jq -r '.id')
RC=$(curl --no-progress-meter -X POST https://ccp.netcup.net/run/webservice/servers/endpoint.php?JSON -H 'Content-Type: application/json' -d '{
"action":"updateDnsRecords",
"param":{
"apikey":"'"$APIKEY"'",
"apisessionid":"'"$APISESSIONID"'",
"customernumber":"'"$CID"'",
"domainname":"'"$DOMAIN"'",
"dnsrecordset":{
"dnsrecords":[
{
"id":"'"$ID"'",
"hostname":"'"$HOST"'",
"type":"'"$TYPE"'",
"priority":"0",
"destination":"'"$VALUE"'",
"deleterecord":"FALSE",
"state":"yes"
}
]
}
}
}')
RECORDS=$(curl --no-progress-meter -X POST https://ccp.netcup.net/run/webservice/servers/endpoint.php?JSON -H 'Content-Type: application/json' -d '{
"action":"infoDnsRecords",
"param":{
"apikey":"'"$APIKEY"'",
"apisessionid":"'"$APISESSIONID"'",
"customernumber":"'"$CID"'",
"domainname":"'"$DOMAIN"'"
}
}' | jq '.responsedata.dnsrecords[] | select(.hostname=="'"$HOST"'") | select(.type=="'"$TYPE"'") | {dnsrecords: [.]}')
echo New Record:
echo $RECORDS | jq
curl --no-progress-meter -X POST https://ccp.netcup.net/run/webservice/servers/endpoint.php?JSON -H 'Content-Type: application/json' -d '{
"action":"logout",
"param":{
"apikey":"'"$APIKEY"'",
"apisessionid":"'"$APISESSIONID"'",
"customernumber":"'"$CID"'"
}
}' | jq
Alles anzeigen
z.B.:
./setdns.sh domain.tld A "8.8.4.4"
./setdns.sh domain.tld TXT "v=DMARC1;p=quarantine;sp=none" _dmarc
Ist noch ausbaufähig, aber es tut was es soll. ![]()