diff --git a/apps/api/urls.py b/apps/api/urls.py index 218db49d93..a6fb86ae31 100644 --- a/apps/api/urls.py +++ b/apps/api/urls.py @@ -12,6 +12,16 @@ views.ClashProxyProviderView.as_view(), name="proxy_providers", ), + path( + "subscribe/clash/direct_domain_rule_set/", + views.ClashDirectDomainRuleSetView.as_view(), + name="direct_domain_rule_set", + ), + path( + "subscribe/clash/direct_ip_rule_set/", + views.ClashDirectIPRuleSetView.as_view(), + name="direct_domain_rule_set", + ), path("shop/", views.purchase, name="purchase"), path("change/theme/", views.change_theme, name="change_theme"), path("checkin/", views.UserCheckInView.as_view(), name="checkin"), diff --git a/apps/api/views.py b/apps/api/views.py index d340f0251e..5138284caf 100644 --- a/apps/api/views.py +++ b/apps/api/views.py @@ -5,6 +5,7 @@ from django.conf import settings from django.contrib.auth.decorators import login_required, permission_required from django.http import HttpResponse, HttpResponseBadRequest, JsonResponse +from django.shortcuts import render from django.utils.decorators import method_decorator from django.views import View from django.views.decorators.csrf import csrf_exempt @@ -22,6 +23,7 @@ get_client_ip, get_current_datetime, handle_json_request, + is_ip_address, traffic_format, ) @@ -63,66 +65,113 @@ def post(self, request): return JsonResponse(data) -class SubscribeView(View): - def get(self, request): - user = None +class UserNodeBaseView(View): + def get_user_and_nodes(self, request): if uid := request.GET.get("uid"): - # check if uid is valid try: uuid.UUID(uid) except ValueError: - return HttpResponseBadRequest("invalid uid") + return None, HttpResponseBadRequest("invalid uid") else: - return HttpResponseBadRequest("uid is required") + return None, HttpResponseBadRequest("uid is required") + user = User.objects.filter(uid=uid).first() if not user: - return HttpResponseBadRequest("user not found") - node_list = m.ProxyNode.get_user_active_nodes(user) - - if protocol := request.GET.get("protocol"): - if protocol in m.ProxyNode.NODE_TYPE_SET: - node_list = node_list.filter(node_type=protocol) + return None, HttpResponseBadRequest("user not found") + node_list = m.ProxyNode.get_user_active_nodes(user) if len(node_list) == 0: - return HttpResponseBadRequest("no active nodes for you") - - sub_client = request.GET.get("client", UserSubManager.CLIENT_CLASH) - sub_info = UserSubManager(user, sub_client, node_list).get_sub_info() - return HttpResponse( - sub_info, - content_type="text/plain; charset=utf-8", - headers=user.get_sub_info_header( - for_android=sub_client != UserSubManager.CLIENT_SHADOWROCKET - ), - ) + return None, HttpResponseBadRequest("no active nodes for you") + + return user, node_list -class ClashProxyProviderView(View): +class SubscribeView(UserNodeBaseView): def get(self, request): - user = None - if uid := request.GET.get("uid"): - # check if uid is valid + user, response_or_nodes = self.get_user_and_nodes(request) + if response_or_nodes is not HttpResponse: + node_list = response_or_nodes + + if protocol := request.GET.get("protocol"): + if protocol in m.ProxyNode.NODE_TYPE_SET: + node_list = node_list.filter(node_type=protocol) + + sub_client = request.GET.get("client") try: - uuid.UUID(uid) - except ValueError: - return HttpResponseBadRequest("invalid uid") + sub_info = UserSubManager(user, node_list, sub_client).get_sub_info() + except ValueError as e: + return HttpResponseBadRequest(str(e)) + return HttpResponse( + sub_info, + content_type="text/plain; charset=utf-8", + headers=user.get_sub_info_header( + for_android=sub_client != UserSubManager.CLIENT_SHADOWROCKET + ), + ) else: - return HttpResponseBadRequest("uid is required") - user = User.objects.filter(uid=uid).first() - if not user: - return HttpResponseBadRequest("user not found") - node_list = m.ProxyNode.get_user_active_nodes(user) - if len(node_list) == 0: - return HttpResponseBadRequest("no active nodes for you") + return response_or_nodes - providers = UserSubManager( - user, request.GET.get("sub_type"), node_list - ).get_clash_proxy_providers() - return HttpResponse( - providers, - content_type="text/plain; charset=utf-8", - ) +class ClashProxyProviderView(UserNodeBaseView): + def get(self, request): + user, response_or_nodes = self.get_user_and_nodes(request) + if response_or_nodes is not HttpResponse: + node_list = response_or_nodes + providers = UserSubManager(user, node_list).get_clash_proxy_providers() + return HttpResponse( + providers, + content_type="text/plain; charset=utf-8", + ) + else: + return response_or_nodes + + +class ClashDirectRuleSetBaseView(UserNodeBaseView): + def get_rule_set(self, node_list, is_ip: bool): + rule_set = set() + for node in node_list: + if node.enable_relay: + for rule in node.get_enabled_relay_rules(): + if is_ip == is_ip_address(rule.relay_host): + rule_set.add(rule.relay_host) + if node.enable_direct: + if is_ip == is_ip_address(node.server): + rule_set.add(node.server) + return sorted(rule_set) + + +class ClashDirectDomainRuleSetView(ClashDirectRuleSetBaseView): + def get(self, request): + _, response_or_nodes = self.get_user_and_nodes(request) + if response_or_nodes is not HttpResponse: + node_list = response_or_nodes + domain_list = self.get_rule_set(node_list, is_ip=False) + context = {"domain_list": domain_list} + return render( + request, + "clash/direct_domain.yaml", + context=context, + content_type="text/plain; charset=utf-8", + ) + else: + return response_or_nodes + + +class ClashDirectIPRuleSetView(ClashDirectRuleSetBaseView): + def get(self, request): + _, response_or_nodes = self.get_user_and_nodes(request) + if response_or_nodes is not HttpResponse: + node_list = response_or_nodes + ip_list = self.get_rule_set(node_list, is_ip=True) + context = {"ip_list": ip_list} + return render( + request, + "clash/direct_ip.yaml", + context=context, + content_type="text/plain; charset=utf-8", + ) + else: + return response_or_nodes class UserRefChartView(View): diff --git a/apps/sspanel/models.py b/apps/sspanel/models.py index 67e05d9e42..6d27677036 100644 --- a/apps/sspanel/models.py +++ b/apps/sspanel/models.py @@ -255,6 +255,22 @@ def clash_proxy_provider_endpoint(self): + f"/api/subscribe/clash/proxy_providers/?{urlencode(params)}" ) + @property + def direct_ip_rule_set_endpoint(self): + params = {"uid": self.uid} + return ( + settings.SITE_HOST + + f"/api/subscribe/clash/direct_ip_rule_set/?{urlencode(params)}" + ) + + @property + def direct_domain_rule_set_endpoint(self): + params = {"uid": self.uid} + return ( + settings.SITE_HOST + + f"/api/subscribe/clash/direct_domain_rule_set/?{urlencode(params)}" + ) + def update_proxy_config_from_dict(self, data): clean_fields = ["proxy_password"] for k, v in data.items(): diff --git a/apps/sub.py b/apps/sub.py index 49d0a3f441..3314a596aa 100644 --- a/apps/sub.py +++ b/apps/sub.py @@ -3,7 +3,7 @@ from django.conf import settings from django.template.loader import render_to_string -from apps.utils import get_clash_direct_rule +from apps.sspanel.models import User class UserSubManager: @@ -11,31 +11,39 @@ class UserSubManager: CLIENT_SHADOWROCKET = "shadowrocket" CLIENT_CLASH = "clash" - CLIENT_CLASH_PREMIUM = "clash_premium" CLIENT_CLASH_PROXY_PROVIDER = "clash_proxy_provider" CLIENT_SET = { CLIENT_SHADOWROCKET, CLIENT_CLASH, - CLIENT_CLASH_PREMIUM, CLIENT_CLASH_PROXY_PROVIDER, } - def __init__(self, user, sub_client, node_list): + def __init__(self, user, node_list, sub_client=CLIENT_CLASH): self.user = user - if sub_client not in self.CLIENT_SET: - sub_client = self.CLIENT_CLASH_PROXY_PROVIDER - self.sub_client = sub_client + if sub_client in self.CLIENT_SET: + self.sub_client = sub_client + elif not sub_client or "clash" in sub_client: + self.sub_client = self.CLIENT_CLASH + else: + raise ValueError(f"sub_client {sub_client} not support") + self.node_list = node_list def _get_clash_sub_yaml(self): + user: User = self.user + user_proxy_provider_url = user.clash_proxy_provider_endpoint + direct_ip_rule_set_url = user.direct_ip_rule_set_endpoint + direct_domain_rule_set_url = user.direct_domain_rule_set_endpoint + return render_to_string( "clash/main.yaml", { "sub_client": self.sub_client, "provider_name": settings.SITE_TITLE, - "proxy_provider_url": self.user.clash_proxy_provider_endpoint, - "direct_rules": self.get_clash_direct_rules(), + "proxy_provider_url": user_proxy_provider_url, + "direct_ip_rule_set_url": direct_ip_rule_set_url, + "direct_domain_rule_set_url": direct_domain_rule_set_url, }, ) @@ -60,12 +68,14 @@ def _get_shadowrocket_sub_links(self): return sub_links def get_sub_info(self): - if self.sub_client in [self.CLIENT_CLASH, self.CLIENT_CLASH_PREMIUM]: + if self.sub_client == self.CLIENT_CLASH: return self._get_clash_sub_yaml() elif self.sub_client == self.CLIENT_SHADOWROCKET: return self._get_shadowrocket_sub_links() - else: + elif self.sub_client == self.CLIENT_CLASH_PROXY_PROVIDER: return self.get_clash_proxy_providers() + else: + raise ValueError(f"sub_client {self.sub_client} not support") def get_clash_proxy_providers(self): """todo support multi provider group""" @@ -95,13 +105,3 @@ def get_clash_proxy_providers(self): "clash/providers.yaml", {"nodes": sorted(node_configs, key=lambda x: x["name"])}, ) - - def get_clash_direct_rules(self): - rules = set() - for node in self.node_list: - if node.enable_relay: - for rule in node.get_enabled_relay_rules(): - rules.add(get_clash_direct_rule(rule.relay_host)) - if node.enable_direct: - rules.add(get_clash_direct_rule(node.server)) - return sorted(list(rules)) diff --git a/apps/utils.py b/apps/utils.py index 6d1574e0db..a6987a5ad9 100644 --- a/apps/utils.py +++ b/apps/utils.py @@ -96,14 +96,9 @@ def get_client_ip(request): return request.META.get("REMOTE_ADDR") -def get_clash_direct_rule(addr): +def is_ip_address(addr): ip_pattern = r"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b" - - # 检查输入字符串是否匹配 IP 地址正则表达式 - if re.match(ip_pattern, addr): - return f"IP-CIDR,{addr}/32,DIRECT" - else: - return f"DOMAIN,{addr},DIRECT" + return bool(re.match(ip_pattern, addr)) class BytesToGigabytesField(forms.CharField): diff --git a/templates/clash/direct_domain.yaml b/templates/clash/direct_domain.yaml new file mode 100644 index 0000000000..9aea0f7215 --- /dev/null +++ b/templates/clash/direct_domain.yaml @@ -0,0 +1,5 @@ +payload: + - "clash.razord.top" + - "yacd.haishan.me" + {% autoescape off %}{% for doamin in domain_list %} + - '{{ doamin }}'{% endfor %}{% endautoescape %} diff --git a/templates/clash/direct_ip.yaml b/templates/clash/direct_ip.yaml new file mode 100644 index 0000000000..ad505c6321 --- /dev/null +++ b/templates/clash/direct_ip.yaml @@ -0,0 +1,3 @@ +payload: +{% autoescape off %}{% for ip in ip_list %} +- '{{ ip }}/32'{% endfor %}{% endautoescape %} diff --git a/templates/clash/main.yaml b/templates/clash/main.yaml index 8a72b45672..696777a4c4 100644 --- a/templates/clash/main.yaml +++ b/templates/clash/main.yaml @@ -1,3 +1,5 @@ +# see https://github.com/Loyalsoldier/clash-rules + mode: rule port: 7890 socks-port: 7891 @@ -5,8 +7,22 @@ allow-lan: true log-level: info external-controller: 0.0.0.0:9090 +proxy-providers: + {{ provider_name }}: + type: http + url: {{ proxy_provider_url }} + interval: 3600 + path: ./providers/{{ provider_name }}.yaml + health-check: + enable: true + interval: 300 + tolerance: 150 + lazy: true + url: http://www.gstatic.com/generate_204 + + proxy-groups: - - name: Proxy + - name: PROXY type: select proxies: - auto @@ -26,25 +42,133 @@ proxy-groups: type: select proxies: - DIRECT - - Proxy + - PROXY -proxy-providers: - {{ provider_name }}: +rule-providers: + reject: type: http - url: {{ proxy_provider_url }} - interval: 3600 - path: ./providers/{{ provider_name }}.yaml - health-check: - enable: true - interval: 300 - tolerance: 150 - lazy: true - url: http://www.gstatic.com/generate_204 + behavior: domain + url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt" + path: ./ruleset/reject.yaml + interval: 86400 + icloud: + type: http + behavior: domain + url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/icloud.txt" + path: ./ruleset/icloud.yaml + interval: 86400 + apple: + type: http + behavior: domain + url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/apple.txt" + path: ./ruleset/apple.yaml + interval: 86400 + proxy: + type: http + behavior: domain + url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt" + path: ./ruleset/proxy.yaml + interval: 86400 + direct: + type: http + behavior: domain + url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt" + path: ./ruleset/direct.yaml + interval: 86400 + private: + type: http + behavior: domain + url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/private.txt" + path: ./ruleset/private.yaml + interval: 86400 + gfw: + type: http + behavior: domain + url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/gfw.txt" + path: ./ruleset/gfw.yaml + interval: 86400 + tld-not-cn: + type: http + behavior: domain + url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/tld-not-cn.txt" + path: ./ruleset/tld-not-cn.yaml + interval: 86400 + telegramcidr: + type: http + behavior: ipcidr + url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/telegramcidr.txt" + path: ./ruleset/telegramcidr.yaml + interval: 86400 + cncidr: + type: http + behavior: ipcidr + url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/cncidr.txt" + path: ./ruleset/cncidr.yaml + interval: 86400 + lancidr: + type: http + behavior: ipcidr + url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/lancidr.txt" + path: ./ruleset/lancidr.yaml + interval: 86400 + applications: + type: http + behavior: classical + url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/applications.txt" + path: ./ruleset/applications.yaml + interval: 86400 + + + # netflix https://github.com/snapei/clash-pro-rules/ + netflix: + type: http + behavior: domain + url: "https://cdn.jsdelivr.net/gh/snapei/clash-pro-rules@release/netflix.txt" + path: ./ruleset/netflix.yaml + interval: 86400 + netflixcidr: + type: http + behavior: ipcidr + url: "https://cdn.jsdelivr.net/gh/snapei/clash-pro-rules@release/netflixcidr.txt" + path: ./ruleset/netflixcidr.yaml + interval: 86400 + + # proxy nodes + direct_domain_list: + type: http + behavior: domain + url: "{{ direct_domain_rule_set_url }}" + path: ./ruleset/direct_domain_list.yaml + interval: 86400 + direct_ip_list: + type: http + behavior: ipcidr + url: "{{ direct_ip_rule_set_url }}" + path: ./ruleset/direct_ip_list.yaml + interval: 86400 -{% if sub_client == "clash" %} -{% include "clash/rules.yaml" %} -{% else %} -{% include "clash/rule_sets.yaml" %} -{% endif %} +rules: + # OPENAI check https://github.com/v2fly/domain-list-community/blob/master/data/openai + - DOMAIN,chatgpt.com,PROXY + - DOMAIN,oaistatic.com,PROXY + - DOMAIN,oaiusercontent.com,PROXY + - DOMAIN,openai.com,PROXY + - DOMAIN-KEYWORD,openai,PROXY + - DOMAIN-KEYWORD,openaiapi,PROXY + - RULE-SET,reject,REJECT + - RULE-SET,direct_domain_list,DIRECT + - RULE-SET,direct_ip_list,DIRECT + - RULE-SET,applications,DIRECT + - RULE-SET,private,DIRECT + - RULE-SET,icloud,DIRECT + - RULE-SET,apple,DIRECT + - RULE-SET,direct,DIRECT + - RULE-SET,lancidr,DIRECT + - RULE-SET,cncidr,DIRECT + - RULE-SET,proxy,PROXY + - RULE-SET,telegramcidr,PROXY + - GEOIP,LAN,DIRECT + - GEOIP,CN,DIRECT + - MATCH,Final diff --git a/templates/clash/providers.yaml b/templates/clash/providers.yaml index 3771476b17..8b2298ecb5 100644 --- a/templates/clash/providers.yaml +++ b/templates/clash/providers.yaml @@ -3,4 +3,3 @@ proxies: {% for node in nodes %} - {{ node.clash_config }} {% endfor %} {% endautoescape%} - diff --git a/templates/clash/rule_sets.yaml b/templates/clash/rule_sets.yaml deleted file mode 100644 index 8f8929cf10..0000000000 --- a/templates/clash/rule_sets.yaml +++ /dev/null @@ -1,109 +0,0 @@ -# see https://github.com/Loyalsoldier/clash-rules -# need replace PROXY to Proxy - -rule-providers: - reject: - type: http - behavior: domain - url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt" - path: ./ruleset/reject.yaml - interval: 86400 - - icloud: - type: http - behavior: domain - url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/icloud.txt" - path: ./ruleset/icloud.yaml - interval: 86400 - - apple: - type: http - behavior: domain - url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/apple.txt" - path: ./ruleset/apple.yaml - interval: 86400 - - proxy: - type: http - behavior: domain - url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt" - path: ./ruleset/proxy.yaml - interval: 86400 - - direct: - type: http - behavior: domain - url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt" - path: ./ruleset/direct.yaml - interval: 86400 - - private: - type: http - behavior: domain - url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/private.txt" - path: ./ruleset/private.yaml - interval: 86400 - - gfw: - type: http - behavior: domain - url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/gfw.txt" - path: ./ruleset/gfw.yaml - interval: 86400 - - tld-not-cn: - type: http - behavior: domain - url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/tld-not-cn.txt" - path: ./ruleset/tld-not-cn.yaml - interval: 86400 - - telegramcidr: - type: http - behavior: ipcidr - url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/telegramcidr.txt" - path: ./ruleset/telegramcidr.yaml - interval: 86400 - - cncidr: - type: http - behavior: ipcidr - url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/cncidr.txt" - path: ./ruleset/cncidr.yaml - interval: 86400 - - lancidr: - type: http - behavior: ipcidr - url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/lancidr.txt" - path: ./ruleset/lancidr.yaml - interval: 86400 - - applications: - type: http - behavior: classical - url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/applications.txt" - path: ./ruleset/applications.yaml - interval: 86400 - -rules: - # Proxy Node DIRECT -{% autoescape off %} -{% for rule in direct_rules %} - {{ rule }} -{% endfor %} -{% endautoescape%} - - DOMAIN,clash.razord.top,DIRECT - - DOMAIN,yacd.haishan.me,DIRECT - - RULE-SET,applications,DIRECT - - RULE-SET,private,DIRECT - - RULE-SET,reject,REJECT - - RULE-SET,icloud,DIRECT - - RULE-SET,apple,DIRECT - - RULE-SET,proxy,Proxy - - RULE-SET,direct,DIRECT - - RULE-SET,lancidr,DIRECT - - RULE-SET,cncidr,DIRECT - - RULE-SET,telegramcidr,Proxy - - GEOIP,LAN,DIRECT - - GEOIP,CN,DIRECT - - MATCH,Final diff --git a/templates/clash/rules.yaml b/templates/clash/rules.yaml deleted file mode 100644 index 462375e9ad..0000000000 --- a/templates/clash/rules.yaml +++ /dev/null @@ -1,519 +0,0 @@ -rules: - # 自定义规则 - ## 您可以在此处插入您补充的自定义规则(请注意保持缩进) - - # Proxy Node DIRECT -{% autoescape off %} -{% for rule in direct_rules %} - {{ rule }} -{% endfor %} -{% endautoescape%} - - # Apple - - DOMAIN,safebrowsing.urlsec.qq.com,DIRECT # 如果您并不信任此服务提供商或防止其下载消耗过多带宽资源,可以进入 Safari 设置,关闭 Fraudulent Website Warning 功能,并使用 REJECT 策略。 - - DOMAIN,safebrowsing.googleapis.com,DIRECT # 如果您并不信任此服务提供商或防止其下载消耗过多带宽资源,可以进入 Safari 设置,关闭 Fraudulent Website Warning 功能,并使用 REJECT 策略。 - - DOMAIN,developer.apple.com,Proxy - - DOMAIN-SUFFIX,digicert.com,Proxy - - DOMAIN,ocsp.apple.com,Proxy - - DOMAIN,ocsp.comodoca.com,Proxy - - DOMAIN,ocsp.usertrust.com,Proxy - - DOMAIN,ocsp.sectigo.com,Proxy - - DOMAIN,ocsp.verisign.net,Proxy - - DOMAIN-SUFFIX,apple-dns.net,Proxy - - DOMAIN,testflight.apple.com,Proxy - - DOMAIN,sandbox.itunes.apple.com,Proxy - - DOMAIN,itunes.apple.com,Proxy - - DOMAIN-SUFFIX,apps.apple.com,Proxy - - DOMAIN-SUFFIX,blobstore.apple.com,Proxy - - DOMAIN,cvws.icloud-content.com,Proxy - - DOMAIN-SUFFIX,mzstatic.com,DIRECT - - DOMAIN-SUFFIX,itunes.apple.com,DIRECT - - DOMAIN-SUFFIX,icloud.com,DIRECT - - DOMAIN-SUFFIX,icloud-content.com,DIRECT - - DOMAIN-SUFFIX,me.com,DIRECT - - DOMAIN-SUFFIX,aaplimg.com,DIRECT - - DOMAIN-SUFFIX,cdn20.com,DIRECT - - DOMAIN-SUFFIX,cdn-apple.com,DIRECT - - DOMAIN-SUFFIX,akadns.net,DIRECT - - DOMAIN-SUFFIX,akamaiedge.net,DIRECT - - DOMAIN-SUFFIX,edgekey.net,DIRECT - - DOMAIN-SUFFIX,mwcloudcdn.com,DIRECT - - DOMAIN-SUFFIX,mwcname.com,DIRECT - - DOMAIN-SUFFIX,apple.com,DIRECT - - DOMAIN-SUFFIX,apple-cloudkit.com,DIRECT - - DOMAIN-SUFFIX,apple-mapkit.com,DIRECT - - DOMAIN,e.crashlytics.com,REJECT - - # 国内网站 - - DOMAIN-SUFFIX,cn,DIRECT - - DOMAIN-KEYWORD,-cn,DIRECT - - DOMAIN-SUFFIX,126.com,DIRECT - - DOMAIN-SUFFIX,126.net,DIRECT - - DOMAIN-SUFFIX,127.net,DIRECT - - DOMAIN-SUFFIX,163.com,DIRECT - - DOMAIN-SUFFIX,360buyimg.com,DIRECT - - DOMAIN-SUFFIX,36kr.com,DIRECT - - DOMAIN-SUFFIX,acfun.tv,DIRECT - - DOMAIN-SUFFIX,air-matters.com,DIRECT - - DOMAIN-SUFFIX,aixifan.com,DIRECT - - DOMAIN-KEYWORD,alicdn,DIRECT - - DOMAIN-KEYWORD,alipay,DIRECT - - DOMAIN-KEYWORD,taobao,DIRECT - - DOMAIN-SUFFIX,amap.com,DIRECT - - DOMAIN-SUFFIX,autonavi.com,DIRECT - - DOMAIN-KEYWORD,baidu,DIRECT - - DOMAIN-SUFFIX,bdimg.com,DIRECT - - DOMAIN-SUFFIX,bdstatic.com,DIRECT - - DOMAIN-SUFFIX,bilibili.com,DIRECT - - DOMAIN-SUFFIX,bilivideo.com,DIRECT - - DOMAIN-SUFFIX,caiyunapp.com,DIRECT - - DOMAIN-SUFFIX,clouddn.com,DIRECT - - DOMAIN-SUFFIX,cnbeta.com,DIRECT - - DOMAIN-SUFFIX,cnbetacdn.com,DIRECT - - DOMAIN-SUFFIX,cootekservice.com,DIRECT - - DOMAIN-SUFFIX,csdn.net,DIRECT - - DOMAIN-SUFFIX,ctrip.com,DIRECT - - DOMAIN-SUFFIX,dgtle.com,DIRECT - - DOMAIN-SUFFIX,dianping.com,DIRECT - - DOMAIN-SUFFIX,douban.com,DIRECT - - DOMAIN-SUFFIX,doubanio.com,DIRECT - - DOMAIN-SUFFIX,duokan.com,DIRECT - - DOMAIN-SUFFIX,easou.com,DIRECT - - DOMAIN-SUFFIX,ele.me,DIRECT - - DOMAIN-SUFFIX,feng.com,DIRECT - - DOMAIN-SUFFIX,fir.im,DIRECT - - DOMAIN-SUFFIX,frdic.com,DIRECT - - DOMAIN-SUFFIX,g-cores.com,DIRECT - - DOMAIN-SUFFIX,godic.net,DIRECT - - DOMAIN-SUFFIX,gtimg.com,DIRECT - - DOMAIN,cdn.hockeyapp.net,DIRECT - - DOMAIN-SUFFIX,hongxiu.com,DIRECT - - DOMAIN-SUFFIX,hxcdn.net,DIRECT - - DOMAIN-SUFFIX,iciba.com,DIRECT - - DOMAIN-SUFFIX,ifeng.com,DIRECT - - DOMAIN-SUFFIX,ifengimg.com,DIRECT - - DOMAIN-SUFFIX,ipip.net,DIRECT - - DOMAIN-SUFFIX,iqiyi.com,DIRECT - - DOMAIN-SUFFIX,jd.com,DIRECT - - DOMAIN-SUFFIX,jianshu.com,DIRECT - - DOMAIN-SUFFIX,knewone.com,DIRECT - - DOMAIN-SUFFIX,le.com,DIRECT - - DOMAIN-SUFFIX,lecloud.com,DIRECT - - DOMAIN-SUFFIX,lemicp.com,DIRECT - - DOMAIN-SUFFIX,licdn.com,DIRECT - - DOMAIN-SUFFIX,linkedin.com,DIRECT - - DOMAIN-SUFFIX,luoo.net,DIRECT - - DOMAIN-SUFFIX,meituan.com,DIRECT - - DOMAIN-SUFFIX,meituan.net,DIRECT - - DOMAIN-SUFFIX,mi.com,DIRECT - - DOMAIN-SUFFIX,miaopai.com,DIRECT - - DOMAIN-SUFFIX,microsoft.com,DIRECT - - DOMAIN-SUFFIX,microsoftonline.com,DIRECT - - DOMAIN-SUFFIX,miui.com,DIRECT - - DOMAIN-SUFFIX,miwifi.com,DIRECT - - DOMAIN-SUFFIX,mob.com,DIRECT - - DOMAIN-SUFFIX,netease.com,DIRECT - - DOMAIN-SUFFIX,office.com,DIRECT - - DOMAIN-SUFFIX,office365.com,DIRECT - - DOMAIN-KEYWORD,officecdn,DIRECT - - DOMAIN-SUFFIX,oschina.net,DIRECT - - DOMAIN-SUFFIX,ppsimg.com,DIRECT - - DOMAIN-SUFFIX,pstatp.com,DIRECT - - DOMAIN-SUFFIX,qcloud.com,DIRECT - - DOMAIN-SUFFIX,qdaily.com,DIRECT - - DOMAIN-SUFFIX,qdmm.com,DIRECT - - DOMAIN-SUFFIX,qhimg.com,DIRECT - - DOMAIN-SUFFIX,qhres.com,DIRECT - - DOMAIN-SUFFIX,qidian.com,DIRECT - - DOMAIN-SUFFIX,qihucdn.com,DIRECT - - DOMAIN-SUFFIX,qiniu.com,DIRECT - - DOMAIN-SUFFIX,qiniucdn.com,DIRECT - - DOMAIN-SUFFIX,qiyipic.com,DIRECT - - DOMAIN-SUFFIX,qq.com,DIRECT - - DOMAIN-SUFFIX,qqurl.com,DIRECT - - DOMAIN-SUFFIX,rarbg.to,DIRECT - - DOMAIN-SUFFIX,ruguoapp.com,DIRECT - - DOMAIN-SUFFIX,segmentfault.com,DIRECT - - DOMAIN-SUFFIX,sinaapp.com,DIRECT - - DOMAIN-SUFFIX,smzdm.com,DIRECT - - DOMAIN-SUFFIX,snapdrop.net,DIRECT - - DOMAIN-SUFFIX,sogou.com,DIRECT - - DOMAIN-SUFFIX,sogoucdn.com,DIRECT - - DOMAIN-SUFFIX,sohu.com,DIRECT - - DOMAIN-SUFFIX,soku.com,DIRECT - - DOMAIN-SUFFIX,speedtest.net,DIRECT - - DOMAIN-SUFFIX,sspai.com,DIRECT - - DOMAIN-SUFFIX,suning.com,DIRECT - - DOMAIN-SUFFIX,taobao.com,DIRECT - - DOMAIN-SUFFIX,tencent.com,DIRECT - - DOMAIN-SUFFIX,tenpay.com,DIRECT - - DOMAIN-SUFFIX,tianyancha.com,DIRECT - - DOMAIN-SUFFIX,tmall.com,DIRECT - - DOMAIN-SUFFIX,tudou.com,DIRECT - - DOMAIN-SUFFIX,umetrip.com,DIRECT - - DOMAIN-SUFFIX,upaiyun.com,DIRECT - - DOMAIN-SUFFIX,upyun.com,DIRECT - - DOMAIN-SUFFIX,veryzhun.com,DIRECT - - DOMAIN-SUFFIX,weather.com,DIRECT - - DOMAIN-SUFFIX,weibo.com,DIRECT - - DOMAIN-SUFFIX,xiami.com,DIRECT - - DOMAIN-SUFFIX,xiami.net,DIRECT - - DOMAIN-SUFFIX,xiaomicp.com,DIRECT - - DOMAIN-SUFFIX,ximalaya.com,DIRECT - - DOMAIN-SUFFIX,xmcdn.com,DIRECT - - DOMAIN-SUFFIX,xunlei.com,DIRECT - - DOMAIN-SUFFIX,yhd.com,DIRECT - - DOMAIN-SUFFIX,yihaodianimg.com,DIRECT - - DOMAIN-SUFFIX,yinxiang.com,DIRECT - - DOMAIN-SUFFIX,ykimg.com,DIRECT - - DOMAIN-SUFFIX,youdao.com,DIRECT - - DOMAIN-SUFFIX,youku.com,DIRECT - - DOMAIN-SUFFIX,zealer.com,DIRECT - - DOMAIN-SUFFIX,zhihu.com,DIRECT - - DOMAIN-SUFFIX,zhimg.com,DIRECT - - DOMAIN-SUFFIX,zimuzu.tv,DIRECT - - DOMAIN-SUFFIX,zoho.com,DIRECT - - DOMAIN,boss.cnwangjie.com,DIRECT - - # 抗 DNS 污染 - - DOMAIN-KEYWORD,amazon,Proxy - - DOMAIN-KEYWORD,google,Proxy - - DOMAIN-KEYWORD,gmail,Proxy - - DOMAIN-KEYWORD,youtube,Proxy - - DOMAIN-KEYWORD,facebook,Proxy - - DOMAIN-SUFFIX,fb.me,Proxy - - DOMAIN-SUFFIX,fbcdn.net,Proxy - - DOMAIN-KEYWORD,twitter,Proxy - - DOMAIN-KEYWORD,instagram,Proxy - - DOMAIN-KEYWORD,dropbox,Proxy - - DOMAIN-SUFFIX,twimg.com,Proxy - - DOMAIN-KEYWORD,blogspot,Proxy - - DOMAIN-SUFFIX,youtu.be,Proxy - - DOMAIN-KEYWORD,whatsapp,Proxy - - # 常见广告域名屏蔽 - - DOMAIN-KEYWORD,admarvel,REJECT - - DOMAIN-KEYWORD,admaster,REJECT - - DOMAIN-KEYWORD,adsage,REJECT - - DOMAIN-KEYWORD,adsmogo,REJECT - - DOMAIN-KEYWORD,adsrvmedia,REJECT - - DOMAIN-KEYWORD,adwords,REJECT - - DOMAIN-KEYWORD,adservice,REJECT - - DOMAIN-SUFFIX,appsflyer.com,REJECT - - DOMAIN-KEYWORD,domob,REJECT - - DOMAIN-SUFFIX,doubleclick.net,REJECT - - DOMAIN-KEYWORD,duomeng,REJECT - - DOMAIN-KEYWORD,dwtrack,REJECT - - DOMAIN-KEYWORD,guanggao,REJECT - - DOMAIN-KEYWORD,lianmeng,REJECT - - DOMAIN-SUFFIX,mmstat.com,REJECT - - DOMAIN-KEYWORD,mopub,REJECT - - DOMAIN-KEYWORD,omgmta,REJECT - - DOMAIN-KEYWORD,openx,REJECT - - DOMAIN-KEYWORD,partnerad,REJECT - - DOMAIN-KEYWORD,pingfore,REJECT - - DOMAIN-KEYWORD,supersonicads,REJECT - - DOMAIN-KEYWORD,uedas,REJECT - - DOMAIN-KEYWORD,umeng,REJECT - - DOMAIN-KEYWORD,usage,REJECT - - DOMAIN-SUFFIX,vungle.com,REJECT - - DOMAIN-KEYWORD,wlmonitor,REJECT - - DOMAIN-KEYWORD,zjtoolbar,REJECT - - # 国外网站 - - DOMAIN-SUFFIX,9to5mac.com,Proxy - - DOMAIN-SUFFIX,abpchina.org,Proxy - - DOMAIN-SUFFIX,adblockplus.org,Proxy - - DOMAIN-SUFFIX,adobe.com,Proxy - - DOMAIN-SUFFIX,akamaized.net,Proxy - - DOMAIN-SUFFIX,alfredapp.com,Proxy - - DOMAIN-SUFFIX,amplitude.com,Proxy - - DOMAIN-SUFFIX,ampproject.org,Proxy - - DOMAIN-SUFFIX,android.com,Proxy - - DOMAIN-SUFFIX,angularjs.org,Proxy - - DOMAIN-SUFFIX,aolcdn.com,Proxy - - DOMAIN-SUFFIX,apkpure.com,Proxy - - DOMAIN-SUFFIX,appledaily.com,Proxy - - DOMAIN-SUFFIX,appshopper.com,Proxy - - DOMAIN-SUFFIX,appspot.com,Proxy - - DOMAIN-SUFFIX,arcgis.com,Proxy - - DOMAIN-SUFFIX,archive.org,Proxy - - DOMAIN-SUFFIX,armorgames.com,Proxy - - DOMAIN-SUFFIX,aspnetcdn.com,Proxy - - DOMAIN-SUFFIX,att.com,Proxy - - DOMAIN-SUFFIX,awsstatic.com,Proxy - - DOMAIN-SUFFIX,azureedge.net,Proxy - - DOMAIN-SUFFIX,azurewebsites.net,Proxy - - DOMAIN-SUFFIX,bing.com,Proxy - - DOMAIN-SUFFIX,bintray.com,Proxy - - DOMAIN-SUFFIX,bit.com,Proxy - - DOMAIN-SUFFIX,bit.ly,Proxy - - DOMAIN-SUFFIX,bitbucket.org,Proxy - - DOMAIN-SUFFIX,bjango.com,Proxy - - DOMAIN-SUFFIX,bkrtx.com,Proxy - - DOMAIN-SUFFIX,blog.com,Proxy - - DOMAIN-SUFFIX,blogcdn.com,Proxy - - DOMAIN-SUFFIX,blogger.com,Proxy - - DOMAIN-SUFFIX,blogsmithmedia.com,Proxy - - DOMAIN-SUFFIX,blogspot.com,Proxy - - DOMAIN-SUFFIX,blogspot.hk,Proxy - - DOMAIN-SUFFIX,bloomberg.com,Proxy - - DOMAIN-SUFFIX,box.com,Proxy - - DOMAIN-SUFFIX,box.net,Proxy - - DOMAIN-SUFFIX,cachefly.net,Proxy - - DOMAIN-SUFFIX,chromium.org,Proxy - - DOMAIN-SUFFIX,cl.ly,Proxy - - DOMAIN-SUFFIX,cloudflare.com,Proxy - - DOMAIN-SUFFIX,cloudfront.net,Proxy - - DOMAIN-SUFFIX,cloudmagic.com,Proxy - - DOMAIN-SUFFIX,cmail19.com,Proxy - - DOMAIN-SUFFIX,cnet.com,Proxy - - DOMAIN-SUFFIX,cocoapods.org,Proxy - - DOMAIN-SUFFIX,comodoca.com,Proxy - - DOMAIN-SUFFIX,crashlytics.com,Proxy - - DOMAIN-SUFFIX,culturedcode.com,Proxy - - DOMAIN-SUFFIX,d.pr,Proxy - - DOMAIN-SUFFIX,danilo.to,Proxy - - DOMAIN-SUFFIX,dayone.me,Proxy - - DOMAIN-SUFFIX,db.tt,Proxy - - DOMAIN-SUFFIX,deskconnect.com,Proxy - - DOMAIN-SUFFIX,disq.us,Proxy - - DOMAIN-SUFFIX,disqus.com,Proxy - - DOMAIN-SUFFIX,disquscdn.com,Proxy - - DOMAIN-SUFFIX,dnsimple.com,Proxy - - DOMAIN-SUFFIX,docker.com,Proxy - - DOMAIN-SUFFIX,dribbble.com,Proxy - - DOMAIN-SUFFIX,droplr.com,Proxy - - DOMAIN-SUFFIX,duckduckgo.com,Proxy - - DOMAIN-SUFFIX,dueapp.com,Proxy - - DOMAIN-SUFFIX,dytt8.net,Proxy - - DOMAIN-SUFFIX,edgecastcdn.net,Proxy - - DOMAIN-SUFFIX,edgekey.net,Proxy - - DOMAIN-SUFFIX,edgesuite.net,Proxy - - DOMAIN-SUFFIX,engadget.com,Proxy - - DOMAIN-SUFFIX,entrust.net,Proxy - - DOMAIN-SUFFIX,eurekavpt.com,Proxy - - DOMAIN-SUFFIX,evernote.com,Proxy - - DOMAIN-SUFFIX,fabric.io,Proxy - - DOMAIN-SUFFIX,fast.com,Proxy - - DOMAIN-SUFFIX,fastly.net,Proxy - - DOMAIN-SUFFIX,fc2.com,Proxy - - DOMAIN-SUFFIX,feedburner.com,Proxy - - DOMAIN-SUFFIX,feedly.com,Proxy - - DOMAIN-SUFFIX,feedsportal.com,Proxy - - DOMAIN-SUFFIX,fiftythree.com,Proxy - - DOMAIN-SUFFIX,firebaseio.com,Proxy - - DOMAIN-SUFFIX,flexibits.com,Proxy - - DOMAIN-SUFFIX,flickr.com,Proxy - - DOMAIN-SUFFIX,flipboard.com,Proxy - - DOMAIN-SUFFIX,g.co,Proxy - - DOMAIN-SUFFIX,gabia.net,Proxy - - DOMAIN-SUFFIX,geni.us,Proxy - - DOMAIN-SUFFIX,gfx.ms,Proxy - - DOMAIN-SUFFIX,ggpht.com,Proxy - - DOMAIN-SUFFIX,ghostnoteapp.com,Proxy - - DOMAIN-SUFFIX,git.io,Proxy - - DOMAIN-KEYWORD,github,Proxy - - DOMAIN-SUFFIX,globalsign.com,Proxy - - DOMAIN-SUFFIX,gmodules.com,Proxy - - DOMAIN-SUFFIX,godaddy.com,Proxy - - DOMAIN-SUFFIX,golang.org,Proxy - - DOMAIN-SUFFIX,gongm.in,Proxy - - DOMAIN-SUFFIX,goo.gl,Proxy - - DOMAIN-SUFFIX,goodreaders.com,Proxy - - DOMAIN-SUFFIX,goodreads.com,Proxy - - DOMAIN-SUFFIX,gravatar.com,Proxy - - DOMAIN-SUFFIX,gstatic.com,Proxy - - DOMAIN-SUFFIX,gvt0.com,Proxy - - DOMAIN-SUFFIX,hockeyapp.net,Proxy - - DOMAIN-SUFFIX,hotmail.com,Proxy - - DOMAIN-SUFFIX,icons8.com,Proxy - - DOMAIN-SUFFIX,ifixit.com,Proxy - - DOMAIN-SUFFIX,ift.tt,Proxy - - DOMAIN-SUFFIX,ifttt.com,Proxy - - DOMAIN-SUFFIX,iherb.com,Proxy - - DOMAIN-SUFFIX,imageshack.us,Proxy - - DOMAIN-SUFFIX,img.ly,Proxy - - DOMAIN-SUFFIX,imgur.com,Proxy - - DOMAIN-SUFFIX,imore.com,Proxy - - DOMAIN-SUFFIX,instapaper.com,Proxy - - DOMAIN-SUFFIX,ipn.li,Proxy - - DOMAIN-SUFFIX,is.gd,Proxy - - DOMAIN-SUFFIX,issuu.com,Proxy - - DOMAIN-SUFFIX,itgonglun.com,Proxy - - DOMAIN-SUFFIX,itun.es,Proxy - - DOMAIN-SUFFIX,ixquick.com,Proxy - - DOMAIN-SUFFIX,j.mp,Proxy - - DOMAIN-SUFFIX,js.revsci.net,Proxy - - DOMAIN-SUFFIX,jshint.com,Proxy - - DOMAIN-SUFFIX,jtvnw.net,Proxy - - DOMAIN-SUFFIX,justgetflux.com,Proxy - - DOMAIN-SUFFIX,kat.cr,Proxy - - DOMAIN-SUFFIX,klip.me,Proxy - - DOMAIN-SUFFIX,libsyn.com,Proxy - - DOMAIN-SUFFIX,linode.com,Proxy - - DOMAIN-SUFFIX,lithium.com,Proxy - - DOMAIN-SUFFIX,littlehj.com,Proxy - - DOMAIN-SUFFIX,live.com,Proxy - - DOMAIN-SUFFIX,live.net,Proxy - - DOMAIN-SUFFIX,livefilestore.com,Proxy - - DOMAIN-SUFFIX,llnwd.net,Proxy - - DOMAIN-SUFFIX,macid.co,Proxy - - DOMAIN-SUFFIX,macromedia.com,Proxy - - DOMAIN-SUFFIX,macrumors.com,Proxy - - DOMAIN-SUFFIX,mashable.com,Proxy - - DOMAIN-SUFFIX,mathjax.org,Proxy - - DOMAIN-SUFFIX,medium.com,Proxy - - DOMAIN-SUFFIX,mega.co.nz,Proxy - - DOMAIN-SUFFIX,mega.nz,Proxy - - DOMAIN-SUFFIX,megaupload.com,Proxy - - DOMAIN-SUFFIX,microsofttranslator.com,Proxy - - DOMAIN-SUFFIX,mindnode.com,Proxy - - DOMAIN-SUFFIX,mobile01.com,Proxy - - DOMAIN-SUFFIX,modmyi.com,Proxy - - DOMAIN-SUFFIX,msedge.net,Proxy - - DOMAIN-SUFFIX,myfontastic.com,Proxy - - DOMAIN-SUFFIX,name.com,Proxy - - DOMAIN-SUFFIX,nextmedia.com,Proxy - - DOMAIN-SUFFIX,nsstatic.net,Proxy - - DOMAIN-SUFFIX,nssurge.com,Proxy - - DOMAIN-SUFFIX,nyt.com,Proxy - - DOMAIN-SUFFIX,nytimes.com,Proxy - - DOMAIN-SUFFIX,omnigroup.com,Proxy - - DOMAIN-SUFFIX,onedrive.com,Proxy - - DOMAIN-SUFFIX,onenote.com,Proxy - - DOMAIN-SUFFIX,ooyala.com,Proxy - - DOMAIN-SUFFIX,openvpn.net,Proxy - - DOMAIN-SUFFIX,openwrt.org,Proxy - - DOMAIN-SUFFIX,orkut.com,Proxy - - DOMAIN-SUFFIX,osxdaily.com,Proxy - - DOMAIN-SUFFIX,outlook.com,Proxy - - DOMAIN-SUFFIX,ow.ly,Proxy - - DOMAIN-SUFFIX,paddleapi.com,Proxy - - DOMAIN-SUFFIX,parallels.com,Proxy - - DOMAIN-SUFFIX,parse.com,Proxy - - DOMAIN-SUFFIX,pdfexpert.com,Proxy - - DOMAIN-SUFFIX,periscope.tv,Proxy - - DOMAIN-SUFFIX,pinboard.in,Proxy - - DOMAIN-SUFFIX,pinterest.com,Proxy - - DOMAIN-SUFFIX,pixelmator.com,Proxy - - DOMAIN-SUFFIX,pixiv.net,Proxy - - DOMAIN-SUFFIX,playpcesor.com,Proxy - - DOMAIN-SUFFIX,playstation.com,Proxy - - DOMAIN-SUFFIX,playstation.com.hk,Proxy - - DOMAIN-SUFFIX,playstation.net,Proxy - - DOMAIN-SUFFIX,playstationnetwork.com,Proxy - - DOMAIN-SUFFIX,pushwoosh.com,Proxy - - DOMAIN-SUFFIX,rime.im,Proxy - - DOMAIN-SUFFIX,servebom.com,Proxy - - DOMAIN-SUFFIX,sfx.ms,Proxy - - DOMAIN-SUFFIX,shadowsocks.org,Proxy - - DOMAIN-SUFFIX,sharethis.com,Proxy - - DOMAIN-SUFFIX,shazam.com,Proxy - - DOMAIN-SUFFIX,skype.com,Proxy - - DOMAIN-SUFFIX,smartdnsProxy.com,Proxy - - DOMAIN-SUFFIX,smartmailcloud.com,Proxy - - DOMAIN-SUFFIX,sndcdn.com,Proxy - - DOMAIN-SUFFIX,sony.com,Proxy - - DOMAIN-SUFFIX,soundcloud.com,Proxy - - DOMAIN-SUFFIX,sourceforge.net,Proxy - - DOMAIN-SUFFIX,spotify.com,Proxy - - DOMAIN-SUFFIX,squarespace.com,Proxy - - DOMAIN-SUFFIX,sstatic.net,Proxy - - DOMAIN-SUFFIX,st.luluku.pw,Proxy - - DOMAIN-SUFFIX,stackoverflow.com,Proxy - - DOMAIN-SUFFIX,startpage.com,Proxy - - DOMAIN-SUFFIX,staticflickr.com,Proxy - - DOMAIN-SUFFIX,steamcommunity.com,Proxy - - DOMAIN-SUFFIX,symauth.com,Proxy - - DOMAIN-SUFFIX,symcb.com,Proxy - - DOMAIN-SUFFIX,symcd.com,Proxy - - DOMAIN-SUFFIX,tapbots.com,Proxy - - DOMAIN-SUFFIX,tapbots.net,Proxy - - DOMAIN-SUFFIX,tdesktop.com,Proxy - - DOMAIN-SUFFIX,techcrunch.com,Proxy - - DOMAIN-SUFFIX,techsmith.com,Proxy - - DOMAIN-SUFFIX,thepiratebay.org,Proxy - - DOMAIN-SUFFIX,theverge.com,Proxy - - DOMAIN-SUFFIX,time.com,Proxy - - DOMAIN-SUFFIX,timeinc.net,Proxy - - DOMAIN-SUFFIX,tiny.cc,Proxy - - DOMAIN-SUFFIX,tinypic.com,Proxy - - DOMAIN-SUFFIX,tmblr.co,Proxy - - DOMAIN-SUFFIX,todoist.com,Proxy - - DOMAIN-SUFFIX,trello.com,Proxy - - DOMAIN-SUFFIX,trustasiassl.com,Proxy - - DOMAIN-SUFFIX,tumblr.co,Proxy - - DOMAIN-SUFFIX,tumblr.com,Proxy - - DOMAIN-SUFFIX,tweetdeck.com,Proxy - - DOMAIN-SUFFIX,tweetmarker.net,Proxy - - DOMAIN-SUFFIX,twitch.tv,Proxy - - DOMAIN-SUFFIX,txmblr.com,Proxy - - DOMAIN-SUFFIX,typekit.net,Proxy - - DOMAIN-SUFFIX,ubertags.com,Proxy - - DOMAIN-SUFFIX,ublock.org,Proxy - - DOMAIN-SUFFIX,ubnt.com,Proxy - - DOMAIN-SUFFIX,ulyssesapp.com,Proxy - - DOMAIN-SUFFIX,urchin.com,Proxy - - DOMAIN-SUFFIX,usertrust.com,Proxy - - DOMAIN-SUFFIX,v.gd,Proxy - - DOMAIN-SUFFIX,v2ex.com,Proxy - - DOMAIN-SUFFIX,vimeo.com,Proxy - - DOMAIN-SUFFIX,vimeocdn.com,Proxy - - DOMAIN-SUFFIX,vine.co,Proxy - - DOMAIN-SUFFIX,vivaldi.com,Proxy - - DOMAIN-SUFFIX,vox-cdn.com,Proxy - - DOMAIN-SUFFIX,vsco.co,Proxy - - DOMAIN-SUFFIX,vultr.com,Proxy - - DOMAIN-SUFFIX,w.org,Proxy - - DOMAIN-SUFFIX,w3schools.com,Proxy - - DOMAIN-SUFFIX,webtype.com,Proxy - - DOMAIN-SUFFIX,wikiwand.com,Proxy - - DOMAIN-SUFFIX,wikileaks.org,Proxy - - DOMAIN-SUFFIX,wikimedia.org,Proxy - - DOMAIN-SUFFIX,wikipedia.com,Proxy - - DOMAIN-SUFFIX,wikipedia.org,Proxy - - DOMAIN-SUFFIX,windows.com,Proxy - - DOMAIN-SUFFIX,windows.net,Proxy - - DOMAIN-SUFFIX,wire.com,Proxy - - DOMAIN-SUFFIX,wordpress.com,Proxy - - DOMAIN-SUFFIX,workflowy.com,Proxy - - DOMAIN-SUFFIX,wp.com,Proxy - - DOMAIN-SUFFIX,wsj.com,Proxy - - DOMAIN-SUFFIX,wsj.net,Proxy - - DOMAIN-SUFFIX,xda-developers.com,Proxy - - DOMAIN-SUFFIX,xeeno.com,Proxy - - DOMAIN-SUFFIX,xiti.com,Proxy - - DOMAIN-SUFFIX,yahoo.com,Proxy - - DOMAIN-SUFFIX,yimg.com,Proxy - - DOMAIN-SUFFIX,ying.com,Proxy - - DOMAIN-SUFFIX,yoyo.org,Proxy - - DOMAIN-SUFFIX,ytimg.com,Proxy - - # Telegram - - DOMAIN-SUFFIX,telegra.ph,Proxy - - DOMAIN-SUFFIX,telegram.org,Proxy - - IP-CIDR,91.108.4.0/22,Proxy - - IP-CIDR,91.108.8.0/21,Proxy - - IP-CIDR,91.108.16.0/22,Proxy - - IP-CIDR,91.108.56.0/22,Proxy - - IP-CIDR,149.154.160.0/20,Proxy - - IP-CIDR6,2001:67c:4e8::/48,Proxy - - IP-CIDR6,2001:b28:f23d::/48,Proxy - - IP-CIDR6,2001:b28:f23f::/48,Proxy - - # LAN - - DOMAIN,injections.adguard.org,DIRECT - - DOMAIN,local.adguard.org,DIRECT - - DOMAIN-SUFFIX,local,DIRECT - - IP-CIDR,127.0.0.0/8,DIRECT - - IP-CIDR,172.16.0.0/12,DIRECT - - IP-CIDR,192.168.0.0/16,DIRECT - - IP-CIDR,10.0.0.0/8,DIRECT - - IP-CIDR,17.0.0.0/8,DIRECT - - IP-CIDR,100.64.0.0/10,DIRECT - - IP-CIDR,224.0.0.0/4,DIRECT - - IP-CIDR6,fe80::/10,DIRECT - - # 最终规则 - - GEOIP,CN,DIRECT - - MATCH,Final