|
|
使用 DDNS 的問題從 $1對於使用 DDNS 的 Trunk,當對方主機的 IP 變更後,該 Trunk 總是呈現 UNREACHABLE 狀態,即使 DNS 紀錄已經被更新了。Ans: 將以下程式碼,使用 Cron 定時執行它。此程式在運作時不會對線上的通話有任何影響 檔名:ast-fix-ddns.sh#!/bin/bash
# written by alang
# updated by 2009/8/30
#
PEER="hkpbx" # Peer name which is using dynamic IP
ASTCMD="/usr/sbin/asterisk -rx"
NSCMD="/usr/bin/nslookup" # It is not necessary
STATUS=$($ASTCMD "sip show peer $PEER" | grep Status | cut -f 2 -d ":" | sed 's/ //g')
PEERHOST=$($ASTCMD "sip show peer $PEER" | grep ToHost | cut -f 2 -d ":")
OLDIP=$($ASTCMD "sip show peer $PEER" | grep "Addr->IP" | cut -f 2 -d ":" | awk -F "Port" '{print $1}' | sed 's/ //g')
if $($NSCMD $PEERHOST > /dev/null 2>&1);then
NEWIP=$($NSCMD $PEERHOST | grep Add | grep -v "#" | cut -f 2 -d ' ')
else
NEWIP=$(ping -c1 $PEERHOST 2>/dev/null | sed -n '/\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\)/p' | sed -n '1p' | sed 's/.* (//' | sed 's/).*$//')
fi
if [ $STATUS == "UNREACHABLE" ];then
[ "x$NEWIP" != "x" -a "x$NEWIP" != "x$OLDIP" ] && $ASTCMD "sip reload"
fi
#EOF
Notes: Update:
Cron table 設定每10分鐘執行 #>crontab -e */10 * * * * /root/bin/ast-fix-ddns.sh > /dev/null 2>&1 Notes: 指令的路徑請自行修改。 自己的主機使用 Dynamic IP,只要 IP 變更,所有 SIP Trunk 都會無法連結寫一個 Cron job 定時偵測自己的外部 IP 是否已變更,若有變更時,自動重啟 asterisk 服務即可。重啟服務的期間會終止所有通話功能 技巧提示:
EXTIP=$(wget -q -O - http://checkip.dyndns.com|cut -b77-92|tr -d "</body>");echo $EXTIP
參考詳細資訊
標籤:
|
謝謝。
KK