Assuming the following dns zone configuration for kresin.me: . 1800 IN NS ns.inwx.de. home.kresin.me. 1800 IN NS gw.home.kresin.me. gw.home.kresin.me. 60 IN A 198.51.100.1 Using the example, gw.home.kresin.me is a glue record and used as DDNS record as well. gw.home.kresin.me points to the OpenWrt installation where the ddns-scripts are running. Since ns.inwx.de isn't the authoritative server for home.kresin.me, a query for the the A record of gw.home.kresin.me will be "forwarded" to and replied by the authoritative server 198.51.100.1. If the authoritative server can't be reached, the query times out without any address returned. The only way to get the A record of the glue record is to use bind host in verbose output mode, query ns.inwx.de for gw.home.kresin.me and evaluate the additional section of the response. To my knowledge, only bind host in verbose output mode shows the additional section of the response. Therefore, this features depends on bind host. It is not possible to use the bind host verbose mode for all queries. In verbose mode the "has address" line isn't returned. Grepping for the hostname might fail if the hostname is CNAME. Grepping for the first occurrence of an ip-address is way to error prone, since it could return the ip address of a different record type. Signed-off-by: Mathias Kresin <dev@kresin.me>
217 lines
7.2 KiB
Makefile
Executable file
217 lines
7.2 KiB
Makefile
Executable file
#
|
|
# Copyright (C) 2008-2016 OpenWrt.org
|
|
#
|
|
# This is free software, licensed under the GNU General Public License v2.
|
|
#
|
|
|
|
include $(TOPDIR)/rules.mk
|
|
|
|
PKG_NAME:=ddns-scripts
|
|
# Version == major.minor.patch
|
|
# increase on new functionality (minor) or patches (patch)
|
|
PKG_VERSION:=2.7.1
|
|
# Release == build
|
|
# increase on changes of services files or tld_names.dat
|
|
PKG_RELEASE:=2
|
|
|
|
PKG_LICENSE:=GPL-2.0
|
|
PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>
|
|
|
|
include $(INCLUDE_DIR)/package.mk
|
|
|
|
# no default dependencies
|
|
PKG_DEFAULT_DEPENDS=
|
|
|
|
define Package/$(PKG_NAME)/Default
|
|
SECTION:=net
|
|
CATEGORY:=Network
|
|
SUBMENU:=IP Addresses and Names
|
|
PKGARCH:=all
|
|
endef
|
|
|
|
##### **********************************
|
|
define Package/$(PKG_NAME)
|
|
$(call Package/$(PKG_NAME)/Default)
|
|
TITLE:=Dynamic DNS Client scripts (with IPv6 support)
|
|
endef
|
|
# shown in LuCI package description
|
|
define Package/$(PKG_NAME)/description
|
|
Dynamic DNS Client scripts (with IPv6 support) - Info: http://wiki.openwrt.org/doc/howto/ddns.client
|
|
endef
|
|
# shown in menuconfig <Help>
|
|
define Package/$(PKG_NAME)/config
|
|
help
|
|
A highly configurable set of scripts for doing dynamic dns updates.
|
|
- IPv6 support
|
|
- force communication to IPv4 or IPv6 only
|
|
- DNS server support
|
|
- using BIND host if installed
|
|
- DNS requests via TCP
|
|
- Proxy server support
|
|
- log file support
|
|
- support to run once
|
|
Version: $(PKG_VERSION)-$(PKG_RELEASE)
|
|
Info : http://wiki.openwrt.org/doc/howto/ddns.client
|
|
$(PKG_MAINTAINER)
|
|
endef
|
|
|
|
##### **********************************
|
|
define Package/$(PKG_NAME)_cloudflare
|
|
$(call Package/$(PKG_NAME)/Default)
|
|
TITLE:=DDNS extension for CloudFlare.com
|
|
DEPENDS:=$(PKG_NAME)
|
|
endef
|
|
define Package/$(PKG_NAME)_cloudflare/description
|
|
Dynamic DNS Client scripts extension for CloudFlare.com
|
|
endef
|
|
|
|
##### **********************************
|
|
define Package/$(PKG_NAME)_no-ip_com
|
|
$(call Package/$(PKG_NAME)/Default)
|
|
TITLE:=DDNS extension for No-IP.com
|
|
DEPENDS:=$(PKG_NAME)
|
|
endef
|
|
define Package/$(PKG_NAME)_no-ip_com/description
|
|
Dynamic DNS Client scripts extension for No-IP.com
|
|
endef
|
|
|
|
##### **********************************
|
|
define Package/$(PKG_NAME)_nsupdate
|
|
$(call Package/$(PKG_NAME)/Default)
|
|
TITLE:=DDNS extension using Bind nsupdate
|
|
DEPENDS:=$(PKG_NAME) +bind-client
|
|
endef
|
|
define Package/$(PKG_NAME)_nsupdate/description
|
|
Dynamic DNS Client scripts extension for direct updates using Bind nsupdate
|
|
endef
|
|
define Package/$(PKG_NAME)_nsupdate/config
|
|
help
|
|
The script directly updates a PowerDNS (or maybe bind server) via nsupdate
|
|
from bind-client package. It requires
|
|
"option dns_server" to be set to the server to be used by nsupdate.
|
|
"option username" should be set to the key name and
|
|
"option password" to the base64 encoded shared secret.
|
|
|
|
endef
|
|
|
|
##### **********************************
|
|
define Build/Configure
|
|
endef
|
|
define Build/Compile
|
|
$(CP) ./files $(PKG_BUILD_DIR)
|
|
for FILE in `find $(PKG_BUILD_DIR)/files -type f`; do \
|
|
$(SED) 's/^\s*#/#/' \
|
|
-e '/^#\s\|^#$$$$/d' \
|
|
-e 's/\s#\s.*$$$$//' \
|
|
-e 's/\s*$$$$//' \
|
|
-e '/^\/\/\s/d' \
|
|
-e '/^\s*$$$$/d' $$$$FILE; \
|
|
done
|
|
gzip -f9 $(PKG_BUILD_DIR)/files/tld_names.dat
|
|
endef
|
|
|
|
define Package/$(PKG_NAME)/conffiles
|
|
/etc/config/ddns
|
|
endef
|
|
|
|
##### **********************************
|
|
define Package/$(PKG_NAME)/install
|
|
$(INSTALL_DIR) $(1)/etc/hotplug.d/iface
|
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/files/ddns.hotplug $(1)/etc/hotplug.d/iface/95-ddns
|
|
$(INSTALL_DIR) $(1)/etc/init.d
|
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/files/ddns.init $(1)/etc/init.d/ddns
|
|
$(INSTALL_DIR) $(1)/etc/config
|
|
$(INSTALL_CONF) $(PKG_BUILD_DIR)/files/ddns.config $(1)/etc/config/ddns
|
|
|
|
$(INSTALL_DIR) $(1)/usr/lib/ddns
|
|
$(INSTALL_DATA) $(PKG_BUILD_DIR)/files/services* $(1)/usr/lib/ddns
|
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/files/dynamic_*.sh $(1)/usr/lib/ddns
|
|
endef
|
|
define Package/$(PKG_NAME)/postinst
|
|
#!/bin/sh
|
|
# if run within buildroot exit
|
|
[ -n "$${IPKG_INSTROOT}" ] && exit 0
|
|
|
|
# add new section "ddns" "global" if not exists
|
|
uci -q get ddns.global > /dev/null || uci -q set ddns.global='ddns'
|
|
uci -q get ddns.global.date_format > /dev/null || uci -q set ddns.global.date_format='%F %R'
|
|
uci -q get ddns.global.log_lines > /dev/null || uci -q set ddns.global.log_lines='250'
|
|
uci -q get ddns.global.allow_local_ip > /dev/null || uci -q set ddns.global.allow_local_ip='0'
|
|
uci -q commit ddns
|
|
|
|
# clear LuCI indexcache
|
|
rm -f /tmp/luci-indexcache >/dev/null 2>&1
|
|
|
|
exit 0
|
|
endef
|
|
define Package/$(PKG_NAME)/prerm
|
|
#!/bin/sh
|
|
# if run within buildroot exit
|
|
[ -n "$${IPKG_INSTROOT}" ] && exit 0
|
|
|
|
# stop running scripts
|
|
/etc/init.d/ddns disable
|
|
/etc/init.d/ddns stop
|
|
|
|
# clear LuCI indexcache
|
|
rm -f /tmp/luci-indexcache >/dev/null 2>&1
|
|
|
|
exit 0
|
|
endef
|
|
|
|
##### **********************************
|
|
define Package/$(PKG_NAME)_cloudflare/install
|
|
$(INSTALL_DIR) $(1)/usr/lib/ddns
|
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/files/update_cloudflare_com.sh $(1)/usr/lib/ddns
|
|
$(INSTALL_DATA) $(PKG_BUILD_DIR)/files/tld_names.dat.gz $(1)/usr/lib/ddns
|
|
endef
|
|
define Package/$(PKG_NAME)_cloudflare/postinst
|
|
#!/bin/sh
|
|
echo -e '"cloudflare.com"\t"update_cloudflare_com.sh"' >> $${IPKG_INSTROOT}/usr/lib/ddns/services
|
|
echo -e '"cloudflare.com"\t"update_cloudflare_com.sh"' >> $${IPKG_INSTROOT}/usr/lib/ddns/services_ipv6
|
|
/bin/sed -i '/service_name/s/CloudFlare/cloudflare\.com/g' $${IPKG_INSTROOT}/etc/config/ddns
|
|
endef
|
|
define Package/$(PKG_NAME)_cloudflare/prerm
|
|
#!/bin/sh
|
|
/bin/sed -i '/update_cloudflare_com\.sh/ d' $${IPKG_INSTROOT}/usr/lib/ddns/services
|
|
/bin/sed -i '/update_cloudflare_com\.sh/ d' $${IPKG_INSTROOT}/usr/lib/ddns/services_ipv6
|
|
endef
|
|
|
|
##### **********************************
|
|
define Package/$(PKG_NAME)_no-ip_com/install
|
|
$(INSTALL_DIR) $(1)/usr/lib/ddns
|
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/files/update_no-ip_com.sh $(1)/usr/lib/ddns
|
|
endef
|
|
define Package/$(PKG_NAME)_no-ip_com/postinst
|
|
#!/bin/sh
|
|
echo -e '"no-ip.com"\t"update_no-ip_com.sh"' >> $${IPKG_INSTROOT}/usr/lib/ddns/services
|
|
/bin/sed -i '/service_name/s/NoIP\.com/no-ip\.com/g' $${IPKG_INSTROOT}/etc/config/ddns
|
|
/bin/sed -i '/service_name/s/No-IP\.com/no-ip\.com/g' $${IPKG_INSTROOT}/etc/config/ddns
|
|
endef
|
|
define Package/$(PKG_NAME)_no-ip_com/prerm
|
|
#!/bin/sh
|
|
/bin/sed -i '/update_no-ip_com\.sh/ d' $${IPKG_INSTROOT}/usr/lib/ddns/services
|
|
endef
|
|
|
|
##### **********************************
|
|
define Package/$(PKG_NAME)_nsupdate/install
|
|
$(INSTALL_DIR) $(1)/usr/lib/ddns
|
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/files/update_nsupdate.sh $(1)/usr/lib/ddns
|
|
endef
|
|
define Package/$(PKG_NAME)_nsupdate/postinst
|
|
#!/bin/sh
|
|
echo -e '"bind-nsupdate"\t"update_nsupdate.sh"' >> $${IPKG_INSTROOT}/usr/lib/ddns/services
|
|
echo -e '"bind-nsupdate"\t"update_nsupdate.sh"' >> $${IPKG_INSTROOT}/usr/lib/ddns/services_ipv6
|
|
/bin/sed -i '/service_name/s/Bind-nsupdate/bind-nsupdate/g' $${IPKG_INSTROOT}/etc/config/ddns
|
|
endef
|
|
define Package/$(PKG_NAME)_nsupdate/prerm
|
|
#!/bin/sh
|
|
/bin/sed -i '/update_nsupdate\.sh/ d' $${IPKG_INSTROOT}/usr/lib/ddns/services
|
|
/bin/sed -i '/update_nsupdate\.sh/ d' $${IPKG_INSTROOT}/usr/lib/ddns/services_ipv6
|
|
endef
|
|
|
|
##### **********************************
|
|
$(eval $(call BuildPackage,$(PKG_NAME)))
|
|
$(eval $(call BuildPackage,$(PKG_NAME)_cloudflare))
|
|
$(eval $(call BuildPackage,$(PKG_NAME)_no-ip_com))
|
|
$(eval $(call BuildPackage,$(PKG_NAME)_nsupdate))
|