Portál AbcLinuxu, 5. května 2025 19:22
Vytvořil jsem si ifup script pro dynamické dns. Poraďte prosím proč nefunguje. Umístěný je v /etc/network/if-up.d/dynv6, práva má 755. Xubuntu 16.04 s network managerem a systemd.
#!/bin/bash
# Reload dynv6 when an interface comes up
PATH=/sbin:/usr/sbin:/bin:/usr/bin
ipv6=$(ip a | grep -s -i -o '200<1-2>\:*' | head -n 1)
hostname="mojehostname.dynv6.net"
token="mojeheslo"
curl -m 30 "https://dynv6.com/api/update?hostname=$hostname&ipv6=$ipv6&token=$token"
exit 0
Když ho spustím ručně, tak funguje. Rád bych, aby se spustil vždy, když změním síť.
oprava zdrojového kódu
#!/bin/bash
# Reload dynv6 when an interface comes up
PATH=/sbin:/usr/sbin:/bin:/usr/bin
ipv6=$(ip a | grep -s -i -o '200[1-2]\:[a-f0-9\.:]*' | head -n 1)
hostname="mojehostname.dynv6.net"
token="mojeheslo"
curl -m 30 "https://dynv6.com/api/update?hostname=$hostname&ipv6=$ipv6&token=$token"
exit 0
Reload dynv6 when an interface comes upRekl bych, ze skript dela presne co ma.
Když se přepnu na jinou wifi, tak se nespustí. Možná se spustí, když wifi vypnu a zapnu, nebo když zapojím ethernet a pojedu přes něj a pak se přenu na wifi, ale samotná změna wifi sítě ho nespustí.
To je tam z historických důvodů, použil jsem soubor /etc/network/if-up.d/miredo, přepsal miredo na dynv6, a obsah souboru nahradil za to, co jsem předložil. Zatímco u miredo se při změně wifi sítě reloadne miredo, zde to neplatí.
#! /bin/sh
# Reload Miredo when an interface comes up
set -e
# Don't bother to reload when lo is configured.
if [ "$IFACE" = lo ]; then
exit 0
fi
# Only run from ifup.
if [ "$MODE" != start ]; then
exit 0
fi
# Miredo only cares about (underlying) IPv4 interfaces.
#if [ "$ADDRFAM" != inet ]; then
# exit 0
#fi
# Actually, due to this bug:
# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=475188
# exclude IPX and IPv6 explicitly instead.
if [ "$ADDRFAM" = "ipx" ] || [ "$ADDRFAM" = "inet6" ]; then
ip -6 route add default dev teredo;
ipv6=$(ip a | grep -s -i -o '200[1-2]\:[a-f0-9\.:]*' | head -n 1) && curl -m 30 "https://dynv6.com/api/update?hostname="mojehostname"&ipv6=$ipv6&token="mojeheslo"; exit 0
fi
# Is /usr mounted?
if [ ! -e /usr/sbin/miredo ]; then
exit 0
fi
# Is the miredo service running?
if ! invoke-rc.d --quiet miredo status >/dev/null; then
exit 0
fi
invoke-rc.d --quiet miredo reload || true
Jak to předělat lépe? Ne všude chci používat miredo, tam kde mám nativní ipv6 konektivitu nebo 6to4 to nemá smysl.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.