Ограничить обновления 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.
Пожалуйста, предоставьте полное рабочее решение.
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: Решите, какой подход вы хотите использовать: обнаружение только Wi-Fi SSID или обнаружение MAC-адреса. В зависимости от того, какое решение вы хотите использовать, следуйте конкретному разделу ниже.
Только Wi-Fi: обнаружение 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
будет вызван с использованием нашего скрипта-обёртки, который выполняет выборочное определение.
Эти сценарии требуют рабочего 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
part означает, что скрипт будет запускаться каждые 5 минут.
Если вы используете nano в качестве редактора текстовых файлов, выйдите из редактора, нажав Ctrl + X. Редактор предложит вам сохранить изменения. Нажмите Y, а затем нажмите Enter, чтобы выбрать имя файла по умолчанию.
Надеюсь это поможет