家に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