cfst_dnsmasq.sh 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #!/usr/bin/env bash
  2. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
  3. export PATH
  4. # --------------------------------------------------------------
  5. # 项目: CloudflareSpeedTest 自动更新 dnsmasq 配置文件
  6. # 版本: 1.0.1
  7. # 作者: XIU2,Sving1024
  8. # 项目: https://github.com/XIU2/CloudflareSpeedTest
  9. # --------------------------------------------------------------
  10. _UPDATE() {
  11. echo -e "开始测速..."
  12. BESTIP=""
  13. BESTIP_IPV6="::"
  14. # 这里可以自己添加、修改 CFST 的运行参数
  15. ./cfst -o "result_hosts.txt"
  16. # 需要测速 IPv6 请取消注释
  17. #./cfst -o "result_hosts_ipv6.txt" -f ipv6.txt
  18. # 如果需要 "找不到满足条件的 IP 就一直循环测速下去",那么可以将下面的两个 exit 0 改为 _UPDATE 即可
  19. [[ ! -e "result_hosts.txt" ]] && echo "CFST 测速结果 IP 数量为 0,跳过下面步骤..." && exit 0
  20. # 下面这行代码是 "找不到满足条件的 IP 就一直循环测速下去" 才需要的代码
  21. # 考虑到当指定了下载速度下限,但一个满足全部条件的 IP 都没找到时,CFST 就会输出所有 IP 结果
  22. # 因此当你指定 -sl 参数时,需要移除下面这段代码开头的 # 井号注释符,来做文件行数判断(比如下载测速数量:10 个,那么下面的值就设在为 11)
  23. #[[ $(cat result_hosts.txt|wc -l) > 11 ]] && echo "CFST 测速结果没有找到一个完全满足条件的 IP,重新测速..." && _UPDATE
  24. BESTIP=$(sed -n "2,1p" result_hosts.txt | awk -F, '{print $1}')
  25. # 需要测速 IPv6 请取消注释
  26. #BESTIP_IPV6=$(sed -n "2,1p" result_hosts_ipv6.txt | awk -F, '{print $1}')
  27. if [[ -z "${BESTIP}" ]]; then
  28. echo "CFST 测速结果 IP 数量为 0,跳过下面步骤..."
  29. exit 0
  30. fi
  31. echo ${BESTIP} > nowip_hosts.txt
  32. echo -e "最优 IPv4 IP 为 ${BESTIP}\n"
  33. # 需要测速 IPv6 请取消注释
  34. #echo -e "最优 IPv6 IP 为 ${BESTIP_IPV6}\n"
  35. [[ -f cloudflare.conf ]] && rm cloudflare.conf
  36. cat site.conf | while read domain
  37. do
  38. if [[ ${domain:0:1} != "#" && ${domain} != "" ]]; then
  39. echo "address=/${domain}/${BESTIP}" >> "cloudflare.conf"
  40. echo "address=/${domain}/${BESTIP_IPV6}" >> "cloudflare.conf"
  41. fi
  42. done
  43. [[ -f /etc/dnsmasq.d/cloudflare.conf ]] && rm /etc/dnsmasq.d/cloudflare.conf
  44. cp cloudflare.conf /etc/dnsmasq.d/cloudflare.conf
  45. systemctl restart dnsmasq.service
  46. }
  47. _UPDATE