Ограничьте обновления ddclient домашней сети

Я уже имею ddclient 3.8.2 работ с OpenDNS. Я выполняю его на своем ноутбуке. Я могу путешествовать со своим ноутбуком, и таким образом, я не хочу обновлять IP, если я не домой.

Как я ограничиваю ddclient обновить IP, только если я нахожусь в своей домашней сети? Это выборочно должно быть автоматизировано.

Существует по крайней мере два способа определить, являюсь ли я в своей домашней сети:

  • Предположите, что я использую Wi-Fi, и что мой домашний Wi-Fi имя SSID home-ssid. Предположите, что я могу настроить это имя.

  • С другой стороны, предположите, что MAC-адрес моего маршрутизатора F7:C1:A2:54:4F:71 (фальшивка). Предположите, что я могу настроить это значение. Этот подход предназначен для работы и на Wi-Fi и соединен проводом.

Если ничто иное, взлом мог бы быть должен использовать use=cmd вместо use=web в /etc/ddclient.conf. У меня может затем потенциально быть внешняя команда, разумно приводят к сбою или возвращают неизменный IP, если я не домой. С этой целью отметьте это /var/cache/ddclient/ddclient.cache кэширует последний известный IP.

Предоставьте полное рабочее решение.

4
задан 26 June 2018 в 20:31

2 ответа

У меня есть два пользовательских решения, которые вы можете использовать. Один использует только Wi-Fi SSID, другой использует определение MAC-адреса.

Обе версии имеют обязательное условие наличия у вас рабочей ddclient конфигурации для OpenDNS.


Шаг 1 для обоих: отключить ddclient автоматическое выполнение.

Я знаю, что руководство, которое вы использовали, чтобы настроить его, настроило его как демон, но мы собираемся отключить автоматизированные ddclient процессы обновления.

Редактировать /etc/default/ddclient. Мы собираемся отключить режим демона для запуска и отключить интеграцию dhclient и ipup. Это должно выглядеть примерно так:

# 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"

Теперь отключите службу ddclient, чтобы она не запускалась автоматически. У меня есть только синтаксис 16.04 и более поздних версий, чтобы отключить службу, но есть и другие темы на тему «Как отключить службы».

sudo systemctl disable ddclient

После того, как это будет сделано, вы можете использовать любой из двух вариантов ниже и их инструкции для настройки индивидуальных автоматических процессов.

Шаг 2: Решите, какой подход вы хотите использовать: Обнаружение только SSID Wi-Fi или обнаружение MAC-адреса. В зависимости от того, какое решение вы хотите использовать, следуйте конкретному разделу ниже.


Только Wifi: обнаружение SSID

Это сам код Python для обнаружения на основе SSID. Введите правильный SSID Wifi для значения, хранящегося в 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'))

Сохраните этот код в /opt/py-selective-ddclient.py. Возможно, вам придется сохранить это в своем домашнем каталоге, а затем скопировать в /opt/ с помощью sudo.


Wifi и Ethernet: обнаружение MAC-адреса

Это код Python для этого решения; обновите значение для MAC_ADDRESS_ROUTER соответственно:

#!/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'))

Сохраните этот код в /opt/py-selective-ddclient.py. Возможно, вам придется сохранить это в своем домашнем каталоге, а затем скопировать в /opt/ с помощью sudo.


Шаг 3: Автоматизируйте вызовы кода Python.

Теперь мы должны автоматизировать запуск ddclient или, более конкретно, автоматизировать скрипт Python. Установки по умолчанию ddclient имеют задержку в 300 секунд (5 минут) между проверками обновлений.

Сначала нам нужно сделать исполняемый скрипт Python.

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

Затем начните с создания файла в /etc/cron.d/ со следующим содержимым. Обратите внимание, что вам нужно будет использовать sudo для создания файла.

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

Выполняет ddclient вручную каждые 5 минут. Вы можете изменить часть */5, чтобы она выполнялась с разными интервалами, но я эмулирую настройку ddclient здесь.

Теперь каждые 5 минут будет вызываться ddclient с использованием нашего сценария «оболочки», который выполняет выборочное определение.

4
ответ дан 1 December 2019 в 09:12

Эти сценарии требуют работающей конфигурации ddclient для OpenDNS.

Вот версия Bash, которая проверяет имя домашней Wi-Fi сети

#!/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

Если вы хотите получить менее подробный минимальный код, используйте следующие строки:

#!/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

Здесь Bash версия, которая проверяет MAC-адрес домашнего маршрутизатора

#!/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

Вам нужен только один из них. Сохраните любой из трех сценариев в /opt/home_wifi_ddclient.sh и сделайте его исполняемым:

sudo chmod + x /opt/home_wifi_ddclient.sh

Чтобы создать запись cron, я предлагаю использовать crontab:

sudo crontab -e

Эта команда откроет файл crontab для пользователя root, если он существует, или создаст пустой новый файл. Добавьте следующую строку в конец файла:

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

Часть */5 означает, что скрипт будет запускаться каждые 5 минут.

Если вы используете nano в качестве редактора текстовых файлов, выйдите из редактора, нажав Ctrl + X . Редактор предложит вам сохранить изменения. Нажмите Y , а затем нажмите Enter , чтобы выбрать имя файла по умолчанию.

Надеюсь, это поможет.

3
ответ дан 1 December 2019 в 09:12

Другие вопросы по тегам:

Похожие вопросы: