Scripte überarbeitet #1
|
@ -7,6 +7,13 @@ DNSSCRIPT_CONTACT_EMAIL=""
|
||||||
#DNSSCRIPT_SERVER_NAME="dns.herpf.fff.community"
|
#DNSSCRIPT_SERVER_NAME="dns.herpf.fff.community"
|
||||||
DNSSCRIPT_SERVER_NAME=""
|
DNSSCRIPT_SERVER_NAME=""
|
||||||
|
|
||||||
|
### If you are a root for $CommunityDomain or a first level Hood: do not specify
|
||||||
|
### If serving a subsequent subdomain, specify Remote and all Subdomains excluding the own
|
||||||
|
### For example if you are serving <own sub>.<sub2>.<sub1>.<community dom> then specify <sub2>.<sub1>
|
||||||
|
### master file in remote needs to be named: db.<sub2>.<sub1>.<community dom>
|
||||||
|
#RemoteLocation="https://gw01.herpf.fff.community/ffdns/"
|
||||||
|
#SubCommunityDomain="herpf"
|
||||||
|
|
||||||
ZoneFilesFolder="/etc/bind/fff/"
|
ZoneFilesFolder="/etc/bind/fff/"
|
||||||
BindIncludeFileFolder="/etc/bind/"
|
BindIncludeFileFolder="/etc/bind/"
|
||||||
TempFolder="/tmp/ffdns/"
|
TempFolder="/tmp/ffdns/"
|
||||||
|
|
|
@ -18,12 +18,18 @@ export DNSSCRIPT_BIND_RELOAD_VER
|
||||||
cd /usr/lib/ffdns/
|
cd /usr/lib/ffdns/
|
||||||
. ./dns-functions.sh
|
. ./dns-functions.sh
|
||||||
|
|
||||||
|
MasterDomain="$CommunityDomain"
|
||||||
|
[ -z "$SubCommunityDomain" ] || MasterDomain="$SubCommunityDomain"".""$MasterDomain"
|
||||||
|
if [ -n "$CommunityExternPrefix" ];then
|
||||||
|
MasterExternDomain="$CommunityExternPrefix"".""$CommunityDomain"
|
||||||
|
[ -z "$SubCommunityDomain" ] || MasterExternDomain="$SubCommunityDomain"".""$MasterExternDomain"
|
||||||
|
fi
|
||||||
|
|
||||||
FirstInternal="$( echo "$InternalViews" | sed -ne 's/^\(\S\+\)\s.*$/\1/p')"
|
FirstInternal="$( echo "$InternalViews" | sed -ne 's/^\(\S\+\)\s.*$/\1/p')"
|
||||||
# ForwardZones: "<Zone>/<Zonendatei>" ; optionaly multiple " ""<ZoneX>/<ZonendateiX>" no spaces in full filename
|
# ForwardZones: "<Zone>/<Zonendatei>" ; optionaly multiple " ""<ZoneX>/<ZonendateiX>" no spaces in full filename
|
||||||
ForwardZones="$CommunityDomain""/""$ZoneFilesFolder""db.""$FirstInternal"".""$CommunityDomain"
|
ForwardZones="$MasterDomain""/""$ZoneFilesFolder""db.""$FirstInternal"".""$MasterDomain"
|
||||||
BindIcvpnAclTmp="$TempFolder""icvpn-acl.conf"
|
BindIcvpnAclTmp="$TempFolder""icvpn-acl.conf"
|
||||||
BindIcvpnAcl="$BindIncludeFileFolder""icvpn-acl.conf"
|
BindIcvpnAcl="$BindIncludeFileFolder""icvpn-acl.conf"
|
||||||
[ -z "$CommunityExternPrefix" ] || CommunityExternDomain="$CommunityExternPrefix"".""$CommunityDomain"
|
|
||||||
[ -n "$DNSSECPolicy" ] || DNSSECKeyFolder=""
|
[ -n "$DNSSECPolicy" ] || DNSSECKeyFolder=""
|
||||||
|
|
||||||
mkdir -p "$TempFolder""cache"
|
mkdir -p "$TempFolder""cache"
|
||||||
|
@ -33,12 +39,12 @@ for IView in $InternalViews; do
|
||||||
done
|
done
|
||||||
rm -f "$TempFolder""$ExternalView"".conf"
|
rm -f "$TempFolder""$ExternalView"".conf"
|
||||||
|
|
||||||
CachedMasterFile="$TempFolder""cache/db.""$CommunityDomain"
|
CachedMasterFile="$TempFolder""cache/db.""$MasterDomain"
|
||||||
PreFetchMasterSerial="$(GetZoneFileSerial "$CachedMasterFile")"
|
PreFetchMasterSerial="$(GetZoneFileSerial "$CachedMasterFile")"
|
||||||
$(curl -s -S -f "$RemoteLocation""db.""$CommunityDomain" --output "$CachedMasterFile" && [ -f "$CachedMasterFile" ] && echo "" >> "$CachedMasterFile")
|
$(curl -s -S -f "$RemoteLocation""db.""$MasterDomain" --output "$CachedMasterFile" && [ -f "$CachedMasterFile" ] && echo "" >> "$CachedMasterFile")
|
||||||
PostFetchMasterSerial="$(GetZoneFileSerial "$CachedMasterFile")"
|
PostFetchMasterSerial="$(GetZoneFileSerial "$CachedMasterFile")"
|
||||||
ServeMasterZone="$( GetAllZoneNameservers "$CommunityDomain" "$CachedMasterFile" | awk '{for(i=NF;i>0;--i) if($i=="'"$DNSSCRIPT_SERVER_NAME"'") {printf 1}}')"
|
[ -n "$SubCommunityDomain" ] || ServeMasterZone="$( GetAllZoneNameservers "$MasterDomain" "$CachedMasterFile" | awk '{for(i=NF;i>0;--i) if($i=="'"$DNSSCRIPT_SERVER_NAME"'") {printf 1}}')"
|
||||||
if [ -n "$CommunityExternDomain" ]; then
|
if [ -n "$MasterExternDomain" ]; then
|
||||||
if [ -n "$ServeMasterZone" ]; then
|
if [ -n "$ServeMasterZone" ]; then
|
||||||
ServeExtZone="1"
|
ServeExtZone="1"
|
||||||
else
|
else
|
||||||
|
@ -52,17 +58,17 @@ if [ -n "$ServeMasterZone" ] || [ -n "$ServeExtZone" ]; then
|
||||||
sed -i -e '/^\s*_dnsseckeys\./d' "$CachedMasterFile"
|
sed -i -e '/^\s*_dnsseckeys\./d' "$CachedMasterFile"
|
||||||
FileForExternGeneration="$CachedMasterFile"
|
FileForExternGeneration="$CachedMasterFile"
|
||||||
if [ -n "$ExternalView" ]; then
|
if [ -n "$ExternalView" ]; then
|
||||||
ExternFile="$ZoneFilesFolder""db.""$ExternalView"".""$CommunityDomain"
|
ExternFile="$ZoneFilesFolder""db.""$ExternalView"".""$MasterDomain"
|
||||||
else
|
else
|
||||||
ExternFile="$ZoneFilesFolder""db.""$CommunityExternDomain"
|
ExternFile="$ZoneFilesFolder""db.""$MasterExternDomain"
|
||||||
fi
|
fi
|
||||||
LocalMasterSerial=$((PostFetchMasterSerial))
|
LocalMasterSerial=$((PostFetchMasterSerial))
|
||||||
if [ -n "$ServeMasterZone" ]; then
|
if [ -n "$ServeMasterZone" ]; then
|
||||||
MasterFile="$ZoneFilesFolder""db.""$FirstInternal"".""$CommunityDomain"
|
MasterFile="$ZoneFilesFolder""db.""$FirstInternal"".""$MasterDomain"
|
||||||
FileForExternGeneration="$MasterFile"
|
FileForExternGeneration="$MasterFile"
|
||||||
ZoneTempFolder="$TempFolder""cache/""$CommunityDomain""/"
|
ZoneTempFolder="$TempFolder""cache/""$MasterDomain""/"
|
||||||
|
|
||||||
UpdateMaster="$(UpdateDNSSECEntryCache "$CommunityDomain" "$ZoneTempFolder" "$CachedMasterFile" "$DNSSECKeyFolder")"
|
UpdateMaster="$(UpdateDNSSECEntryCache "$MasterDomain" "$ZoneTempFolder" "$CachedMasterFile" "$DNSSECKeyFolder")"
|
||||||
if [ $((PostFetchMasterSerial)) -gt $((PreFetchMasterSerial)) ] || [ $UpdateMaster -ne 0 ]; then
|
if [ $((PostFetchMasterSerial)) -gt $((PreFetchMasterSerial)) ] || [ $UpdateMaster -ne 0 ]; then
|
||||||
cp -f "$CachedMasterFile" "$CachedMasterFile""I"
|
cp -f "$CachedMasterFile" "$CachedMasterFile""I"
|
||||||
for KeyFile in "$ZoneTempFolder"*; do
|
for KeyFile in "$ZoneTempFolder"*; do
|
||||||
|
@ -79,9 +85,9 @@ if [ -n "$ServeMasterZone" ] || [ -n "$ServeExtZone" ]; then
|
||||||
LocalMasterSerial=$((PostFetchMasterSerial))
|
LocalMasterSerial=$((PostFetchMasterSerial))
|
||||||
fi
|
fi
|
||||||
mv "$CachedMasterFile""I" "$MasterFile"
|
mv "$CachedMasterFile""I" "$MasterFile"
|
||||||
ReloadZone "$CommunityDomain" "$InternalViews"
|
ReloadZone "$MasterDomain" "$InternalViews"
|
||||||
|
|
||||||
InsertZoneToViews "$InternalViews" "$ZoneFilesFolder" "$CommunityDomain" "$MasterFile" "$TempFolder" "$DNSSECPolicy"
|
InsertZoneToViews "$InternalViews" "$ZoneFilesFolder" "$MasterDomain" "$MasterFile" "$TempFolder" "$DNSSECPolicy"
|
||||||
fi
|
fi
|
||||||
for Subnet in $CommunitySubnets; do
|
for Subnet in $CommunitySubnets; do
|
||||||
ReverseDomains="$(GetReverseDomains "$Subnet")"
|
ReverseDomains="$(GetReverseDomains "$Subnet")"
|
||||||
|
@ -97,7 +103,7 @@ if [ -n "$ServeMasterZone" ] || [ -n "$ServeExtZone" ]; then
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
if [ -n "$ExternalView" ]; then
|
if [ -n "$ExternalView" ]; then
|
||||||
InsertZoneToIncludeFile "$CommunityDomain" "$ExternFile" "$TempFolder""$ExternalView"".conf" "$DNSSECPolicy"
|
InsertZoneToIncludeFile "$MasterDomain" "$ExternFile" "$TempFolder""$ExternalView"".conf" "$DNSSECPolicy"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -109,13 +115,13 @@ if [ -n "$ServeMasterZone" ] || [ -n "$ServeExtZone" ]; then
|
||||||
s/^[^;^@]*\s\+\([^;]*\)\s[Ii][Nn]\s\+[Ss][Oo][Aa]\s/@ \1 IN SOA /g' "$FileForExternGeneration" \
|
s/^[^;^@]*\s\+\([^;]*\)\s[Ii][Nn]\s\+[Ss][Oo][Aa]\s/@ \1 IN SOA /g' "$FileForExternGeneration" \
|
||||||
> "$ExternFile"
|
> "$ExternFile"
|
||||||
UpdateExternView=1
|
UpdateExternView=1
|
||||||
[ -z "$ExternalView" ] || ReloadZone "$CommunityExternDomain" "$ExternalView"
|
[ -z "$ExternalView" ] || ReloadZone "$MasterExternDomain" "$ExternalView"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$ServeExtZone" ]; then
|
if [ -n "$ServeExtZone" ]; then
|
||||||
MasterExtDomainFile="$ZoneFilesFolder""db.""$FirstInternal"".""$CommunityExternDomain"
|
MasterExtDomainFile="$ZoneFilesFolder""db.""$FirstInternal"".""$MasterExternDomain"
|
||||||
ZoneTempFolder="$TempFolder""cache/""$CommunityExternDomain""/"
|
ZoneTempFolder="$TempFolder""cache/""$MasterExternDomain""/"
|
||||||
cp -f "$ExternFile" "$CachedMasterFile""E"
|
cp -f "$ExternFile" "$CachedMasterFile""E"
|
||||||
sed -i -e '/^\s*_dnsseckeys\./d' "$CachedMasterFile""E"
|
sed -i -e '/^\s*_dnsseckeys\./d' "$CachedMasterFile""E"
|
||||||
[ -n "$(sed -e '/^\s*\(@\s\+\([0-9]*\s\)\?\s*[Ii][Nn]\s\+[Nn][Ss]\)\s/!d' "$CachedMasterFile""E")" ] || \
|
[ -n "$(sed -e '/^\s*\(@\s\+\([0-9]*\s\)\?\s*[Ii][Nn]\s\+[Nn][Ss]\)\s/!d' "$CachedMasterFile""E")" ] || \
|
||||||
|
@ -123,12 +129,12 @@ if [ -n "$ServeMasterZone" ] || [ -n "$ServeExtZone" ]; then
|
||||||
|
|
||||||
sed -i -e 's/^\s*'"$CommunityExternPrefix"'\s/@ /g;/^\s*@\s\+[Ii][Nn]\s\+[Dd][Ss]\s/d' "$CachedMasterFile""E"
|
sed -i -e 's/^\s*'"$CommunityExternPrefix"'\s/@ /g;/^\s*@\s\+[Ii][Nn]\s\+[Dd][Ss]\s/d' "$CachedMasterFile""E"
|
||||||
|
|
||||||
UpdateExternDomain="$(UpdateDNSSECEntryCache "$CommunityExternDomain" "$ZoneTempFolder" "$CachedMasterFile""E" "$DNSSECKeyFolder")"
|
UpdateExternDomain="$(UpdateDNSSECEntryCache "$MasterExternDomain" "$ZoneTempFolder" "$CachedMasterFile""E" "$DNSSECKeyFolder")"
|
||||||
if [ $UpdateExternView -ne 0 ] || [ $UpdateExternDomain -ne 0 ]; then
|
if [ $UpdateExternView -ne 0 ] || [ $UpdateExternDomain -ne 0 ]; then
|
||||||
for KeyFile in "$ZoneTempFolder"*; do
|
for KeyFile in "$ZoneTempFolder"*; do
|
||||||
[ "$KeyFile" == "$ZoneTempFolder""*" ] || \
|
[ "$KeyFile" == "$ZoneTempFolder""*" ] || \
|
||||||
cat "$KeyFile" >> "$CachedMasterFile""E"
|
cat "$KeyFile" >> "$CachedMasterFile""E"
|
||||||
done
|
done
|
||||||
LocalExtDomainMasterSerial="$(GetZoneFileSerial "$MasterExtDomainFile")"
|
LocalExtDomainMasterSerial="$(GetZoneFileSerial "$MasterExtDomainFile")"
|
||||||
|
|
||||||
if [ $((LocalMasterSerial)) -le $((LocalExtDomainMasterSerial)) ]; then
|
if [ $((LocalMasterSerial)) -le $((LocalExtDomainMasterSerial)) ]; then
|
||||||
|
@ -137,26 +143,26 @@ if [ -n "$ServeMasterZone" ] || [ -n "$ServeExtZone" ]; then
|
||||||
sed -i -e 's/^\(\s*\S\+\s\+\([0-9]*\s\)\?\s*[Ii][Nn]\s\+[Ss][Oo][Aa]\s\+\S\+\s\+\S\+\s\+\)'"$LocalMasterSerial"'\(\s\+.*\)$/\1'"$LocalExtDomainMasterSerial"'\3/g' "$CachedMasterFile""E"
|
sed -i -e 's/^\(\s*\S\+\s\+\([0-9]*\s\)\?\s*[Ii][Nn]\s\+[Ss][Oo][Aa]\s\+\S\+\s\+\S\+\s\+\)'"$LocalMasterSerial"'\(\s\+.*\)$/\1'"$LocalExtDomainMasterSerial"'\3/g' "$CachedMasterFile""E"
|
||||||
fi
|
fi
|
||||||
mv "$CachedMasterFile""E" "$MasterExtDomainFile"
|
mv "$CachedMasterFile""E" "$MasterExtDomainFile"
|
||||||
ReloadZone "$CommunityExternDomain" "$InternalViews"
|
ReloadZone "$MasterExternDomain" "$InternalViews"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
InsertZoneToViews "$InternalViews" "$ZoneFilesFolder" "$CommunityExternDomain" "$MasterExtDomainFile" "$TempFolder" "$DNSSECPolicy"
|
InsertZoneToViews "$InternalViews" "$ZoneFilesFolder" "$MasterExternDomain" "$MasterExtDomainFile" "$TempFolder" "$DNSSECPolicy"
|
||||||
InsertZoneToViews "$ExternalView" "$ZoneFilesFolder" "$CommunityExternDomain" "$MasterExtDomainFile" "$TempFolder" "$DNSSECPolicy"
|
InsertZoneToViews "$ExternalView" "$ZoneFilesFolder" "$MasterExternDomain" "$MasterExtDomainFile" "$TempFolder" "$DNSSECPolicy"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z "$MasterFile" ]; then
|
if [ -z "$MasterFile" ]; then
|
||||||
MasterFile="$ZoneFilesFolder""db.""$FirstInternal"".""$CommunityDomain"
|
MasterFile="$ZoneFilesFolder""db.""$FirstInternal"".""$MasterDomain"
|
||||||
cp -f "$CachedMasterFile" "$MasterFile"
|
cp -f "$CachedMasterFile" "$MasterFile"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# set shorter TTL for Hoods
|
# set shorter TTL for Hoods
|
||||||
TTLReReExMi="420 360 180 1800 360"
|
TTLReReExMi="420 360 180 1800 360"
|
||||||
|
|
||||||
Hoods="$(GetOwnHoods "$CommunityDomain" "$MasterFile")"
|
Hoods="$(GetOwnHoods "$MasterDomain" "$MasterFile")"
|
||||||
|
|
||||||
for Hood in $Hoods; do
|
for Hood in $Hoods; do
|
||||||
HoodDomain="${Hood%%\#*}"".""$CommunityDomain"
|
HoodDomain="${Hood%%\#*}"".""$MasterDomain"
|
||||||
Subnets="$(echo "${Hood#*\#}" | sed -e 's/#/ /g')"
|
Subnets="$(echo "${Hood#*\#}" | sed -e 's/#/ /g')"
|
||||||
HoodZoneFile="$ZoneFilesFolder""db.""$FirstInternal"".""$HoodDomain"
|
HoodZoneFile="$ZoneFilesFolder""db.""$FirstInternal"".""$HoodDomain"
|
||||||
if [ ! -f "$HoodZoneFile" ]; then
|
if [ ! -f "$HoodZoneFile" ]; then
|
||||||
|
@ -170,7 +176,7 @@ for Hood in $Hoods; do
|
||||||
echo " ""$(echo "$TTLReReExMi" | awk '{print $5}')"" ) ; Negative Cache TTL"
|
echo " ""$(echo "$TTLReReExMi" | awk '{print $5}')"" ) ; Negative Cache TTL"
|
||||||
echo ";"
|
echo ";"
|
||||||
echo "@ IN NS $DNSSCRIPT_SERVER_NAME""."""
|
echo "@ IN NS $DNSSCRIPT_SERVER_NAME""."""
|
||||||
GetOwnGlueRecords "$CommunityDomain" "$HoodDomain" "$MasterFile"
|
GetOwnGlueRecords "$MasterDomain" "$HoodDomain" "$MasterFile"
|
||||||
echo ";"
|
echo ";"
|
||||||
} > "$HoodZoneFile"
|
} > "$HoodZoneFile"
|
||||||
fi
|
fi
|
||||||
|
@ -187,8 +193,8 @@ for Hood in $Hoods; do
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
if [ -n "$CommunityExternDomain" ]; then
|
if [ -n "$MasterExternDomain" ]; then
|
||||||
HoodExternDomain="${Hood%%\#*}"".""$CommunityExternDomain"
|
HoodExternDomain="${Hood%%\#*}"".""$MasterExternDomain"
|
||||||
else
|
else
|
||||||
HoodExternDomain=""
|
HoodExternDomain=""
|
||||||
fi
|
fi
|
||||||
|
@ -209,8 +215,8 @@ for Hood in $Hoods; do
|
||||||
InsertZoneToViews "$ExternalView" "$ZoneFilesFolder" "$HoodDomain" "$ExternFile" "$TempFolder" "$DNSSECPolicy"
|
InsertZoneToViews "$ExternalView" "$ZoneFilesFolder" "$HoodDomain" "$ExternFile" "$TempFolder" "$DNSSECPolicy"
|
||||||
|
|
||||||
if [ -n "$HoodExternDomain" ]; then
|
if [ -n "$HoodExternDomain" ]; then
|
||||||
InsertZoneToViews "$InternalViews" "$ZoneFilesFolder" "${Hood%%\#*}"".""$CommunityExternDomain" "$ExternFile" "$TempFolder" "$DNSSECPolicy"
|
InsertZoneToViews "$InternalViews" "$ZoneFilesFolder" "${Hood%%\#*}"".""$MasterExternDomain" "$ExternFile" "$TempFolder" "$DNSSECPolicy"
|
||||||
InsertZoneToViews "$ExternalView" "$ZoneFilesFolder" "${Hood%%\#*}"".""$CommunityExternDomain" "$ExternFile" "$TempFolder" "$DNSSECPolicy"
|
InsertZoneToViews "$ExternalView" "$ZoneFilesFolder" "${Hood%%\#*}"".""$MasterExternDomain" "$ExternFile" "$TempFolder" "$DNSSECPolicy"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue