DnyDNS mit Subhost auf OPNsense/pfsense und anderen Softfirewalls

Hilfe bei der Einrichtung unsere DDNS Dienste in Routern und anderen Geräte sowie Updateclients
Antworten
wsxws
Beiträge: 10
Registriert: Mi 5. Apr 2017, 08:23

DnyDNS mit Subhost auf OPNsense/pfsense und anderen Softfirewalls

Beitrag von wsxws » Do 30. Jul 2020, 12:33

Hallo zusammen,
da der dynDNS-Client auf meiner OPNsense eher unzulänglich ich für meine Belange habe ich mich ein wenig mit der Materie beschäftigt und folgenden Lösungsweg gewählt. Der beruht zwar auf einem eigenen Script, aber über das WebUI habe ich sonst keine funktionierende Möglichkeit gefunden.
(In der phpDynDNS.inc der OPNsense fehlt die Variable des LanPrefix).

Von daher hier eine Schritt für Schritt Anleitung:

Als erstes legen wir auf feste-ip.net ein Dynamisches DNS an (Achtung das Passwort merken, das wird später nicht mehr angezeigt).
Danach auf Hostdetails bearbeiten, unten auf ipv6: ipv4 wird ignoriert stellen und speichern.
Danach auf IPv&-Features wie gewohnt Portmapper und Subhosts sowie Portmapper für diese einrichten.

Nun zur Firewall

Auf dem WebUI unter System-Settings-Administration den Secure Shell Server aktivieren, den Root-Zugang erlauben (Permit root user login) und auch die Authentifizierung mittels Passwort zulassen (Permit password login).

Mit putty eine Verbindung zur Firewall aufbauen, einloggen und mit der 8 auf die Shelloberfläche wechseln.
Das Paketsystem aktualisieren mit
pkg update
Danach benötigen wir bash und den Editor nano (der ist viel einfacher als der Standardeditor VIM)
pkg install bash nano
und erstellen wir das benötigte script mit
nano festeip.sh
Dort hinein kommt folgender Inhalt

Code: Alles auswählen

#!/bin/bash
# Login
user='myuser'
pass='mypass'
MainHost='myhost.feste-ip.net'
# Host to check (SubHost or MainHost)
CheckHost="mysub.myhost.feste-ip.net"
# Interfaces
LanIf='re0'
WanIf='re1'
# do not change anything below
# Vars
LanPref=$(ifconfig $LanIf | grep inet6 | grep -v fe80 | awk -v FS=" " '{ print $2 }' | awk -v FS=":" '{ print $1":"$2":"$3":"$4 }')
WanIP=$(ifconfig $WanIf | grep inet6 | grep -v fe80 | awk -v FS=" " '{ print $2 }')
# Curl-URL
CurlURL="http://"$user":"$pass"@v6.members.feste-ip.net/nic/update?hostname=$MainHost&myip="$WanIP"&subhostprefix="$LanPref
# Check if SubHost is reachable, otherwise update dynDNS
if ! ping6 -c 1 $CheckHost > /dev/null 2>&1 ; then
     curl $CurlURL
fi;
exit
Natürlich müssen hier einige Variablen angepasst werden:

user (z.B.: user='121457')
pass (z.B.: pass='jH76R-Uu1_')
MainHost (z.B.: MainHost='dumpty.feste-ip.net')
CheckHost (z.B.: CheckHost="humpty.dumpty.feste-ip.net")
LanIf (z.B.: LanIf='re0' oder 'eth0')
WanIf (z.B.: WanIf='re1')

unterhalb der Zeil # Vars bitte nichts mehr verändern

Nach dem Speichern (mit Strg+x) müssen wir diese Datei noch ausführbar machen mit
chmod +x festeip.sh
Testen kann man das Script mit
./festeip.sh

ACHTUNG --->>> Wenn ein neuer Subhost angelegt wurde die IPv6 unter Hostdetails im Feste-IP.net Konto löschen, da sonst keine Aktivierung des Subhosts erfolgt ! <<<--- ACHTUNG

Wenn das Script nun funktioniert müssen wir uns jetzt um die automatische Ausführung kümmern.
Bei der OPNsense funktioniert das wie folgt (bei anderen System bitte die entsprechenden Docs konsultieren)

Wir benennen das Script um und verschieben es für die Ausführung am Ende des Bootvorgangs
mv festeip.sh /usr/local/etc/rc.syshook.d/start/94-festedyn

Für eine periodische Ausführung mit frei wählbaren Zeiten legen wir nun einen Dienst an und erstellen eine Datei
nano /usr/local/opnsense/service/conf/actions.d/actions_festeip.conf
mit folgendem Inhalt

Code: Alles auswählen

[start]
command:/usr/local/etc/rc.syshook.d/start/94-festedyn
description:FesteIP Update
parameters:
type:script_output
message:updating Feste-IP.net
Jetzt noch config.d aktualisieren mit
service configd restart
und das script testen mit
configctl festeip start

Als letztes wieder im WebUI der Firewall unter System-Settings-Cron einen Cronjob hinzufügen. Hier ist in der Liste Commands nun auch der Punkt 'FesteIP Update' zu finden.

Vielleicht habe ich ja damit dem ein oder anderen weitergeholfen ;)

Antworten