BLog |
|
![]() |
---|
Dynamische IP Adresse einer bei AWS gehosteten Domain für den FreeBSD-Home-Server automatisch aktualisierenIch habe alle meine Domains nach AWS-Route-53 umgezogen, und eine Sub-Domain soll auf den FreeBSD-Home-Server zeigen. Als die Domains noch bei Strato lagen, hatte ich die Adresse über das von Strato zu diesem Zweck vorgesehene DynDNS-Protokoll automatisch aktualisiert. AWS-Route-53 kann alles nur nicht DynDNS. Hier zeige ich, wie die Aktualisierung mit dem Kommandozeilen-Tool awscli funktioniert.
Inzwischen wurde meine Internet-Anbindung zu Hause auch von Kabel auf Glasfaser umgestellt, und die dynamische Adresse wird nun via PPPoE und nicht mehr DHCP zugewiesen. Für PPPoE benutze ich mpd5(8). In den Einstellungen unter
Die MPD5-Einstellungen pppoe_client:
create bundle static B_pppoe
set iface name ppp0
set iface description WAN
set iface up-script "/root/config/ppp-up.sh"
set iface enable tcpmssfix
set iface route default
set ipcp ranges 0.0.0.0/0 0.0.0.0/0
set ipcp disable vjcomp
create link static L_pppoe pppoe
set link action bundle B_pppoe
set auth authname <PPPoE-Benutzer>
set auth password <PPPoE-Passwort>
set link disable protocomp
set link max-redial 0
set link keep-alive 10 60
set pppoe iface re0
set pppoe service ""
open
Das PPP-Up-Script #!/bin/sh if [ "$2" == "inet6" ]; then exit 0 fi /root/config/ipfw.reload NEWIP=`echo $3 | cut -d/ -f1` /root/config/awsr53-update.sh $NEWIP Das PPP-Up-Script lädt die Firewall-Regeln neu und ruft danach ein weiteres Script auf, das den A-Record der Sub-Domain bei AWS-Route 53 mit der neuen IP-Adresse aktualisiert.
Hierzu muß das Kommandozeilen-Tool awscli installiert sein (‚XY‘ durch die Python-Versionsnummer ersetzen, aktuell ‚39‘):
Nun müssen noch die AWS-Credentials hinterlegt werden:
In der AWS-Console unter Route 53 > Hosted Zones erfahren wir die ID der Zone, in der die betreffende Domain aufgeführt ist, in meinem Fall so ähnlich wie
Das AWS-Route-53-Update-Script #!/bin/sh arg1=$1 arg2=$2 for iface in `/sbin/ifconfig -l` ; do desc=`/sbin/ifconfig $iface | /usr/bin/sed -n '/.description: /{s///;s/ .*//;p;}'` if [ "$desc" == "WAN" ] ; then WAN=$iface fi done if [ -e /var/tmp/currentIP ] ; then currentIP=`/bin/cat /var/tmp/currentIP` else currentIP= fi if [ "$arg1" == "" ] || [ "$arg1" == "force" ] ; then if [ "$WAN" != "" ] ; then newIP=`/sbin/ifconfig $WAN | /usr/bin/sed -n '/.inet /{s///;s/ .*//;p;}'` fi else newIP=$arg1 arg1=$arg2 fi # unlike in C, && and || share the same precedence and are evaluated from left to the rigth if [ "$newIP" != "" ] && [ "$newIP" != "$currentIP" ] || [ "$arg1" == "force" ] ; then if [ "$currentIP" = "" ] ; then echo "awsr53: updating to $newIP" else echo "awsr53: updating from $currentIP to $newIP" fi HOME=/root /usr/local/bin/aws route53 change-resource-record-sets --output text --hosted-zone-id Z056735201OFuHv20rMLl --change-batch "`/usr/bin/sed \"s/NEWIP/$newIP/\" /root/config/awsr53-example.com.json`" > /var/tmp/awsr53.log 2>&1 if [ "$?" == "0" ] ; then echo "$newIP" > /var/tmp/currentIP else echo "$?: `/usr/bin/sed \"s/NEWIP/$newIP/\" /root/config/awsr53-example.com.json`" >> /var/tmp/awsr53.log fi else echo "awsr53: nochg $currentIP" fi
Das Kommando { "Changes": [ { "Action": "UPSERT", "ResourceRecordSet": { "Name": "subdom.example.com", "Type": "A", "TTL": 300, "ResourceRecords": [ { "Value": "NEWIP" } ] } } ] } Das funktioniert genauso problemlos wie zuvor das DynDNS-IP-Update bei Strato. Copyright © Dr. Rolf Jansen - 2022-08-15 23:09:09 Diskussion auf Twitter: 1559324385902731270 |