gfw2ipset.sh 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #!/bin/sh
  2. . $IPKG_INSTROOT/etc/init.d/shadowsocksr
  3. netflix() {
  4. if [ -f "$TMP_DNSMASQ_PATH/gfw_list.conf" ]; then
  5. for line in $(cat /etc/ssrplus/netflix.list); do sed -i "/$line/d" $TMP_DNSMASQ_PATH/gfw_list.conf; done
  6. for line in $(cat /etc/ssrplus/netflix.list); do sed -i "/$line/d" $TMP_DNSMASQ_PATH/gfw_base.conf; done
  7. fi
  8. cat /etc/ssrplus/netflix.list | sed '/^$/d' | sed '/#/d' | sed "/.*/s/.*/server=\/&\/127.0.0.1#$1\nipset=\/&\/netflix/" >$TMP_DNSMASQ_PATH/netflix_forward.conf
  9. }
  10. mkdir -p $TMP_DNSMASQ_PATH
  11. if [ "$(uci_get_by_type global run_mode router)" == "oversea" ]; then
  12. cp -rf /etc/ssrplus/oversea_list.conf $TMP_DNSMASQ_PATH/
  13. else
  14. cp -rf /etc/ssrplus/gfw_list.conf $TMP_DNSMASQ_PATH/
  15. cp -rf /etc/ssrplus/gfw_base.conf $TMP_DNSMASQ_PATH/
  16. fi
  17. if [ "$(uci_get_by_type global netflix_enable 0)" == "1" ]; then
  18. # 只有开启 NetFlix分流 才需要取值
  19. SHUNT_SERVER=$(uci_get_by_type global netflix_server nil)
  20. else
  21. # 没有开启 设置为 nil
  22. SHUNT_SERVER=nil
  23. fi
  24. case "$SHUNT_SERVER" in
  25. nil)
  26. rm -f $TMP_DNSMASQ_PATH/netflix_forward.conf
  27. ;;
  28. $(uci_get_by_type global global_server nil) | $switch_server | same)
  29. netflix $dns_port
  30. ;;
  31. *)
  32. netflix $tmp_shunt_dns_port
  33. ;;
  34. esac
  35. # 此处使用while方式读取 防止 /etc/ssrplus/ 目录下的 black.list white.list deny.list 等2个或多个文件一行中存在空格 比如:# abc.com 而丢失:server
  36. while read line; do sed -i "/$line/d" $TMP_DNSMASQ_PATH/gfw_list.conf; done < /etc/ssrplus/black.list
  37. while read line; do sed -i "/$line/d" $TMP_DNSMASQ_PATH/gfw_base.conf; done < /etc/ssrplus/black.list
  38. while read line; do sed -i "/$line/d" $TMP_DNSMASQ_PATH/gfw_list.conf; done < /etc/ssrplus/white.list
  39. while read line; do sed -i "/$line/d" $TMP_DNSMASQ_PATH/gfw_base.conf; done < /etc/ssrplus/white.list
  40. while read line; do sed -i "/$line/d" $TMP_DNSMASQ_PATH/gfw_list.conf; done < /etc/ssrplus/deny.list
  41. while read line; do sed -i "/$line/d" $TMP_DNSMASQ_PATH/gfw_base.conf; done < /etc/ssrplus/deny.list
  42. # 此处直接使用 cat 因为有 sed '/#/d' 删除了 数据
  43. cat /etc/ssrplus/black.list | sed '/^$/d' | sed '/#/d' | sed "/.*/s/.*/server=\/&\/127.0.0.1#$dns_port\nipset=\/&\/blacklist/" >$TMP_DNSMASQ_PATH/blacklist_forward.conf
  44. cat /etc/ssrplus/white.list | sed '/^$/d' | sed '/#/d' | sed "/.*/s/.*/server=\/&\/127.0.0.1\nipset=\/&\/whitelist/" >$TMP_DNSMASQ_PATH/whitelist_forward.conf
  45. cat /etc/ssrplus/deny.list | sed '/^$/d' | sed '/#/d' | sed "/.*/s/.*/address=\/&\//" >$TMP_DNSMASQ_PATH/denylist.conf
  46. if [ "$(uci_get_by_type global adblock 0)" == "1" ]; then
  47. cp -f /etc/ssrplus/ad.conf $TMP_DNSMASQ_PATH/
  48. if [ -f "$TMP_DNSMASQ_PATH/ad.conf" ]; then
  49. for line in $(cat /etc/ssrplus/black.list); do sed -i "/$line/d" $TMP_DNSMASQ_PATH/ad.conf; done
  50. for line in $(cat /etc/ssrplus/white.list); do sed -i "/$line/d" $TMP_DNSMASQ_PATH/ad.conf; done
  51. for line in $(cat /etc/ssrplus/deny.list); do sed -i "/$line/d" $TMP_DNSMASQ_PATH/ad.conf; done
  52. for line in $(cat /etc/ssrplus/netflix.list); do sed -i "/$line/d" $TMP_DNSMASQ_PATH/ad.conf; done
  53. fi
  54. else
  55. rm -f $TMP_DNSMASQ_PATH/ad.conf
  56. fi