OpenWRT19.07_命令行_重撥wan_重啟路由


OpenWRT19.07_命令行_重撥wan_重啟路由

轉載注明來源: 本文鏈接 來自osnosn的博客,寫於 2020-10-19.

寫OpenWRT的腳本時,需要用到一些重啟命令

以下的命令中的參數"wan",是基於wan口的名稱為"WAN"
ssh 登錄到openwrt上。 執行以下命令:

  • 重啟路由 /sbin/reboot , ssh 連接立刻就會斷開。
  • 重啟所有網絡 /etc/init.d/network restart , 這個命令會導致 ssh 連接卡住(約卡3-5秒),等到網絡重啟之后,ssh才會恢復。本機執行沒有問題。
    • 因為 network restart 先會 ifdown -a 把所有網絡/網卡都停掉,再全部網卡重新啟動。
  • 重撥wan /sbin/ifup wan , 等於ifdown wan && ifup wan。這個命令執行很快,ssh連接不卡,且立即就返回。wan口大約10秒后就換了個IP,對應的wan6也會換IP。
    • 這個 ifup 命令,最終是通過 ubus call network.interface down '{"interface":"wan"}' + ubus call network.interface up '{"interface":"wan"}' 執行的。
    • 顯式的執行 /sbin/ifdown wan && /sbin/ifup wan 也是沒有問題的。
    • 實際使用中,僅執行ifup wan,有時發現ipv4不會變,僅ipv6變。所以為了更換IP,ifdown wan;sleep 2;ifup wan更好。
  • 在web界面Interfaces頁面,點擊WAN對應的 "Restart" 按鍵。其實執行的就是 /sbin/ifup wan
  • 在web界面Interfaces頁面,點擊WAN對應的 "Stop" 按鍵。其實執行的就是 /sbin/ifdown wan
  • 重啟wifi /sbin/wifi down && /sbin/wifi up

實際使用

  • 在Linux中創建一個 key, 用 ssh-keygen -t rsa -b 1024 -f opwrt , 然后把 opwrt.pub 中的內容 copy 到 路由器的 /etc/dropbear/authorized_keys 文件中。
    • shell腳本,重啟路由器就執行 ssh -i opwrt root@192.168.1.1 "/sbin/reboot"
    • shell腳本,重撥wan口就執行 ssh -i opwrt root@192.168.1.1 "/sbin/ifup wan"
    • python3腳本,import subprocess 然后 subprocess.getoutput('ssh -i opwrt root@192.168.1.1 "/sbin/ifup wan" ')
    • 另: 以上的 ssh 可以再帶上一個參數 ssh -o "ConnectTimeout=5"
  • 在路由器中,
    • 寫shell腳本,直接就執行 reboot 或者ifup wan
    • lua 腳本,首先 require("luci.sys") , 然后執行 luci.sys.exec("/sbin/ifup wan")
  • windows 的 bat 批處理
    • 可以考慮用 putty的命令行版 plink.exe 去ssh登錄執行命令。(可以用 puttygen.exe 去生成key,放到authorized_keys中 )

其他1

  • 如果頻繁掉線,可以考慮修改這兩個配置項。(修改方法,自行搜索)
    • network -> interface -> WAN (pppoe) -> EDIT -> Advanced Settings -> LCP echo failure thresholdLCP echo interval
      網絡 -> 接口 -> WAN (pppoe) -> 編輯 -> 高級設置 -> LCP 響應故障閥值LCP 響應間隔
    • /etc/ppp/option 中的 lcp-echo-failurelcp-echo-interval
  • 有時會出現(偶爾),wan連接正常,但無法訪問網絡。可以考慮寫個腳本,定時執行。
    • 思路是:
      先訪問一下百度,看是否正常,再訪問一下搜狗,再訪問一下163。如果三個站都無法訪問,就執行 ifup wan 重撥。
      測試訪問幾個站,自己決定,測試哪幾個站,自己挑選。用shell編程即可,裝個完整版wget,用wget訪問,判斷返回值,就知道訪問是否成功。
      記得設置timeout參數,wget的默認timeout好像是60秒,太長了。
      還要設置重試次數大於2,防止第一次訪問因dns查詢返回太慢而失敗。
    • 以下給出一個例子參考,需要opkg install wget ca-bundle支持。
      然后放入 crontab 中定時執行 */10 * * * * /bin/sh /root/chk_net_redail.sh
#!/bin/sh
# filename: /root/chk_net_redail.sh
# 4=network error/refused/timeout/dns err/
# need "opkg install wget ca-bundle"

count=0
URLs='http://baidu.com  http://163.com  http://www.qq.com  http://sogou.com'
for host in $URLs ; do
    #echo $host
    # wget -t2 這個參數要>=2, 防止第一次訪問dns解析超時,而導致失敗
    wget -q -T3 -t3 --method=HEAD --max-redirect=0 "$host"
    if [ 4 -eq $? ]; then
        echo $(date +%F_%T%z) $host 'error.' >> /root/log.redail
        count=$((count+1))
    else
        break
    fi
done
URL_cnt=$(echo $URLs|wc -w)
if [ $count -ge $URL_cnt ]; then
    echo $(date +%F_%T%z) redail >> /root/log.redail
    ifdown wan; sleep 1; ifup wan
fi

其他2


轉載注明來源: 本文鏈接 來自osnosn的博客.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM