Was this page helpful?

使用 DDNS 的問題

    對於使用 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:
    1. PEER, 使用 DDNS 的 Trunk Name。
    2. ASTCMD, 系統上 asterisk 指令路徑。
    3. NSCMD, 系統上 nslookup 指令路徑。

    Update:
    2009/8/30

    • 解析 IP 時若系統無 nslookup 指令會使用 ping 指令取代 (此法可用於 embedded system)

    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 服務即可。重啟服務的期間會終止所有通話功能

    技巧提示:

    • 取得主機目前的外部 IP 位址
    EXTIP=$(wget -q -O - http://checkip.dyndns.com|cut -b77-92|tr -d "</body>");echo $EXTIP
    或
    EXTIP=$(wget -q -O - http://www.neorouter.com/ip.php|tr -d "</body>");echo $EXTIP 
    
    • 修改為 static IP 模式時,系統要作 sip reload;若修改為 dynamic IP 模式,系統要作服務重啟。
    • 以上若選擇前者,為了不會對系統原始設計架構有任何影響,將新 IP 寫入一個新檔 sip_externip.conf,然後在 sip.conf 使用 include 方式套用。

    參考詳細資訊

    Was this page helpful?
    標籤 (Edit tags)
    • No tags
    查看第3個(總3個)評論: 查看所有
    Hi,我裝了一套Asterisk(Elastix)在我的主機,但是因為使用動態IP,因此每次IP變動后都要重新設置Asterisk,十分麻煩,有沒有什麼辦法可以讓主機自動檢測IP的變動,并自動更新Asterisk系統內的IP設定值。
    謝謝。
    KK
    發佈時間 21:58, 28 Oct 2009 ()
    此篇的第二段就是有關這,請閱讀參考連結的範例。
    發佈時間 16:31, 29 Oct 2009 ()
    謝謝您,幫了我一個大忙,繞了兩個大圈才弄明白,感恩哦!
    發佈時間 22:28, 23 Nov 2009 ()
    查看第3個(總3個)評論: 查看所有
    您必須 登入 才能發佈評論。
    Powered by MindTouch Core