Fórum Root.cz
		Hlavní témata => Sítě => Téma založeno: beer  25. 08. 2017, 18:29:55
		
			
			- 
				Ahoj, dá se nějak realtime detekovat změna ip adresy (například teredo?). Například nějak přes systemd, když se změní ip adresa, aby se spustil soubor? Řeším přes cron.d každé 3 minuty, ale není to dostatečné...
Proč se vůbec u teredo mění neustále ip adresa, když IPv4 je stejná?
Řeším kvůli vzdállenému připojení přes ssh a dynamické dns, bohužel tam není veřejná ip adresa, ale za devatero naty, takže nemůžu využít 6to4 nebo 6in4. Poskytovatel sice umí IPv6, ale nechci měnit router, dokud slouží, za router s podporou IPv6.
			 
			
			- 
				Ako to riesis v crone? Mozno nieco bude v logoch (pouzi s inotify). Mne fungovalo nadviazanie spojenia na server, server vratil moju IP adresu a drzal spojenie. Ked spojenie padlo, tak po znovunadviazani som vacsinou dostal inu IP a mohol som reagovat.
Ked ani to nepojde, tak si posielaj pravidelne obojsmerne keep-alive a zhod spojenie, ked to prestane fungovat.
			 
			
			- 
				
V cronu mám:
cat /etc/cron.d/dynv6 
PATH=/sbin:/usr/sbin:/bin:/usr/bin
*/3 * * * * root /opt/miredo-restart.sh
Potom:
cat /opt/miredo-restart.sh
#!/bin/bash
host=neco.dynv6.net
ipv6=$(ip a | grep -s -i -o '200[1-2]\:[a-f0-9\.:]*' | head -n 1)
privatekey=/root/.ssh/id_ed25519
    if ping6 google.com -c3 &>/dev/null ; then
            ssh -6 -i "$privatekey" api@dynv6.com "hosts "$host" set ipv6addr "$ipv6" ipv4addr auto"
            
    else
            killall miredo &>/dev/null
            systemctl stop miredo &>/dev/null
            ip link set teredo down &>/dev/null
            sleep 1 && systemctl start miredo
            sleep 5 && ip -6 route add default dev teredo;
            sleep 5 && ipv6=$(ip a | grep -s -i -o '200[1-2]\:[a-f0-9\.:]*' | head -n 1)
            ssh -6 -i "$privatekey" api@dynv6.com "hosts "$host" set ipv6addr "$ipv6" ipv4addr auto"
            ping6 google.com -c10  -I teredo -i 5 &>/dev/null &
    fi
exit 0
Dále
v /etc/ssh/ssh_config
ServerAliveInterval 300
v /root/.ssh/config
Host *
    ServerAliveInterval 300
    ServerAliveCountMax 2
V /etc/ssh/sshd_config
ClientAliveInterval 300
V /etc/network/if-up.d/miredo
#!/bin/sh
# Reload Miredo when an interface comes up
# /etc/network/if-up.d/miredo
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
/opt/miredo-restart.sh;   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
Dále
cat /etc/miredo.conf 
# Please refer to the miredo.conf(5) man page for details.
InterfaceName   teredo
# Pick a Teredo server:
#ServerAddress   teredo.ipv6.microsoft.com
#ServerAddress   teredo-debian.remlab.net
ServerAddress   teredo.nic.cz
# Some firewall/NAT setups require a specific UDP port number:
#BindPort   3545
Takhle to mám +- na více strojích, často mne to přeruší, i když třeba zrovna píšu (není tam nečinnost).
			 
			
			- 
				LMGTFY https://unix.stackexchange.com/questions/159641/systemd-restart-service-when-ip-address-changed
			
 
			
			- 
				
LMGTFY https://unix.stackexchange.com/questions/159641/systemd-restart-service-when-ip-address-changed (https://unix.stackexchange.com/questions/159641/systemd-restart-service-when-ip-address-changed)
Díky, to by mohlo být pro mne. Teď ještě, abych tomu rozuměl, jak mám nastavit.
systemctl list-units --type=device | grep teredo
sys-devices-virtual-net-teredo.device                                                    loaded active plugged /sys/devices/virtual/net/teredo
sys-subsystem-net-devices-teredo.device                                                  loaded active plugged /sys/subsystem/net/devices/teredo
V příkladu je:
[Unit]
Description=Service on interface %I
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/lib/project/my_script.sh start %I
[Install]
WantedBy=multi-user.target
To to mám přepsat takhle?
[Unit]
Description=Service on interface %I
BindsTo=sys-subsystem-net-devices-teredo.device
After=sys-subsystem-net-devices-teredo.device
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/opt/miredo-restart.sh start %I
[Install]
WantedBy=multi-user.target
Nebo jinak? Je tam vůbec potřeba to After? Jak z toho systemd pozná, že se změnila ip adresa teredo? Nemělo by se přidat ještě např:
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/opt/miredo-restart.sh start %I
Restart=on-abort
Mají to v jiném skriptu zde: https://aur.archlinux.org/packages/dyndns/
Co znamená %I? Je to potřeba? V tom druhém skriptu, to není...