web-dev-qa-db-ja.com

ddclientの更新をホームネットワークに制限する

私はすでに ddclient 3.8.2 OpenDNSでの作業 を持っています。ラップトップで実行しています。私はラップトップを持って旅行するかもしれないので、家にいないときはIPを更新したくありません。

ホームネットワークにいる場合にのみddclientを制限してIPを更新するにはどうすればよいですか?これは選択的に自動化する必要があります。

ホームネットワークにいるかどうかを定義するには、少なくとも2つの方法があります。

  • 私はwifiを使用しており、私の家 wifi SSID名home-ssidであると仮定します。この名前を設定できると仮定します。

  • または、 ルーターのMACアドレスF7:C1:A2:54:4F:71(偽)であると仮定します。この値を設定できると仮定します。このアプローチは、wifiおよび/または有線の両方で機能することを目的としています。

他に何もなければ、ハッキングはuse=cmduse=webの代わりに/etc/ddclient.confを使用することです。そうすれば、家にいない場合は、外部コマンドがインテリジェントに失敗するか、未変更のIPを返す可能性があります。このため、/var/cache/ddclient/ddclient.cacheは最後に認識されたIPをキャッシュすることに注意してください。

完全な実用的なソリューションを提供してください。

4
Acumenus

利用できるカスタムソリューションが2つあります。 1つはWifi SSIDのみを使用し、もう1つはMACアドレス決定を使用します。

どちらのバージョンにも、OpenDNSのddclient構成が機能していることが前提条件です。


両方のステップ1:ddclient自動実行を無効にします。

これを設定するために使用したガイドは、デーモンとして設定した場合は知っていますが、自動化されたddclientを無効にするdisable更新プロセス。

/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つのオプションとその指示のいずれかを使用して、カスタマイズされた自動プロセスをセットアップできます。

ステップ2:使用するアプローチを決定します: WifiのみのSSID検出、またはMACアドレス検出。使用するソリューションに応じて、以下の特定のセクションに従ってください。


Wifiのみ:SSID検出

これは、SSIDベースの検出用のpythonコードそのものです。 WIFI_NETWORK_NAMEに保存されている値に適切なWifi SSIDを入力します。

#!/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に保存します。これをホームディレクトリに保存し、Sudo/opt/にコピーする必要がある場合があります。


Wifiおよびイーサネット: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に保存します。これをホームディレクトリに保存し、Sudo/opt/にコピーする必要がある場合があります。


ステップ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
Thomas Ward

これらのスクリプトには、OpenDNSの作業ddclient設定が必要です。

これは、自宅のWi-Fiネットワーク名を確認するbashバージョンです

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

これは、ホームルーターのMACアドレスを確認するbashバージョンです

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

これらのうちの1つだけが必要です。 3つのスクリプトのいずれかを/opt/home_wifi_ddclient.shに保存し、スクリプトを実行可能にします。

Sudo chmod + x /opt/home_wifi_ddclient.sh

Cronエントリを作成するには、crontabを使用することをお勧めします。

Sudo crontab -e

このコマンドは、ルートユーザーのcrontabファイルが存在する場合はそれを開くか、空の新しいファイルを作成します。ファイルの最後に次の行を追加します。

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

*/5部分は、スクリプトが5分ごとに実行されることを意味します。

Nanoをテキストファイルエディターとして使用する場合は、を押してエディターを終了します。 Ctrl+X。エディターは、変更を保存するようプロンプトを出します。押す Y を押します Enter デフォルトのファイル名を選択します。

お役に立てれば

3
user68186