gfw2ipset.sh 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #!/bin/sh
  2. NAME=shadowsocksr
  3. switch_server=$1
  4. uci_get_by_type() {
  5. local ret=$(uci get $NAME.@$1[0].$2 2>/dev/null)
  6. echo ${ret:=$3}
  7. }
  8. if [ -z "$switch_server" ]; then
  9. GLOBAL_SERVER=$(uci_get_by_type global global_server nil)
  10. else
  11. GLOBAL_SERVER=$switch_server
  12. fi
  13. mkdir -p /tmp/dnsmasq.ssr
  14. if [ "$(uci_get_by_type global run_mode router)" == "oversea" ]; then
  15. cp -rf /etc/ssr/oversea_list.conf /tmp/dnsmasq.ssr/
  16. else
  17. cp -rf /etc/ssr/gfw_list.conf /tmp/dnsmasq.ssr/
  18. cp -rf /etc/ssr/gfw_base.conf /tmp/dnsmasq.ssr/
  19. fi
  20. NETFLIX_SERVER=$(uci_get_by_type global netflix_server nil)
  21. [ "$NETFLIX_SERVER" == "same" ] && NETFLIX_SERVER=$GLOBAL_SERVER
  22. if [ "$NETFLIX_SERVER" != "nil" ]; then
  23. netflix() {
  24. if [ -f "/tmp/dnsmasq.ssr/gfw_list.conf" ]; then
  25. for line in $(cat /etc/ssr/netflix.list); do sed -i "/$line/d" /tmp/dnsmasq.ssr/gfw_list.conf; done
  26. for line in $(cat /etc/ssr/netflix.list); do sed -i "/$line/d" /tmp/dnsmasq.ssr/gfw_base.conf; done
  27. fi
  28. awk '!/^$/&&!/^#/{printf("ipset=/%s/'"netflix"'\n",$0)}' /etc/ssr/netflix.list >/tmp/dnsmasq.ssr/netflix_forward.conf
  29. awk '!/^$/&&!/^#/{printf("server=/%s/'"127.0.0.1#$1"'\n",$0)}' /etc/ssr/netflix.list >>/tmp/dnsmasq.ssr/netflix_forward.conf
  30. }
  31. if [ "$NETFLIX_SERVER" != "$GLOBAL_SERVER" ]; then
  32. netflix 5555
  33. else
  34. netflix 5335
  35. fi
  36. else
  37. rm -f /tmp/dnsmasq.ssr/netflix_forward.conf
  38. fi
  39. for line in $(cat /etc/ssr/black.list); do sed -i "/$line/d" /tmp/dnsmasq.ssr/gfw_list.conf; done
  40. for line in $(cat /etc/ssr/black.list); do sed -i "/$line/d" /tmp/dnsmasq.ssr/gfw_base.conf; done
  41. for line in $(cat /etc/ssr/white.list); do sed -i "/$line/d" /tmp/dnsmasq.ssr/gfw_list.conf; done
  42. for line in $(cat /etc/ssr/white.list); do sed -i "/$line/d" /tmp/dnsmasq.ssr/gfw_base.conf; done
  43. for line in $(cat /etc/ssr/deny.list); do sed -i "/$line/d" /tmp/dnsmasq.ssr/gfw_list.conf; done
  44. for line in $(cat /etc/ssr/deny.list); do sed -i "/$line/d" /tmp/dnsmasq.ssr/gfw_base.conf; done
  45. awk '!/^$/&&!/^#/{printf("ipset=/%s/'"blacklist"'\n",$0)}' /etc/ssr/black.list >/tmp/dnsmasq.ssr/blacklist_forward.conf
  46. awk '!/^$/&&!/^#/{printf("server=/%s/'"127.0.0.1#5335"'\n",$0)}' /etc/ssr/black.list >>/tmp/dnsmasq.ssr/blacklist_forward.conf
  47. awk '!/^$/&&!/^#/{printf("ipset=/%s/'"whitelist"'\n",$0)}' /etc/ssr/white.list >/tmp/dnsmasq.ssr/whitelist_forward.conf
  48. awk '!/^$/&&!/^#/{printf("address=/%s/''\n",$0)}' /etc/ssr/deny.list >/tmp/dnsmasq.ssr/denylist.conf
  49. if [ "$(uci_get_by_type global adblock 0)" == "1" ]; then
  50. [ -z "$switch_server" ] && cp -f /etc/ssr/ad.conf /tmp/dnsmasq.ssr/
  51. if [ -f "/tmp/dnsmasq.ssr/ad.conf" ]; then
  52. for line in $(cat /etc/ssr/black.list); do sed -i "/$line/d" /tmp/dnsmasq.ssr/ad.conf; done
  53. for line in $(cat /etc/ssr/white.list); do sed -i "/$line/d" /tmp/dnsmasq.ssr/ad.conf; done
  54. for line in $(cat /etc/ssr/deny.list); do sed -i "/$line/d" /tmp/dnsmasq.ssr/ad.conf; done
  55. for line in $(cat /etc/ssr/netflix.list); do sed -i "/$line/d" /tmp/dnsmasq.ssr/ad.conf; done
  56. fi
  57. else
  58. rm -f /tmp/dnsmasq.ssr/ad.conf
  59. fi