私はすでに ddclient
3.8.2 OpenDNSでの作業 を持っています。ラップトップで実行しています。私はラップトップを持って旅行するかもしれないので、家にいないときはIPを更新したくありません。
ホームネットワークにいる場合にのみddclient
を制限してIPを更新するにはどうすればよいですか?これは選択的に自動化する必要があります。
ホームネットワークにいるかどうかを定義するには、少なくとも2つの方法があります。
私はwifiを使用しており、私の家 wifi SSID名 はhome-ssid
であると仮定します。この名前を設定できると仮定します。
または、 ルーターのMACアドレス がF7:C1:A2:54:4F:71
(偽)であると仮定します。この値を設定できると仮定します。このアプローチは、wifiおよび/または有線の両方で機能することを目的としています。
他に何もなければ、ハッキングはuse=cmd
のuse=web
の代わりに/etc/ddclient.conf
を使用することです。そうすれば、家にいない場合は、外部コマンドがインテリジェントに失敗するか、未変更のIPを返す可能性があります。このため、/var/cache/ddclient/ddclient.cache
は最後に認識されたIPをキャッシュすることに注意してください。
完全な実用的なソリューションを提供してください。
利用できるカスタムソリューションが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アドレス検出。使用するソリューションに応じて、以下の特定のセクションに従ってください。
これは、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/
にコピーする必要がある場合があります。
これは、このソリューションの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
が、選択的決定を行う「ラッパー」スクリプトを使用して呼び出されます。
これらのスクリプトには、OpenDNSの作業ddclient
設定が必要です。
#!/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
#!/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 デフォルトのファイル名を選択します。
お役に立てれば