OpenWrt 10.03-1 RC5 verzióval szenvedek a ddns-scripts csomaggal és a dyndns-sel.A dyndns.com -on átírtam a hosztomhoz tartozó IP-t egy random másik IP-re, ami -elvileg- tekinthető úgy mintha a saját dinamikus IP-m változott volna meg.
A naplófájlból az látszik hogy valamiért ha "$current_ip" != "$registered_ip", akkor is a
/usr/lib/ddns/dynamic_dns_updater.sh
szkript else ágába kerül a vezérlés, és ezért nem megy a frissítés.
Hogyan teszteltem:
Ezeket a fájlokat rakta fel a ddns-scripts:
# opkg files ddns-scripts
Package ddns-scripts (1.0.0-14) is installed on root and has the following files:
/etc/hotplug.d/iface/25-ddns
/usr/lib/ddns/url_escape.sed
/usr/lib/ddns/dynamic_dns_updater.sh
/usr/lib/ddns/services
/etc/config/ddns
/usr/lib/ddns/dynamic_dns_functions.sh
Az
/usr/lib/ddns/dynamic_dns_updater.sh
fájlhoz naplózást adtam hozzá:
@@ -264,11 +264,19 @@
verbose_echo "current system ip = $current_ip"
verbose_echo "registered domain ip = $registered_ip"
+ logger -t dynamic_dns_updater.sh "Running IP check..."
+ logger -t dynamic_dns_updater.sh "Current IP: $current_ip"
+ logger -t dynamic_dns_updater.sh "Registered IP: $registered_ip"
+ logger -t dynamic_dns_updater.sh "Comparing Current IP and Registered IP ..."
+
if [ "$current_ip" != "$registered_ip" ] || [ $force_interval_seconds -lt $time_since_update ]
then
verbose_echo "update necessary, performing update ..."
+ logger -t dynamic_dns_updater.sh "They are different."
+ logger -t dynamic_dns_updater.sh "$( echo "$service_id" | tr '[a-z]' '[A-Z]' ): Update necessary, performing update ..."
+
#do replacement
final_url=$update_url
for option_var in $ALL_OPTION_VARIABLES
@@ -293,6 +301,7 @@
verbose_echo "Update Output:"
verbose_echo "$update_output"
verbose_echo ""
+ logger -t dynamic_dns_updater.sh "Update output for ddns-scripts service $( echo "$service_id" | tr '[a-z]' '[A-Z]' ) is: $update_output."
#save the time of the update
current_time=$(monotonic_time)
@@ -310,6 +319,12 @@
verbose_echo "update unnecessary"
verbose_echo "time since last update = $human_time_since_update hours"
verbose_echo "the time is now $human_time"
+
+ logger -t dynamic_dns_updater.sh "They are equal."
+ logger -t dynamic_dns_updater.sh "$( echo "$service_id" | tr '[a-z]' '[A-Z]' ): Update UNnecessary."
+ logger -t dynamic_dns_updater.sh "Time since last update: $human_time_since_update hours."
+ logger -t dynamic_dns_updater.sh "Time is now: $human_time."
+
fi
#sleep for 10 minutes, then re-check ip && time since last update
A következő a szituáció:
A frissítés működik, ha az
ACTION=ifup INTERFACE=wan /sbin/hotplug-call iface
paranccsal újrainicializálom a WAN interfészt. (Hotplug event.)
Ekkor -gondolom- ez hajtódik végre:
# cat /etc/hotplug.d/iface/25-ddns
#!/bin/sh
. /usr/lib/ddns/dynamic_dns_functions.sh
if [ "$INTERFACE" = "wan" ] && [ "$ACTION" = "ifup" ]
then
start_daemon_for_all_ddns_sections
fi
Normál üzem esetén úgy csinálták az OpenWrt -sek hogy cron helyett a
/bin/sh /usr/lib/ddns/dynamic_dns_updater.sh dyndns_szappantarto 0
elmegy sleep-be
$check_interval_seconds
időre (
/usr/lib/ddns/dynamic_dns_updater.sh
).
Ilyenkor, bár az
nslookup $domainem
már a webes felületen módosított IP-t adja vissza, a frissítés nem történik meg.
A saját IP-met (Current IP) ezzel tudom meg:
# cat /etc/getwanip.sh
#!/bin/sh
wget -qO- ifconfig.me/ip
A router így tudja meg a Registered IP-t (
/usr/lib/ddns/dynamic_dns_updater.sh
):
registered_ip=$(echo $(nslookup "$domain" 2>/dev/null) | grep -o "Name:.*" | grep -o "$ip_regex")
)
Olyan emberek segítségét szeretném kérni, akinek van OpenWrt-je és tesztelni is tud, ugyanis a vonatkozó szkriptek más fájlokat is source -olnak, így nem láttam értelmét hogy ide beilleszek vagy 10 oldalnyi kódot.