gfw2ipset.sh 4.0 KB

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