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í...