ISPによるIPアドレスの変更をどのように処理しますか?

ISPによるIPアドレスの変更をどのように処理しますか?

家にDebianサーバーがあります。サーバーは私のルーターであり、外部VPNアクセスを提供します。

静的IPアドレスがありません。 ISPが提供するリース時間は2時間です。

私が住んでいる地域にサービスを提供するこのケーブル装置には、少なくとも顧客に2つの異なるネットワークブロックを提供し、Linuxサーバーの再起動後に別のIPアドレスを取得することは完全に異例ではありませんが、一部のISPメンテナンス作業後にこの問題に関してより重要です。

IPアドレスに依存するいくつかのサービスがあり、パブリックIPアドレスは外部(VPN)アクセスおよび内部参照に使用されます。

一部のサービスでは、複数の場所でIPアドレスを変更する必要がないように、FreeDNSの動的DNS名を使用します。

だから、これまで私が考案した最善のアプローチは、dhclient-exitフックからスクリプトを実行することです。このスクリプトは、DHCPがIPを提供/更新した後に呼び出され、IPが変更されるとサービスを再起動します。

/etc/hostsまた、FreeDNS側の変更が私に影響を与える前に、以前のIPで発生する可能性がある問題を解決するために、動的DNS名のIPを変更しました。

私が書いたスクリプトはdhclient-exit-hooks.d次のとおりです。exit_statusすべてがうまくいけばゼロになるはずですdhclient

#!/bin/bash

PATH=$PATH:/usr/bin

if ! [[ -v exit_status ]]
then
   exit 1
fi

if [ $exit_status -eq 0 ]
then
   IP=`ip addr show eth0.101 | grep inet | awk ' { print $2 } ' | cut -f1 -d "/"`
   OLDIP=`awk ' /xxxx.mooo.com/ { print  $1 } '   /etc/hosts`
   if [ $reason = "REBOOT" ] || [ $reason = "BOUND" ] || [ $IP != $OLDIP ] 
   then
      sed -i "s/^[0-9\.]* xxxx.mooo.com/$IP xxxx.mooo.com/g" /etc/hosts
      timeout 60 /opt/bin/iptables.sh
      timeout 60 /etc/init.d/ipsec restart
      timeout 60 /etc/init.d/asterisk restart
      timeout 120 /etc/init.d/bind9 restart
      timeout 60 /usr/bin/wget -O - http://freedns.afraid.org/dynamic/update.php?XXXXXXXXXXXX > /dev/null
   fi
fi

他の投稿でこれを提案したことを知っていますdhclient-exit-hooks.d。しかし、私の質問は、IPアドレスが変更されたときにこれらのサービスを自動的に再起動して設定する方法です。

ベストアンサー1

懸念事項の分離に応じて、ソリューションをさらに簡素化/分割することをお勧めします。

  • スクリプトは/etc/dhcp/dhclient-exit-hooks.d/trigger_on_ip_changeアクションを実行する必要があるかどうかを判断し、アクションを別のスクリプトに延期する必要があります。/usr/local/bin/act_on_ip_change
  • スクリプトは/usr/local/bin/act_on_ip_change必要な変更だけを行う必要があります。

これらの質問を区別することは次のとおりです。

  • dhclientデバッグ中に、システムが実際に何も変更せずに正しく実行されているかどうかを独立してテストできます。
  • IPを更新(したがって緩んでいる)なしで「変更」をテストできます。
  • /usr/local/bin/act_on_ip_change必要に応じて手動で実行できます。
  • こんな部分がわかりやすくなりますね

簡単に言えば、次の項目に含めることをお勧めします/etc/dhcp/dhclient-exit-hooks.d/trigger_on_ip_change_action

# based on /etc/dhcp/dhclient-exit-hooks.d/debug

if [ "$reason" = "BOUND" -a "$old_ip_address" != "$new_ip_address" ]; then
  /usr/local/bin/act_on_ip_change
fi

おすすめ記事