web-dev-qa-db-fra.com

Restreindre les mises à jour du client sur le réseau domestique

J'ai déjà ddclient 3.8.2 travaillant avec OpenDNS . Je l'exécute sur mon ordinateur portable. Je peux voyager avec mon ordinateur portable et je ne souhaite donc pas mettre à jour l'adresse IP si je ne suis pas chez moi.

Comment puis-je restreindre ddclient à mettre à jour l'adresse IP uniquement si je suis sur mon réseau domestique? Ceci doit être sélectivement automatisé.

Il existe au moins deux façons de définir si je suis sur mon réseau domestique:

  • Supposons que j'utilise le wifi et que mon domicile nom du SSID wifi est home-ssid. Supposons que je puisse configurer ce nom.

  • Sinon, supposons que adresse MAC de mon routeur est F7:C1:A2:54:4F:71 (fake). Supposons que je puisse configurer cette valeur. Cette approche est destinée à fonctionner à la fois en wifi et/ou câblé.

Si rien d'autre, un hack pourrait être d'utiliser use=cmd au lieu de use=web dans /etc/ddclient.conf. Je peux alors potentiellement faire échouer intelligemment la commande externe ou renvoyer une adresse IP inchangée si je ne suis pas chez moi. À cette fin, notez que /var/cache/ddclient/ddclient.cache met en cache la dernière adresse IP connue.

Veuillez fournir une solution de travail complète.

4
Acumenus

J'ai deux solutions personnalisées que vous pourrez peut-être utiliser. L’un utilise uniquement le SSID Wifi, l’autre utilise la détermination de l’adresse MAC.

Les deux versions ont pour condition préalable d'avoir une configuration de travail ddclient pour OpenDNS.


Étape 1 pour les deux: Désactiver ddclient exécutions automatiques.

Je connais le guide que vous avez utilisé pour configurer cela si vous l'aviez configuré en tant que démon, mais nous allons désactiver l'automatisé ddclient mettre à jour les processus.

Éditez /etc/default/ddclient. Nous allons désactiver le mode démon pour commencer et désactiver les intégrations dhclient et ipup. Cela devrait faire ressembler à ceci:

# Configuration for ddclient scripts
# generated from debconf on Tue Jun 26 12:45:45 EDT 2018
#
# /etc/default/ddclient

# Set to "true" if ddclient should be run every time DHCP client ('dhclient'
# from package isc-dhcp-client) updates the systems IP address.
run_dhclient="false"

# Set to "true" if ddclient should be run every time a new ppp connection is
# established. This might be useful, if you are using dial-on-demand.
run_ipup="false"

# Set to "true" if ddclient should run in daemon mode
# If this is changed to true, run_ipup and run_dhclient must be set to false.
run_daemon="false"

# Set the time interval between the updates of the dynamic DNS name in seconds.
# This option only takes effect if the ddclient runs in daemon mode.
daemon_interval="300"

Désactivez maintenant le service ddclient afin qu’il ne puisse pas s’exécuter automatiquement. Je ne dispose que de la syntaxe 16.04 et ultérieure pour désactiver le service, mais il existe d'autres threads sur "Comment désactiver les services".

Sudo systemctl disable ddclient

Ensuite, vous pouvez utiliser l’une des deux options ci-dessous et leurs instructions pour configurer des processus automatiques personnalisés.

Étape 2: Décidez de l’approche que vous souhaitez utiliser: Détection du SSID par Wi-Fi uniquement, ou détection de l’adresse MAC. En fonction de la solution que vous souhaitez utiliser, suivez la section spécifique ci-dessous.


Wifi uniquement: détection de SSID

Il s'agit du code python proprement dit pour une détection basée sur SSID. Indiquez le Wifi SSID approprié pour la valeur stockée dans WIFI_NETWORK_NAME.

#!/usr/bin/python3

import shlex
import subprocess as sp

# Replace 'FillMeIn' in this line with the actual network name.
WIFI_NETWORK_NAME = "FillMeIn"

proc = sp.getoutput(shlex.split('iwconfig'))

if WIFI_NETWORK_NAME in proc:
    sp.call(shlex.split('ddclient -file /etc/ddclient.conf'))

Stockez ce code dans /opt/py-selective-ddclient.py. Vous devrez peut-être stocker ceci dans votre répertoire personnel puis le copier dans /opt/ avec Sudo.


Wifi et Ethernet: détection d'adresse MAC

Il s'agit du code Python de cette solution. mettez à jour la valeur pour MAC_ADDRESS_ROUTER en conséquence:

#!/usr/bin/python3

import shlex
import subprocess as sp

# Replace the fake MAC address below with the MAC address of your router.
# Make sure to use **uppercase letters** if you have letters present.
MAC_ADDRESS_ROUTER = "01:23:45:67:89:AB"

if MAC_ADDRESS_ROUTER in sp.getoutput(shlex.split('iwgetid -ra')).upper():
    sp.call(shlex.split('ddclient -file /etc/ddclient.conf'))

Stockez ce code dans /opt/py-selective-ddclient.py. Vous devrez peut-être stocker ceci dans votre répertoire personnel puis le copier dans /opt/ avec Sudo.


Étape 3: automatiser les appels de code Python.

Maintenant, nous devons automatiser l'exécution de ddclient, ou plus précisément automatiser le script Python. Les réglages par défaut de ddclient ont un délai de 300 secondes (5 minutes) entre les vérifications de mise à jour.

Nous devons d’abord rendre le script Python exécutable.

Sudo chmod +x /opt/py-selective-ddclient.py

Ensuite, commencez par créer un fichier dans /etc/cron.d/ avec le contenu suivant. Notez que vous devrez utiliser Sudo pour créer le fichier.

*/5 * * * *  root  /opt/py-selective-ddclient.py

Ceci exécute la ddclient manuellement, toutes les 5 minutes. Vous pouvez changer la partie */5 pour la faire exécuter à différents intervalles, mais j'émule la configuration de ddclient ici.

Maintenant, toutes les 5 minutes, ddclient sera appelée à l'aide de notre script 'wrapper' qui effectue la détermination sélective.

4
Thomas Ward

Ces scripts nécessitent une configuration ddclient fonctionnelle pour OpenDNS.

Voici une version bash qui vérifie le nom du réseau wifi à domicile

#!/bin/bash 
# Read the name of the Wi-Fi network the computer is conneted to
# If not connected to wifi echo message and quit
# If home network run ddclient
# If any other network quit

# Change FillMeIn to your WiFi network name
HOMEWIFI= FillMeIn 

# Get the current WiFi network name
SSID=$(iwgetid -r)

if   [[ ! $SSID ]]; then        # Not on WiFi
    echo "Could not find any WiFi, exiting..."
Elif [[ $SSID == $HOMEWIFI ]]; then
    echo "We are home! Running ddclient now."
    /usr/sbin/ddclient -file /etc/ddclient.conf
else
    echo "This WiFi is not home! Exiting..."
fi

Si vous voulez un code minimal moins détaillé, utilisez les lignes suivantes:

#!/bin/bash 
# Change FillMeIn to your WiFi network name
HOMEWIFI= FillMeIn 
SSID=$(iwgetid -r)      # -r for SSID
if [[ $SSID == $HOMEWIFI ]]; then
    /usr/sbin/ddclient -file /etc/ddclient.conf
fi

Voici une version bash qui vérifie l'adresse MAC du routeur domestique

#!/bin/bash 
# Change FillMeIn to your router's MAC address
ROUTERMAC= FillMeIn 
$MACA=$(iwgetid -ra)      # -ra for MAC address
if [[ $MACA == $ROUTERMAC ]]; then
    /usr/sbin/ddclient -file /etc/ddclient.conf
fi

Vous n'avez besoin que d'un seul d'entre eux. Stockez l’un des trois scripts dans /opt/home_wifi_ddclient.sh et rendez-le exécutable:

Sudo chmod + x /opt/home_wifi_ddclient.sh

Pour créer l'entrée cron, je suggère d'utiliser crontab:

Sudo crontab -e

Cette commande ouvre le fichier crontab de l'utilisateur root, s'il en existe un, ou crée un nouveau fichier vierge. Ajoutez la ligne suivante à la fin du fichier:

*/5 * * * *  root  /opt/home_wifi_ddclient.sh

La partie */5 signifie que le script sera exécuté toutes les 5 minutes.

Si vous utilisez nano comme éditeur de fichier texte, quittez-le en appuyant sur Ctrl+X. L'éditeur vous invitera à enregistrer les modifications. presse Y puis appuyez sur Enter pour sélectionner le nom de fichier par défaut.

J'espère que cela t'aides

3
user68186