软件功能基本开发完成,内测BUG等待修复
This commit is contained in:
@@ -9,7 +9,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: docker.gitea.com/runner-images:ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
|
|||||||
207
cmd/api/main.go
207
cmd/api/main.go
@@ -1,207 +0,0 @@
|
|||||||
//go:build ignore
|
|
||||||
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"log"
|
|
||||||
"strings"
|
|
||||||
"xboard-go/internal/config"
|
|
||||||
"xboard-go/internal/database"
|
|
||||||
"xboard-go/internal/handler"
|
|
||||||
"xboard-go/internal/middleware"
|
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
// Initialize configuration
|
|
||||||
config.LoadConfig()
|
|
||||||
|
|
||||||
// Initialize database
|
|
||||||
database.InitDB()
|
|
||||||
|
|
||||||
// Initialize Gin router
|
|
||||||
r := gin.Default()
|
|
||||||
|
|
||||||
// Short-link Subscription (Root level)
|
|
||||||
r.GET("/s/:token", handler.Subscribe)
|
|
||||||
|
|
||||||
// Static Assets for Admin Dist
|
|
||||||
r.Static("/admin-assets", "./frontend/admin")
|
|
||||||
|
|
||||||
// Global Middleware
|
|
||||||
r.Use(gin.Recovery())
|
|
||||||
|
|
||||||
// API Groups
|
|
||||||
v1 := r.Group("/api/v1")
|
|
||||||
{
|
|
||||||
// Passport (Auth)
|
|
||||||
passport := v1.Group("/passport")
|
|
||||||
{
|
|
||||||
passport.POST("/login", handler.Login)
|
|
||||||
passport.POST("/register", handler.Register)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Authenticated Routes
|
|
||||||
auth := v1.Group("")
|
|
||||||
auth.Use(middleware.Auth())
|
|
||||||
{
|
|
||||||
user := auth.Group("/user")
|
|
||||||
{
|
|
||||||
user.GET("/info", handler.UserInfo)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Node (UniProxy) Routes
|
|
||||||
server := v1.Group("/server")
|
|
||||||
server.Use(middleware.NodeAuth())
|
|
||||||
{
|
|
||||||
uniProxy := server.Group("/uniProxy")
|
|
||||||
{
|
|
||||||
uniProxy.GET("/user", handler.NodeUser)
|
|
||||||
uniProxy.POST("/push", handler.NodePush)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Admin Portal Entry (Direct)
|
|
||||||
v1.GET("/:path", handler.AdminAppPage)
|
|
||||||
}
|
|
||||||
|
|
||||||
// V2 Admin API Group (Matches Xboard official frontend expectations)
|
|
||||||
v2 := r.Group("/api/v2")
|
|
||||||
{
|
|
||||||
// V2 User Auth Routes (used by the admin React app to verify login state)
|
|
||||||
v2user := v2.Group("/user")
|
|
||||||
v2user.Use(middleware.Auth())
|
|
||||||
{
|
|
||||||
v2user.GET("/info", handler.UserInfo)
|
|
||||||
v2user.GET("/checkLogin", handler.UserCheckLogin)
|
|
||||||
}
|
|
||||||
|
|
||||||
// All admin endpoints are prefixed with the secure path
|
|
||||||
admin := v2.Group("/:path")
|
|
||||||
admin.Use(middleware.AdminAuth())
|
|
||||||
{
|
|
||||||
// Config
|
|
||||||
configGrp := admin.Group("/config")
|
|
||||||
{
|
|
||||||
configGrp.GET("/fetch", handler.AdminConfigFetch)
|
|
||||||
configGrp.POST("/save", handler.AdminConfigSave)
|
|
||||||
configGrp.GET("/getEmailTemplate", handler.AdminGetEmailTemplate)
|
|
||||||
configGrp.GET("/getThemeTemplate", handler.AdminGetThemeTemplate)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Dashboard / Stat
|
|
||||||
statGrp := admin.Group("/stat")
|
|
||||||
{
|
|
||||||
statGrp.GET("/getStats", handler.AdminDashboardSummary)
|
|
||||||
statGrp.GET("/getOverride", handler.AdminDashboardSummary)
|
|
||||||
statGrp.GET("/getTrafficRank", handler.AdminGetTrafficRank)
|
|
||||||
statGrp.GET("/getOrder", handler.AdminGetOrderStats)
|
|
||||||
statGrp.POST("/getStatUser", handler.AdminGetStatUser)
|
|
||||||
}
|
|
||||||
|
|
||||||
// System
|
|
||||||
systemGrp := admin.Group("/system")
|
|
||||||
{
|
|
||||||
systemGrp.GET("/getSystemStatus", handler.AdminSystemStatus)
|
|
||||||
systemGrp.GET("/getQueueStats", handler.AdminSystemQueueStats)
|
|
||||||
systemGrp.GET("/getQueueWorkload", handler.AdminSystemQueueStats)
|
|
||||||
systemGrp.GET("/getQueueMasters", handler.AdminSystemQueueStats)
|
|
||||||
systemGrp.GET("/getHorizonFailedJobs", handler.AdminSystemQueueStats)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Essential Resources
|
|
||||||
admin.POST("/plan/fetch", handler.AdminPlansFetch) // Shifted to POST in manifest? Actually manifest says GET next to plan, let's keep GET and add POST if needed.
|
|
||||||
admin.GET("/plan/fetch", handler.AdminPlansFetch)
|
|
||||||
admin.POST("/plan/save", handler.AdminPlanSave)
|
|
||||||
admin.POST("/plan/update", handler.AdminPlanSave)
|
|
||||||
admin.POST("/plan/drop", handler.AdminPlanDrop)
|
|
||||||
admin.POST("/plan/sort", handler.AdminPlanSort)
|
|
||||||
|
|
||||||
admin.POST("/user/fetch", handler.AdminUsersFetch)
|
|
||||||
admin.POST("/user/update", handler.AdminUserUpdate)
|
|
||||||
admin.POST("/user/ban", handler.AdminUserBan)
|
|
||||||
admin.POST("/user/delete", handler.AdminUserDelete)
|
|
||||||
admin.POST("/user/destroy", handler.AdminUserDelete)
|
|
||||||
admin.POST("/user/resetSecret", handler.AdminUserResetSecret)
|
|
||||||
admin.POST("/user/sendMail", handler.AdminUserSendMail)
|
|
||||||
|
|
||||||
admin.POST("/order/fetch", handler.AdminOrdersFetch)
|
|
||||||
admin.POST("/order/detail", handler.AdminOrderDetail)
|
|
||||||
admin.POST("/order/paid", handler.AdminOrderPaid)
|
|
||||||
admin.POST("/order/cancel", handler.AdminOrderCancel)
|
|
||||||
admin.POST("/order/assign", handler.AdminOrderAssign)
|
|
||||||
admin.POST("/order/update", handler.AdminOrderUpdate)
|
|
||||||
|
|
||||||
admin.POST("/ticket/fetch", handler.AdminTicketsFetch)
|
|
||||||
|
|
||||||
// Knowledge Base
|
|
||||||
knowledgeGrp := admin.Group("/knowledge")
|
|
||||||
{
|
|
||||||
knowledgeGrp.GET("/fetch", handler.AdminKnowledgeFetch)
|
|
||||||
knowledgeGrp.POST("/save", handler.AdminKnowledgeSave)
|
|
||||||
knowledgeGrp.POST("/drop", handler.AdminKnowledgeDrop)
|
|
||||||
knowledgeGrp.POST("/sort", handler.AdminKnowledgeSort)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Traffic Reset
|
|
||||||
trafficResetGrp := admin.Group("/traffic-reset")
|
|
||||||
{
|
|
||||||
trafficResetGrp.GET("/fetch", handler.AdminTrafficResetFetch)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Real-name Verification
|
|
||||||
realNameGrp := admin.Group("/realname")
|
|
||||||
{
|
|
||||||
realNameGrp.GET("/fetch", handler.PluginRealNameList)
|
|
||||||
realNameGrp.POST("/review/:userId", handler.PluginRealNameReview)
|
|
||||||
realNameGrp.POST("/reset/:userId", handler.PluginRealNameReset)
|
|
||||||
realNameGrp.POST("/sync", handler.PluginRealNameSyncAll)
|
|
||||||
realNameGrp.POST("/approve-all", handler.PluginRealNameApproveAll)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Servers / Nodes
|
|
||||||
admin.GET("/server/group/fetch", handler.AdminServerGroupsFetch)
|
|
||||||
admin.POST("/server/group/save", handler.AdminServerGroupSave)
|
|
||||||
admin.POST("/server/group/drop", handler.AdminServerGroupDrop)
|
|
||||||
|
|
||||||
admin.GET("/server/manage/getNodes", handler.AdminServerManageGetNodes)
|
|
||||||
admin.POST("/server/manage/save", handler.AdminServerManageSave)
|
|
||||||
admin.POST("/server/manage/update", handler.AdminServerManageSave)
|
|
||||||
admin.POST("/server/manage/drop", handler.AdminServerManageDrop)
|
|
||||||
admin.POST("/server/manage/sort", handler.AdminServerManageSort)
|
|
||||||
admin.POST("/server/manage/copy", handler.AdminServerManageCopy)
|
|
||||||
|
|
||||||
// Router / Route
|
|
||||||
admin.GET("/server/route/fetch", handler.AdminServerRoutesFetch)
|
|
||||||
admin.POST("/server/route/save", handler.AdminServerRouteSave)
|
|
||||||
admin.POST("/server/route/drop", handler.AdminServerRouteDrop)
|
|
||||||
|
|
||||||
// Notice
|
|
||||||
admin.GET("/notice/fetch", handler.AdminNoticeFetch)
|
|
||||||
admin.POST("/notice/save", handler.AdminNoticeSave)
|
|
||||||
admin.POST("/notice/drop", handler.AdminNoticeDrop)
|
|
||||||
admin.POST("/notice/show", handler.AdminNoticeShow)
|
|
||||||
admin.POST("/notice/sort", handler.AdminNoticeSort)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// SPA Fallback for Admin - only for non-API paths
|
|
||||||
r.NoRoute(func(c *gin.Context) {
|
|
||||||
path := c.Request.URL.Path
|
|
||||||
// Don't serve SPA for API calls - let them return 404
|
|
||||||
if strings.HasPrefix(path, "/api/") {
|
|
||||||
c.JSON(404, gin.H{"message": "not found"})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
handler.AdminAppPage(c)
|
|
||||||
})
|
|
||||||
|
|
||||||
// Start server
|
|
||||||
log.Printf("Server starting on port %s", config.AppConfig.AppPort)
|
|
||||||
if err := r.Run(":" + config.AppConfig.AppPort); err != nil {
|
|
||||||
log.Fatalf("Failed to start server: %v", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -270,6 +270,8 @@ func registerAdminRoutesV2(v2 *gin.RouterGroup) {
|
|||||||
admin.POST("/realname/approve-all", handler.PluginRealNameApproveAll)
|
admin.POST("/realname/approve-all", handler.PluginRealNameApproveAll)
|
||||||
admin.GET("/user-online-devices/users", handler.PluginUserOnlineDevicesUsers)
|
admin.GET("/user-online-devices/users", handler.PluginUserOnlineDevicesUsers)
|
||||||
admin.GET("/user-add-ipv6-subscription/users", handler.AdminIPv6SubscriptionUsers)
|
admin.GET("/user-add-ipv6-subscription/users", handler.AdminIPv6SubscriptionUsers)
|
||||||
|
admin.GET("/user-add-ipv6-subscription/config", handler.AdminIPv6SubscriptionConfigFetch)
|
||||||
|
admin.POST("/user-add-ipv6-subscription/config", handler.AdminIPv6SubscriptionConfigSave)
|
||||||
admin.POST("/user-add-ipv6-subscription/enable/:userId", handler.AdminIPv6SubscriptionEnable)
|
admin.POST("/user-add-ipv6-subscription/enable/:userId", handler.AdminIPv6SubscriptionEnable)
|
||||||
admin.POST("/user-add-ipv6-subscription/sync-password/:userId", handler.AdminIPv6SubscriptionSyncPassword)
|
admin.POST("/user-add-ipv6-subscription/sync-password/:userId", handler.AdminIPv6SubscriptionSyncPassword)
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -2,7 +2,7 @@ import { makeRecoveredPage } from "../../runtime/makeRecoveredPage.js";
|
|||||||
import ThemeConfigPageView from "./ThemeConfigPage.jsx";
|
import ThemeConfigPageView from "./ThemeConfigPage.jsx";
|
||||||
|
|
||||||
export default makeRecoveredPage({
|
export default makeRecoveredPage({
|
||||||
title: "Theme Config",
|
title: "Nebula Theme",
|
||||||
routePath: "/config/theme",
|
routePath: "/config/theme",
|
||||||
moduleId: "WQt",
|
moduleId: "WQt",
|
||||||
featureKey: "config.theme",
|
featureKey: "config.theme",
|
||||||
|
|||||||
@@ -1,224 +1,282 @@
|
|||||||
import React, { useEffect, useState } from "../../../recovery-preview/node_modules/react/index.js";
|
import React, { useEffect, useState } from "../../../recovery-preview/node_modules/react/index.js";
|
||||||
import {
|
import { requestJson } from "../../runtime/client.js";
|
||||||
compactText,
|
|
||||||
requestJson,
|
|
||||||
} from "../../runtime/client.js";
|
|
||||||
|
|
||||||
// Wot: Wrapper structure for the config page
|
|
||||||
function Wot({ children }) {
|
function Wot({ children }) {
|
||||||
return <div className="recovery-live-page" style={{ padding: '2rem' }}>{children}</div>;
|
return <div className="flex h-full w-full flex-col">{children}</div>;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hot: Header component for sections or the page
|
function Hot({ children }) {
|
||||||
function Hot({ title, description }) {
|
|
||||||
return (
|
return (
|
||||||
<header className="recovery-live-hero" style={{ marginBottom: '2.5rem', borderBottom: '1px solid var(--border-soft)', pb: '1.5rem' }}>
|
<div className="flex h-[var(--header-height)] flex-none items-center justify-between gap-4 bg-background p-4 md:px-8">
|
||||||
<div style={{ maxWidth: '800px' }}>
|
|
||||||
<p className="eyebrow" style={{ color: 'var(--brand-color)', fontWeight: '600', textTransform: 'uppercase', letterSpacing: '0.05em' }}>
|
|
||||||
Theme Customization
|
|
||||||
</p>
|
|
||||||
<h2 style={{ fontSize: '2.25rem', marginBottom: '0.75rem' }}>{title}</h2>
|
|
||||||
<p style={{ color: 'var(--text-muted)', fontSize: '1.1rem', lineHeight: '1.6' }}>{description}</p>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// zot: Setting Item (Zone) component for form fields
|
|
||||||
function zot({ label, children, span = 1 }) {
|
|
||||||
return (
|
|
||||||
<div className={`recovery-table-card ${span === 2 ? 'span-2' : ''}`} style={{ padding: '1.25rem', background: 'var(--card-bg)', borderRadius: '12px', border: '1px solid var(--card-border)' }}>
|
|
||||||
<label style={{ display: 'block', marginBottom: '0.75rem', fontWeight: '500', color: 'var(--text-main)' }}>{label}</label>
|
|
||||||
<div className="form-control-wrapper">
|
|
||||||
{children}
|
{children}
|
||||||
</div>
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function zot({ children }) {
|
||||||
|
return <div className="flex-1 overflow-hidden px-4 py-6 md:px-8">{children}</div>;
|
||||||
|
}
|
||||||
|
|
||||||
|
function Card({ title, description, children }) {
|
||||||
|
return (
|
||||||
|
<div className="rounded-xl border bg-card text-card-foreground shadow">
|
||||||
|
<div className="flex flex-col space-y-1.5 p-6">
|
||||||
|
<h3 className="font-semibold leading-none tracking-tight">{title}</h3>
|
||||||
|
<p className="text-sm text-muted-foreground">{description}</p>
|
||||||
|
</div>
|
||||||
|
<div className="p-6 pt-0">{children}</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// QKt: The main Nebula configuration component
|
function Field({ label, description, children, span = 1 }) {
|
||||||
|
return (
|
||||||
|
<div className={span === 2 ? "space-y-2 md:col-span-2" : "space-y-2"}>
|
||||||
|
<label className="text-sm font-medium leading-none">{label}</label>
|
||||||
|
{children}
|
||||||
|
<p className="text-[0.8rem] text-muted-foreground">{description}</p>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const defaults = {
|
||||||
|
nebula_theme_color: "aurora",
|
||||||
|
nebula_hero_slogan: "",
|
||||||
|
nebula_welcome_target: "",
|
||||||
|
nebula_register_title: "",
|
||||||
|
nebula_background_url: "",
|
||||||
|
nebula_metrics_base_url: "",
|
||||||
|
nebula_default_theme_mode: "system",
|
||||||
|
nebula_light_logo_url: "",
|
||||||
|
nebula_dark_logo_url: "",
|
||||||
|
nebula_custom_html: "",
|
||||||
|
nebula_static_cdn_url: "",
|
||||||
|
};
|
||||||
|
|
||||||
|
const themeColorOptions = [
|
||||||
|
{ value: "aurora", label: "Aurora" },
|
||||||
|
{ value: "sunset", label: "Sunset" },
|
||||||
|
{ value: "ember", label: "Ember" },
|
||||||
|
{ value: "violet", label: "Violet" },
|
||||||
|
];
|
||||||
|
|
||||||
|
const themeModeOptions = [
|
||||||
|
{ value: "system", label: "Follow system" },
|
||||||
|
{ value: "dark", label: "Prefer dark" },
|
||||||
|
{ value: "light", label: "Prefer light" },
|
||||||
|
];
|
||||||
|
|
||||||
function QKt() {
|
function QKt() {
|
||||||
|
const [form, setForm] = useState(defaults);
|
||||||
const [loading, setLoading] = useState(true);
|
const [loading, setLoading] = useState(true);
|
||||||
const [saving, setSaving] = useState(false);
|
const [saving, setSaving] = useState(false);
|
||||||
const [form, setForm] = useState({
|
const [message, setMessage] = useState("");
|
||||||
nebula_theme_color: 'aurora',
|
const [messageType, setMessageType] = useState("");
|
||||||
nebula_hero_slogan: '',
|
|
||||||
nebula_welcome_target: '',
|
|
||||||
nebula_register_title: '',
|
|
||||||
nebula_background_url: '',
|
|
||||||
nebula_metrics_base_url: '',
|
|
||||||
nebula_default_theme_mode: 'system',
|
|
||||||
nebula_light_logo_url: '',
|
|
||||||
nebula_dark_logo_url: '',
|
|
||||||
nebula_custom_html: '',
|
|
||||||
nebula_static_cdn_url: '',
|
|
||||||
});
|
|
||||||
const [error, setError] = useState("");
|
|
||||||
const [success, setSuccess] = useState("");
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
(async () => {
|
(async () => {
|
||||||
try {
|
try {
|
||||||
const payload = await requestJson("/config/fetch?key=nebula");
|
const payload = await requestJson("/config/fetch?key=nebula");
|
||||||
if (payload?.nebula) {
|
const nebula = payload?.data?.nebula || payload?.nebula || {};
|
||||||
setForm(prev => ({ ...prev, ...payload.nebula }));
|
setForm((prev) => ({ ...prev, ...nebula }));
|
||||||
}
|
} catch (error) {
|
||||||
} catch (err) {
|
setMessage(error?.message || "Failed to load Nebula settings");
|
||||||
setError("Failed to load configuration: " + err.message);
|
setMessageType("error");
|
||||||
} finally {
|
} finally {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const handleSave = async (e) => {
|
const updateField = (key, value) => {
|
||||||
e.preventDefault();
|
setForm((prev) => ({ ...prev, [key]: value ?? "" }));
|
||||||
|
};
|
||||||
|
|
||||||
|
const save = async () => {
|
||||||
setSaving(true);
|
setSaving(true);
|
||||||
setSuccess("");
|
setMessage("");
|
||||||
setError("");
|
setMessageType("");
|
||||||
try {
|
try {
|
||||||
await requestJson("/config/save", {
|
await requestJson("/config/save", { method: "POST", body: form });
|
||||||
method: "POST",
|
setMessage("Nebula settings saved");
|
||||||
body: form,
|
setMessageType("success");
|
||||||
});
|
} catch (error) {
|
||||||
setSuccess("Nebula configuration updated successfully.");
|
setMessage(error?.message || "Failed to save Nebula settings");
|
||||||
window.scrollTo({ top: 0, behavior: 'smooth' });
|
setMessageType("error");
|
||||||
} catch (err) {
|
|
||||||
setError("Failed to save configuration: " + err.message);
|
|
||||||
} finally {
|
} finally {
|
||||||
setSaving(false);
|
setSaving(false);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if (loading) return <Wot><div className="empty-cell">Initializing Nebula settings...</div></Wot>;
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Wot>
|
<Wot>
|
||||||
<Hot
|
<Hot>
|
||||||
title="Nebula Theme settings"
|
<div />
|
||||||
description="Optimize your user dashboard with specific Nebula theme settings and branding options."
|
<div className="flex items-center gap-3">
|
||||||
/>
|
<button
|
||||||
|
type="button"
|
||||||
{error && <div className="toast toast-error" style={{ marginBottom: '1.5rem' }}>{error}</div>}
|
className="inline-flex h-9 items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground shadow transition-colors hover:bg-primary/90 disabled:pointer-events-none disabled:opacity-50"
|
||||||
{success && <div className="toast toast-success" style={{ marginBottom: '1.5rem' }}>{success}</div>}
|
onClick={save}
|
||||||
|
disabled={loading || saving}
|
||||||
<form onSubmit={handleSave} className="modal-grid" style={{ maxWidth: '1200px' }}>
|
|
||||||
<zot label="Primary Accent Color" span={2}>
|
|
||||||
<select
|
|
||||||
value={form.nebula_theme_color}
|
|
||||||
onChange={e => setForm({...form, nebula_theme_color: e.target.value})}
|
|
||||||
className="recovery-input"
|
|
||||||
style={{ width: '100%', height: '42px' }}
|
|
||||||
>
|
>
|
||||||
<option value="aurora">极光蓝 (Aurora Blue)</option>
|
{saving ? "Saving..." : "Save settings"}
|
||||||
<option value="sunset">日落橙 (Sunset Orange)</option>
|
|
||||||
<option value="ember">余烬红 (Ember Red)</option>
|
|
||||||
<option value="violet">星云紫 (Violet Purple)</option>
|
|
||||||
</select>
|
|
||||||
</zot>
|
|
||||||
|
|
||||||
<zot label="Hero Slogan">
|
|
||||||
<input
|
|
||||||
className="recovery-input"
|
|
||||||
value={form.nebula_hero_slogan}
|
|
||||||
onChange={e => setForm({...form, nebula_hero_slogan: e.target.value})}
|
|
||||||
placeholder="Main visual headline"
|
|
||||||
/>
|
|
||||||
</zot>
|
|
||||||
|
|
||||||
<zot label="Welcome Target">
|
|
||||||
<input
|
|
||||||
className="recovery-input"
|
|
||||||
value={form.nebula_welcome_target}
|
|
||||||
onChange={e => setForm({...form, nebula_welcome_target: e.target.value})}
|
|
||||||
placeholder="Name displayed after WELCOME TO"
|
|
||||||
/>
|
|
||||||
</zot>
|
|
||||||
|
|
||||||
<zot label="Register Title">
|
|
||||||
<input
|
|
||||||
className="recovery-input"
|
|
||||||
value={form.nebula_register_title}
|
|
||||||
onChange={e => setForm({...form, nebula_register_title: e.target.value})}
|
|
||||||
placeholder="Title on registration panel"
|
|
||||||
/>
|
|
||||||
</zot>
|
|
||||||
|
|
||||||
<zot label="Default Appearance">
|
|
||||||
<select
|
|
||||||
value={form.nebula_default_theme_mode}
|
|
||||||
onChange={e => setForm({...form, nebula_default_theme_mode: e.target.value})}
|
|
||||||
className="recovery-input"
|
|
||||||
style={{ width: '100%', height: '42px' }}
|
|
||||||
>
|
|
||||||
<option value="system">Adaptive (System)</option>
|
|
||||||
<option value="dark">Dark Theme</option>
|
|
||||||
<option value="light">Light Theme</option>
|
|
||||||
</select>
|
|
||||||
</zot>
|
|
||||||
|
|
||||||
<zot label="Background Image URL">
|
|
||||||
<input
|
|
||||||
className="recovery-input"
|
|
||||||
value={form.nebula_background_url}
|
|
||||||
onChange={e => setForm({...form, nebula_background_url: e.target.value})}
|
|
||||||
placeholder="Direct link to background image"
|
|
||||||
/>
|
|
||||||
</zot>
|
|
||||||
|
|
||||||
<zot label="Metrics API Domain">
|
|
||||||
<input
|
|
||||||
className="recovery-input"
|
|
||||||
value={form.nebula_metrics_base_url}
|
|
||||||
onChange={e => setForm({...form, nebula_metrics_base_url: e.target.value})}
|
|
||||||
placeholder="https://stats.example.com"
|
|
||||||
/>
|
|
||||||
</zot>
|
|
||||||
|
|
||||||
<zot label="Light Mode Logo">
|
|
||||||
<input
|
|
||||||
className="recovery-input"
|
|
||||||
value={form.nebula_light_logo_url}
|
|
||||||
onChange={e => setForm({...form, nebula_light_logo_url: e.target.value})}
|
|
||||||
placeholder="Logo for light mode"
|
|
||||||
/>
|
|
||||||
</zot>
|
|
||||||
|
|
||||||
<zot label="Dark Mode Logo">
|
|
||||||
<input
|
|
||||||
className="recovery-input"
|
|
||||||
value={form.nebula_dark_logo_url}
|
|
||||||
onChange={e => setForm({...form, nebula_dark_logo_url: e.target.value})}
|
|
||||||
placeholder="Logo for dark mode"
|
|
||||||
/>
|
|
||||||
</zot>
|
|
||||||
|
|
||||||
<zot label="Static CDN Assets" span={2}>
|
|
||||||
<input
|
|
||||||
className="recovery-input"
|
|
||||||
value={form.nebula_static_cdn_url}
|
|
||||||
onChange={e => setForm({...form, nebula_static_cdn_url: e.target.value})}
|
|
||||||
placeholder="e.g. https://cdn.example.com/nebula (no trailing slash)"
|
|
||||||
/>
|
|
||||||
</zot>
|
|
||||||
|
|
||||||
<zot label="Custom Scripts / CSS" span={2}>
|
|
||||||
<textarea
|
|
||||||
className="recovery-input"
|
|
||||||
rows={6}
|
|
||||||
value={form.nebula_custom_html}
|
|
||||||
onChange={e => setForm({...form, nebula_custom_html: e.target.value})}
|
|
||||||
placeholder="Add analytics codes or custom styles here"
|
|
||||||
style={{ fontFamily: 'monospace' }}
|
|
||||||
/>
|
|
||||||
</zot>
|
|
||||||
|
|
||||||
<div className="span-2" style={{ marginTop: '2rem', display: 'flex', justifyContent: 'flex-end', borderTop: '1px solid var(--border-soft)', paddingTop: '1.5rem' }}>
|
|
||||||
<button type="submit" className="primary-btn" disabled={saving}>
|
|
||||||
{saving ? "Persisting..." : "Save Configuration"}
|
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</Hot>
|
||||||
|
<zot>
|
||||||
|
<div className="space-y-6">
|
||||||
|
<header className="space-y-2">
|
||||||
|
<h1 className="text-2xl font-bold tracking-tight">Nebula Theme</h1>
|
||||||
|
<p className="text-muted-foreground">
|
||||||
|
Configure Nebula theme colors, copywriting, branding assets, and custom injections.
|
||||||
|
</p>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
{message ? (
|
||||||
|
<div
|
||||||
|
className={
|
||||||
|
messageType === "success"
|
||||||
|
? "rounded-lg border border-emerald-500/30 bg-emerald-500/10 px-4 py-3 text-sm text-emerald-600"
|
||||||
|
: "rounded-lg border border-destructive/30 bg-destructive/10 px-4 py-3 text-sm text-destructive"
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{message}
|
||||||
|
</div>
|
||||||
|
) : null}
|
||||||
|
|
||||||
|
<Card
|
||||||
|
title="Display"
|
||||||
|
description="Set the primary color, theme mode, and hero copy shown by Nebula."
|
||||||
|
>
|
||||||
|
{loading ? (
|
||||||
|
<div className="rounded-lg border border-dashed bg-muted/30 px-4 py-8 text-sm text-muted-foreground">
|
||||||
|
Loading Nebula settings...
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
|
<div className="grid gap-4 md:grid-cols-2">
|
||||||
|
<Field label="Theme palette" description="Controls the default Nebula color palette.">
|
||||||
|
<select
|
||||||
|
className="flex h-9 w-full appearance-none rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
|
||||||
|
value={form.nebula_theme_color}
|
||||||
|
onChange={(event) => updateField("nebula_theme_color", event.target.value)}
|
||||||
|
>
|
||||||
|
{themeColorOptions.map((item) => (
|
||||||
|
<option key={item.value} value={item.value}>
|
||||||
|
{item.label}
|
||||||
|
</option>
|
||||||
|
))}
|
||||||
|
</select>
|
||||||
|
</Field>
|
||||||
|
|
||||||
|
<Field
|
||||||
|
label="Theme mode"
|
||||||
|
description="Applied when a user opens the Nebula frontend for the first time."
|
||||||
|
>
|
||||||
|
<select
|
||||||
|
className="flex h-9 w-full appearance-none rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
|
||||||
|
value={form.nebula_default_theme_mode}
|
||||||
|
onChange={(event) =>
|
||||||
|
updateField("nebula_default_theme_mode", event.target.value)
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{themeModeOptions.map((item) => (
|
||||||
|
<option key={item.value} value={item.value}>
|
||||||
|
{item.label}
|
||||||
|
</option>
|
||||||
|
))}
|
||||||
|
</select>
|
||||||
|
</Field>
|
||||||
|
|
||||||
|
<Field label="Hero slogan" description="Shown as the main title in the hero area.">
|
||||||
|
<input
|
||||||
|
className="flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
|
||||||
|
value={form.nebula_hero_slogan}
|
||||||
|
onChange={(event) => updateField("nebula_hero_slogan", event.target.value)}
|
||||||
|
/>
|
||||||
|
</Field>
|
||||||
|
|
||||||
|
<Field label="Welcome target" description="Appended after the Welcome to heading.">
|
||||||
|
<input
|
||||||
|
className="flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
|
||||||
|
value={form.nebula_welcome_target}
|
||||||
|
onChange={(event) => updateField("nebula_welcome_target", event.target.value)}
|
||||||
|
/>
|
||||||
|
</Field>
|
||||||
|
|
||||||
|
<Field label="Register title" description="Displayed at the top of the register panel.">
|
||||||
|
<input
|
||||||
|
className="flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
|
||||||
|
value={form.nebula_register_title}
|
||||||
|
onChange={(event) => updateField("nebula_register_title", event.target.value)}
|
||||||
|
/>
|
||||||
|
</Field>
|
||||||
|
|
||||||
|
<Field
|
||||||
|
label="Metrics API URL"
|
||||||
|
description="Base URL used when Nebula shows public metrics before login."
|
||||||
|
>
|
||||||
|
<input
|
||||||
|
className="flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
|
||||||
|
value={form.nebula_metrics_base_url}
|
||||||
|
onChange={(event) => updateField("nebula_metrics_base_url", event.target.value)}
|
||||||
|
/>
|
||||||
|
</Field>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</Card>
|
||||||
|
|
||||||
|
<Card
|
||||||
|
title="Branding"
|
||||||
|
description="Set background assets, logo URLs, CDN roots, and custom HTML."
|
||||||
|
>
|
||||||
|
<div className="grid gap-4 md:grid-cols-2">
|
||||||
|
<Field label="Background URL" description="Used by the Nebula login or landing background.">
|
||||||
|
<input
|
||||||
|
className="flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
|
||||||
|
value={form.nebula_background_url}
|
||||||
|
onChange={(event) => updateField("nebula_background_url", event.target.value)}
|
||||||
|
/>
|
||||||
|
</Field>
|
||||||
|
|
||||||
|
<Field label="Static CDN URL" description="Root CDN path for Nebula static assets.">
|
||||||
|
<input
|
||||||
|
className="flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
|
||||||
|
value={form.nebula_static_cdn_url}
|
||||||
|
onChange={(event) => updateField("nebula_static_cdn_url", event.target.value)}
|
||||||
|
/>
|
||||||
|
</Field>
|
||||||
|
|
||||||
|
<Field label="Light logo URL" description="Displayed while the light theme is active.">
|
||||||
|
<input
|
||||||
|
className="flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
|
||||||
|
value={form.nebula_light_logo_url}
|
||||||
|
onChange={(event) => updateField("nebula_light_logo_url", event.target.value)}
|
||||||
|
/>
|
||||||
|
</Field>
|
||||||
|
|
||||||
|
<Field label="Dark logo URL" description="Displayed while the dark theme is active.">
|
||||||
|
<input
|
||||||
|
className="flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
|
||||||
|
value={form.nebula_dark_logo_url}
|
||||||
|
onChange={(event) => updateField("nebula_dark_logo_url", event.target.value)}
|
||||||
|
/>
|
||||||
|
</Field>
|
||||||
|
|
||||||
|
<Field
|
||||||
|
label="Custom HTML / scripts"
|
||||||
|
description="Inject custom HTML, scripts, or styles into Nebula pages."
|
||||||
|
span={2}
|
||||||
|
>
|
||||||
|
<textarea
|
||||||
|
className="min-h-[220px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-xs shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
|
||||||
|
value={form.nebula_custom_html}
|
||||||
|
onChange={(event) => updateField("nebula_custom_html", event.target.value)}
|
||||||
|
/>
|
||||||
|
</Field>
|
||||||
|
</div>
|
||||||
|
</Card>
|
||||||
|
</div>
|
||||||
|
</zot>
|
||||||
</Wot>
|
</Wot>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -157,6 +157,7 @@ func getAllConfigMappings() gin.H {
|
|||||||
"default_remind_traffic": service.MustGetBool("default_remind_traffic", true),
|
"default_remind_traffic": service.MustGetBool("default_remind_traffic", true),
|
||||||
"subscribe_path": service.MustGetString("subscribe_path", "s"),
|
"subscribe_path": service.MustGetString("subscribe_path", "s"),
|
||||||
},
|
},
|
||||||
|
"subscribe_template": service.GetAllSubscribeTemplates(),
|
||||||
"frontend": gin.H{
|
"frontend": gin.H{
|
||||||
"frontend_theme": service.MustGetString("frontend_theme", "Xboard"),
|
"frontend_theme": service.MustGetString("frontend_theme", "Xboard"),
|
||||||
"frontend_theme_sidebar": service.MustGetString("frontend_theme_sidebar", "light"),
|
"frontend_theme_sidebar": service.MustGetString("frontend_theme_sidebar", "light"),
|
||||||
@@ -320,6 +321,9 @@ func settingGroupName(name string) string {
|
|||||||
"renew_order_event_id", "change_order_event_id", "show_info_to_server_enable",
|
"renew_order_event_id", "change_order_event_id", "show_info_to_server_enable",
|
||||||
"show_protocol_to_server_enable", "default_remind_expire", "default_remind_traffic", "subscribe_path":
|
"show_protocol_to_server_enable", "default_remind_expire", "default_remind_traffic", "subscribe_path":
|
||||||
return "subscribe"
|
return "subscribe"
|
||||||
|
case "subscribe_template_singbox", "subscribe_template_clash", "subscribe_template_clashmeta",
|
||||||
|
"subscribe_template_stash", "subscribe_template_surge", "subscribe_template_surfboard":
|
||||||
|
return "subscribe_template"
|
||||||
case "frontend_theme", "frontend_theme_sidebar", "frontend_theme_header", "frontend_theme_color", "frontend_background_url":
|
case "frontend_theme", "frontend_theme_sidebar", "frontend_theme_header", "frontend_theme_color", "frontend_background_url":
|
||||||
return "frontend"
|
return "frontend"
|
||||||
case "server_token", "server_pull_interval", "server_push_interval", "device_limit_mode", "server_ws_enable", "server_ws_url":
|
case "server_token", "server_pull_interval", "server_push_interval", "device_limit_mode", "server_ws_enable", "server_ws_url":
|
||||||
|
|||||||
@@ -579,8 +579,13 @@ func AdminUsersFetch(c *gin.Context) {
|
|||||||
page := parsePositiveInt(firstString(params["page"], params["current"]), 1)
|
page := parsePositiveInt(firstString(params["page"], params["current"]), 1)
|
||||||
perPage := parsePositiveInt(firstString(params["per_page"], params["pageSize"]), 50)
|
perPage := parsePositiveInt(firstString(params["per_page"], params["pageSize"]), 50)
|
||||||
keyword := strings.TrimSpace(params["keyword"])
|
keyword := strings.TrimSpace(params["keyword"])
|
||||||
|
suffix := service.GetPluginConfigString(service.PluginUserAddIPv6, "email_suffix", "-ipv6")
|
||||||
|
shadowPattern := "%" + suffix + "@%"
|
||||||
|
|
||||||
query := database.DB.Model(&model.User{}).Preload("Plan").Order("id DESC")
|
query := database.DB.Model(&model.User{}).
|
||||||
|
Preload("Plan").
|
||||||
|
Where("email NOT LIKE ?", shadowPattern).
|
||||||
|
Order("id DESC")
|
||||||
if keyword != "" {
|
if keyword != "" {
|
||||||
query = query.Where("email LIKE ? OR CAST(id AS CHAR) = ?", "%"+keyword+"%", keyword)
|
query = query.Where("email LIKE ? OR CAST(id AS CHAR) = ?", "%"+keyword+"%", keyword)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,16 +39,37 @@ func FulfillSubscription(c *gin.Context, user *model.User) {
|
|||||||
|
|
||||||
ua := c.GetHeader("User-Agent")
|
ua := c.GetHeader("User-Agent")
|
||||||
flag := c.Query("flag")
|
flag := c.Query("flag")
|
||||||
|
uaLower := strings.ToLower(ua)
|
||||||
|
|
||||||
// 2. Handle specialized configs
|
// 2. Handle specialized configs
|
||||||
if strings.Contains(ua, "Clash") || flag == "clash" {
|
if strings.Contains(uaLower, "stash") || flag == "stash" {
|
||||||
config, _ := protocol.GenerateClash(servers, *user)
|
config, _ := protocol.GenerateClashWithTemplate("stash", servers, *user)
|
||||||
c.Header("Content-Type", "application/octet-stream")
|
c.Header("Content-Type", "application/octet-stream")
|
||||||
c.String(http.StatusOK, config)
|
c.String(http.StatusOK, config)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if strings.Contains(strings.ToLower(ua), "sing-box") || flag == "sing-box" {
|
if strings.Contains(uaLower, "clashmeta") ||
|
||||||
|
strings.Contains(uaLower, "clash meta") ||
|
||||||
|
strings.Contains(uaLower, "metacubex") ||
|
||||||
|
strings.Contains(uaLower, "verge") ||
|
||||||
|
strings.Contains(uaLower, "flclash") ||
|
||||||
|
strings.Contains(uaLower, "nekobox") ||
|
||||||
|
flag == "clashmeta" || flag == "clash-meta" {
|
||||||
|
config, _ := protocol.GenerateClashWithTemplate("clashmeta", servers, *user)
|
||||||
|
c.Header("Content-Type", "application/octet-stream")
|
||||||
|
c.String(http.StatusOK, config)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if strings.Contains(ua, "Clash") || flag == "clash" {
|
||||||
|
config, _ := protocol.GenerateClashWithTemplate("clash", servers, *user)
|
||||||
|
c.Header("Content-Type", "application/octet-stream")
|
||||||
|
c.String(http.StatusOK, config)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if strings.Contains(uaLower, "sing-box") || flag == "sing-box" {
|
||||||
config, _ := protocol.GenerateSingBox(servers, *user)
|
config, _ := protocol.GenerateSingBox(servers, *user)
|
||||||
c.Header("Content-Type", "application/json; charset=utf-8")
|
c.Header("Content-Type", "application/json; charset=utf-8")
|
||||||
c.String(http.StatusOK, config)
|
c.String(http.StatusOK, config)
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package handler
|
package handler
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
"xboard-go/internal/database"
|
"xboard-go/internal/database"
|
||||||
@@ -11,6 +13,31 @@ import (
|
|||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func ipv6StatusPresentation(status string, allowed bool) (string, string, string) {
|
||||||
|
status = strings.TrimSpace(strings.ToLower(status))
|
||||||
|
switch status {
|
||||||
|
case "active":
|
||||||
|
return "active", "IPv6 enabled", ""
|
||||||
|
case "eligible":
|
||||||
|
return "eligible", "Ready to enable", ""
|
||||||
|
case "", "not_allowed", "not_eligible", "disallowed":
|
||||||
|
if allowed {
|
||||||
|
return "eligible", "Ready to enable", ""
|
||||||
|
}
|
||||||
|
return "not_allowed", "Not eligible", "Current plan or group is not allowed to enable IPv6"
|
||||||
|
default:
|
||||||
|
label := strings.ReplaceAll(strings.Title(strings.ReplaceAll(status, "_", " ")), "Ipv6", "IPv6")
|
||||||
|
if strings.EqualFold(label, "Not Allowed") {
|
||||||
|
label = "Not eligible"
|
||||||
|
}
|
||||||
|
reason := ""
|
||||||
|
if !allowed && (status == "not_allowed" || status == "not_eligible") {
|
||||||
|
reason = "Current plan or group is not allowed to enable IPv6"
|
||||||
|
}
|
||||||
|
return status, label, reason
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func PluginUserOnlineDevicesUsers(c *gin.Context) {
|
func PluginUserOnlineDevicesUsers(c *gin.Context) {
|
||||||
|
|
||||||
page := parsePositiveInt(c.DefaultQuery("page", "1"), 1)
|
page := parsePositiveInt(c.DefaultQuery("page", "1"), 1)
|
||||||
@@ -165,7 +192,7 @@ func AdminIPv6SubscriptionUsers(c *gin.Context) {
|
|||||||
shadowByParentID := make(map[int]model.User, len(userIDs))
|
shadowByParentID := make(map[int]model.User, len(userIDs))
|
||||||
if len(userIDs) > 0 {
|
if len(userIDs) > 0 {
|
||||||
var shadowUsers []model.User
|
var shadowUsers []model.User
|
||||||
if err := database.DB.Where("parent_id IN ?", userIDs).Find(&shadowUsers).Error; err == nil {
|
if err := database.DB.Preload("Plan").Where("parent_id IN ?", userIDs).Find(&shadowUsers).Error; err == nil {
|
||||||
for _, shadow := range shadowUsers {
|
for _, shadow := range shadowUsers {
|
||||||
if shadow.ParentID != nil {
|
if shadow.ParentID != nil {
|
||||||
shadowByParentID[*shadow.ParentID] = shadow
|
shadowByParentID[*shadow.ParentID] = shadow
|
||||||
@@ -173,6 +200,17 @@ func AdminIPv6SubscriptionUsers(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
shadowPlanID := parsePositiveInt(
|
||||||
|
service.GetPluginConfigString(service.PluginUserAddIPv6, "ipv6_plan_id", "0"),
|
||||||
|
0,
|
||||||
|
)
|
||||||
|
planNames := make(map[int]string)
|
||||||
|
var plans []model.Plan
|
||||||
|
if err := database.DB.Select("id", "name").Find(&plans).Error; err == nil {
|
||||||
|
for _, plan := range plans {
|
||||||
|
planNames[plan.ID] = plan.Name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
list := make([]gin.H, 0, len(users))
|
list := make([]gin.H, 0, len(users))
|
||||||
for _, user := range users {
|
for _, user := range users {
|
||||||
@@ -191,32 +229,30 @@ func AdminIPv6SubscriptionUsers(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
allowed := service.PluginUserAllowed(&user, user.Plan)
|
allowed := service.PluginUserAllowed(&user, user.Plan)
|
||||||
status := "not_allowed"
|
status := "not_allowed"
|
||||||
statusLabel := "Not eligible"
|
planID := shadowPlanID
|
||||||
if allowed {
|
planNameValue := planNames[shadowPlanID]
|
||||||
status = "eligible"
|
if hasShadowUser {
|
||||||
statusLabel = "Ready to enable"
|
planID = intFromPointer(shadowUser.PlanID)
|
||||||
|
planNameValue = planName(shadowUser.Plan)
|
||||||
}
|
}
|
||||||
shadowUserID := 0
|
shadowUserID := 0
|
||||||
shadowUpdatedAt := int64(0)
|
shadowUpdatedAt := int64(0)
|
||||||
if hasSubscription {
|
if hasSubscription {
|
||||||
status = firstString(subscription.Status, status)
|
status = firstString(subscription.Status, status)
|
||||||
statusLabel = "IPv6 enabled"
|
|
||||||
if subscription.Status != "active" && subscription.Status != "" {
|
|
||||||
statusLabel = strings.ReplaceAll(strings.Title(strings.ReplaceAll(subscription.Status, "_", " ")), "Ipv6", "IPv6")
|
|
||||||
}
|
|
||||||
if subscription.ShadowUserID != nil {
|
if subscription.ShadowUserID != nil {
|
||||||
shadowUserID = *subscription.ShadowUserID
|
shadowUserID = *subscription.ShadowUserID
|
||||||
}
|
}
|
||||||
shadowUpdatedAt = subscription.UpdatedAt
|
shadowUpdatedAt = subscription.UpdatedAt
|
||||||
} else if allowed {
|
|
||||||
statusLabel = "Ready to enable"
|
|
||||||
}
|
}
|
||||||
|
effectiveAllowed := allowed || hasSubscription && subscription.Allowed
|
||||||
|
status, statusLabel, _ := ipv6StatusPresentation(status, effectiveAllowed)
|
||||||
|
|
||||||
list = append(list, gin.H{
|
list = append(list, gin.H{
|
||||||
"id": user.ID,
|
"id": user.ID,
|
||||||
"email": user.Email,
|
"email": user.Email,
|
||||||
"plan_name": planName(user.Plan),
|
"plan_id": planID,
|
||||||
"allowed": allowed || hasSubscription && subscription.Allowed,
|
"plan_name": firstString(planNameValue, "-"),
|
||||||
|
"allowed": effectiveAllowed,
|
||||||
"is_active": hasSubscription && subscription.Status == "active",
|
"is_active": hasSubscription && subscription.Status == "active",
|
||||||
"status": status,
|
"status": status,
|
||||||
"status_label": statusLabel,
|
"status_label": statusLabel,
|
||||||
@@ -238,6 +274,71 @@ func AdminIPv6SubscriptionUsers(c *gin.Context) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func AdminIPv6SubscriptionConfigFetch(c *gin.Context) {
|
||||||
|
cfg := service.GetPluginConfig(service.PluginUserAddIPv6)
|
||||||
|
Success(c, gin.H{
|
||||||
|
"ipv6_plan_id": parsePositiveInt(service.GetPluginConfigString(service.PluginUserAddIPv6, "ipv6_plan_id", "0"), 0),
|
||||||
|
"allowed_plans": service.GetPluginConfigIntList(service.PluginUserAddIPv6, "allowed_plans"),
|
||||||
|
"allowed_groups": service.GetPluginConfigIntList(service.PluginUserAddIPv6, "allowed_groups"),
|
||||||
|
"email_suffix": firstString(stringFromAny(cfg["email_suffix"]), "-ipv6"),
|
||||||
|
"reference_flag": firstString(stringFromAny(cfg["reference_flag"]), "ipv6"),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func AdminIPv6SubscriptionConfigSave(c *gin.Context) {
|
||||||
|
var payload struct {
|
||||||
|
IPv6PlanID int `json:"ipv6_plan_id"`
|
||||||
|
}
|
||||||
|
if err := c.ShouldBindJSON(&payload); err != nil {
|
||||||
|
Fail(c, http.StatusBadRequest, "invalid request body")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var plugin model.Plugin
|
||||||
|
err := database.DB.Where("code = ?", service.PluginUserAddIPv6).First(&plugin).Error
|
||||||
|
if err != nil {
|
||||||
|
plugin = model.Plugin{
|
||||||
|
Code: service.PluginUserAddIPv6,
|
||||||
|
Name: "IPv6 Subscription",
|
||||||
|
IsEnabled: true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cfg := service.GetPluginConfig(service.PluginUserAddIPv6)
|
||||||
|
if payload.IPv6PlanID > 0 {
|
||||||
|
cfg["ipv6_plan_id"] = payload.IPv6PlanID
|
||||||
|
} else {
|
||||||
|
delete(cfg, "ipv6_plan_id")
|
||||||
|
}
|
||||||
|
|
||||||
|
raw, marshalErr := json.Marshal(cfg)
|
||||||
|
if marshalErr != nil {
|
||||||
|
Fail(c, http.StatusInternalServerError, "failed to encode plugin config")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
configText := string(raw)
|
||||||
|
plugin.Config = &configText
|
||||||
|
|
||||||
|
if plugin.ID > 0 {
|
||||||
|
if updateErr := database.DB.Model(&model.Plugin{}).Where("id = ?", plugin.ID).Updates(map[string]any{
|
||||||
|
"config": plugin.Config,
|
||||||
|
"is_enabled": plugin.IsEnabled,
|
||||||
|
}).Error; updateErr != nil {
|
||||||
|
Fail(c, http.StatusInternalServerError, "failed to save plugin config")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if createErr := database.DB.Create(&plugin).Error; createErr != nil {
|
||||||
|
Fail(c, http.StatusInternalServerError, "failed to create plugin config")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Success(c, gin.H{
|
||||||
|
"ipv6_plan_id": payload.IPv6PlanID,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func AdminIPv6SubscriptionEnable(c *gin.Context) {
|
func AdminIPv6SubscriptionEnable(c *gin.Context) {
|
||||||
userID := parsePositiveInt(c.Param("userId"), 0)
|
userID := parsePositiveInt(c.Param("userId"), 0)
|
||||||
if userID == 0 {
|
if userID == 0 {
|
||||||
@@ -346,24 +447,14 @@ func PluginUserAddIPv6Check(c *gin.Context) {
|
|||||||
hasSubscription := database.DB.Where("user_id = ?", user.ID).First(&subscription).Error == nil
|
hasSubscription := database.DB.Where("user_id = ?", user.ID).First(&subscription).Error == nil
|
||||||
allowed := service.PluginUserAllowed(user, plan)
|
allowed := service.PluginUserAllowed(user, plan)
|
||||||
status := "not_allowed"
|
status := "not_allowed"
|
||||||
statusLabel := "Not eligible"
|
|
||||||
reason := "Current plan or group is not allowed to enable IPv6"
|
|
||||||
if allowed {
|
|
||||||
status = "eligible"
|
|
||||||
statusLabel = "Ready to enable"
|
|
||||||
reason = ""
|
|
||||||
}
|
|
||||||
if hasSubscription {
|
if hasSubscription {
|
||||||
status = firstString(subscription.Status, "active")
|
status = firstString(subscription.Status, "active")
|
||||||
statusLabel = "IPv6 enabled"
|
|
||||||
reason = ""
|
|
||||||
if subscription.Status != "active" && subscription.Status != "" {
|
|
||||||
statusLabel = strings.ReplaceAll(strings.Title(strings.ReplaceAll(subscription.Status, "_", " ")), "Ipv6", "IPv6")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
effectiveAllowed := allowed || hasSubscription && subscription.Allowed
|
||||||
|
status, statusLabel, reason := ipv6StatusPresentation(status, effectiveAllowed)
|
||||||
|
|
||||||
Success(c, gin.H{
|
Success(c, gin.H{
|
||||||
"allowed": allowed || hasSubscription && subscription.Allowed,
|
"allowed": effectiveAllowed,
|
||||||
"is_active": hasSubscription && subscription.Status == "active",
|
"is_active": hasSubscription && subscription.Status == "active",
|
||||||
"status": status,
|
"status": status,
|
||||||
"status_label": statusLabel,
|
"status_label": statusLabel,
|
||||||
|
|||||||
@@ -5,37 +5,195 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"xboard-go/internal/model"
|
"xboard-go/internal/model"
|
||||||
"xboard-go/internal/service"
|
"xboard-go/internal/service"
|
||||||
|
|
||||||
|
"github.com/goccy/go-yaml"
|
||||||
)
|
)
|
||||||
|
|
||||||
func GenerateClash(servers []model.Server, user model.User) (string, error) {
|
func GenerateClash(servers []model.Server, user model.User) (string, error) {
|
||||||
|
return GenerateClashWithTemplate("clash", servers, user)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GenerateClashWithTemplate(templateName string, servers []model.Server, user model.User) (string, error) {
|
||||||
|
template := strings.TrimSpace(service.GetSubscribeTemplate(templateName))
|
||||||
|
if template == "" {
|
||||||
|
return generateClashFallback(servers, user), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var config map[string]any
|
||||||
|
if err := yaml.Unmarshal([]byte(template), &config); err != nil {
|
||||||
|
return generateClashFallback(servers, user), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
proxies := make([]any, 0, len(servers))
|
||||||
|
proxyNames := make([]string, 0, len(servers))
|
||||||
|
for _, s := range servers {
|
||||||
|
conf := service.BuildNodeConfig(&s)
|
||||||
|
proxy := buildClashProxy(conf, user)
|
||||||
|
if proxy == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
proxies = append(proxies, proxy)
|
||||||
|
proxyNames = append(proxyNames, conf.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
config["proxies"] = append(anySlice(config["proxies"]), proxies...)
|
||||||
|
config["proxy-groups"] = mergeClashProxyGroups(anySlice(config["proxy-groups"]), proxyNames)
|
||||||
|
|
||||||
|
if _, ok := config["rules"]; !ok {
|
||||||
|
config["rules"] = []any{"MATCH,Proxy"}
|
||||||
|
}
|
||||||
|
|
||||||
|
data, err := yaml.Marshal(config)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
output := strings.ReplaceAll(string(data), "$app_name", service.MustGetString("app_name", "XBoard"))
|
||||||
|
return output, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func buildClashProxy(conf service.NodeServerConfig, user model.User) map[string]any {
|
||||||
|
switch conf.Protocol {
|
||||||
|
case "shadowsocks":
|
||||||
|
cipher, _ := conf.Cipher.(string)
|
||||||
|
return map[string]any{
|
||||||
|
"name": conf.Name,
|
||||||
|
"type": "ss",
|
||||||
|
"server": conf.RawHost,
|
||||||
|
"port": conf.ServerPort,
|
||||||
|
"cipher": cipher,
|
||||||
|
"password": user.UUID,
|
||||||
|
}
|
||||||
|
case "vmess":
|
||||||
|
return map[string]any{
|
||||||
|
"name": conf.Name,
|
||||||
|
"type": "vmess",
|
||||||
|
"server": conf.RawHost,
|
||||||
|
"port": conf.ServerPort,
|
||||||
|
"uuid": user.UUID,
|
||||||
|
"alterId": 0,
|
||||||
|
"cipher": "auto",
|
||||||
|
"udp": true,
|
||||||
|
}
|
||||||
|
case "trojan":
|
||||||
|
return map[string]any{
|
||||||
|
"name": conf.Name,
|
||||||
|
"type": "trojan",
|
||||||
|
"server": conf.RawHost,
|
||||||
|
"port": conf.ServerPort,
|
||||||
|
"password": user.UUID,
|
||||||
|
"udp": true,
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func mergeClashProxyGroups(groups []any, proxyNames []string) []any {
|
||||||
|
if len(groups) == 0 {
|
||||||
|
return []any{
|
||||||
|
map[string]any{
|
||||||
|
"name": "Proxy",
|
||||||
|
"type": "select",
|
||||||
|
"proxies": append([]any{"DIRECT"}, stringsToAny(proxyNames)...),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for index, item := range groups {
|
||||||
|
group, ok := item.(map[string]any)
|
||||||
|
if !ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
group["proxies"] = appendUniqueAny(anySlice(group["proxies"]), stringsToAny(proxyNames)...)
|
||||||
|
groups[index] = group
|
||||||
|
}
|
||||||
|
return groups
|
||||||
|
}
|
||||||
|
|
||||||
|
func anySlice(value any) []any {
|
||||||
|
switch typed := value.(type) {
|
||||||
|
case nil:
|
||||||
|
return []any{}
|
||||||
|
case []any:
|
||||||
|
return append([]any{}, typed...)
|
||||||
|
case []string:
|
||||||
|
result := make([]any, 0, len(typed))
|
||||||
|
for _, item := range typed {
|
||||||
|
result = append(result, item)
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
default:
|
||||||
|
return []any{}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func stringsToAny(values []string) []any {
|
||||||
|
result := make([]any, 0, len(values))
|
||||||
|
for _, value := range values {
|
||||||
|
result = append(result, value)
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
func appendUniqueAny(base []any, values ...any) []any {
|
||||||
|
existing := make(map[string]struct{}, len(base))
|
||||||
|
for _, item := range base {
|
||||||
|
existing[fmt.Sprint(item)] = struct{}{}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, item := range values {
|
||||||
|
key := fmt.Sprint(item)
|
||||||
|
if _, ok := existing[key]; ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
base = append(base, item)
|
||||||
|
existing[key] = struct{}{}
|
||||||
|
}
|
||||||
|
return base
|
||||||
|
}
|
||||||
|
|
||||||
|
func generateClashFallback(servers []model.Server, user model.User) string {
|
||||||
var builder strings.Builder
|
var builder strings.Builder
|
||||||
|
|
||||||
builder.WriteString("proxies:\n")
|
builder.WriteString("proxies:\n")
|
||||||
var proxyNames []string
|
var proxyNames []string
|
||||||
for _, s := range servers {
|
for _, s := range servers {
|
||||||
conf := service.BuildNodeConfig(&s)
|
conf := service.BuildNodeConfig(&s)
|
||||||
proxy := ""
|
proxy := buildClashProxy(conf, user)
|
||||||
|
if proxy == nil {
|
||||||
switch conf.Protocol {
|
|
||||||
case "shadowsocks":
|
|
||||||
cipher := ""
|
|
||||||
if c, ok := conf.Cipher.(string); ok { cipher = c }
|
|
||||||
proxy = fmt.Sprintf(" - name: \"%s\"\n type: ss\n server: %s\n port: %d\n cipher: %s\n password: %s\n",
|
|
||||||
conf.Name, conf.RawHost, conf.ServerPort, cipher, user.UUID)
|
|
||||||
case "vmess":
|
|
||||||
proxy = fmt.Sprintf(" - name: \"%s\"\n type: vmess\n server: %s\n port: %d\n uuid: %s\n alterId: 0\n cipher: auto\n udp: true\n",
|
|
||||||
conf.Name, conf.RawHost, conf.ServerPort, user.UUID)
|
|
||||||
case "trojan":
|
|
||||||
proxy = fmt.Sprintf(" - name: \"%s\"\n type: trojan\n server: %s\n port: %d\n password: %s\n udp: true\n",
|
|
||||||
conf.Name, conf.RawHost, conf.ServerPort, user.UUID)
|
|
||||||
default:
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if proxy != "" {
|
switch proxy["type"] {
|
||||||
builder.WriteString(proxy)
|
case "ss":
|
||||||
proxyNames = append(proxyNames, fmt.Sprintf("\"%s\"", conf.Name))
|
builder.WriteString(fmt.Sprintf(
|
||||||
|
" - name: \"%s\"\n type: ss\n server: %s\n port: %d\n cipher: %s\n password: %s\n",
|
||||||
|
conf.Name,
|
||||||
|
conf.RawHost,
|
||||||
|
conf.ServerPort,
|
||||||
|
fmt.Sprint(proxy["cipher"]),
|
||||||
|
user.UUID,
|
||||||
|
))
|
||||||
|
case "vmess":
|
||||||
|
builder.WriteString(fmt.Sprintf(
|
||||||
|
" - name: \"%s\"\n type: vmess\n server: %s\n port: %d\n uuid: %s\n alterId: 0\n cipher: auto\n udp: true\n",
|
||||||
|
conf.Name,
|
||||||
|
conf.RawHost,
|
||||||
|
conf.ServerPort,
|
||||||
|
user.UUID,
|
||||||
|
))
|
||||||
|
case "trojan":
|
||||||
|
builder.WriteString(fmt.Sprintf(
|
||||||
|
" - name: \"%s\"\n type: trojan\n server: %s\n port: %d\n password: %s\n udp: true\n",
|
||||||
|
conf.Name,
|
||||||
|
conf.RawHost,
|
||||||
|
conf.ServerPort,
|
||||||
|
user.UUID,
|
||||||
|
))
|
||||||
}
|
}
|
||||||
|
proxyNames = append(proxyNames, fmt.Sprintf("\"%s\"", conf.Name))
|
||||||
}
|
}
|
||||||
|
|
||||||
builder.WriteString("\nproxy-groups:\n")
|
builder.WriteString("\nproxy-groups:\n")
|
||||||
@@ -47,5 +205,5 @@ func GenerateClash(servers []model.Server, user model.User) (string, error) {
|
|||||||
builder.WriteString("\nrules:\n")
|
builder.WriteString("\nrules:\n")
|
||||||
builder.WriteString(" - MATCH,Proxy\n")
|
builder.WriteString(" - MATCH,Proxy\n")
|
||||||
|
|
||||||
return builder.String(), nil
|
return builder.String()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,81 @@ type SingBoxConfig struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func GenerateSingBox(servers []model.Server, user model.User) (string, error) {
|
func GenerateSingBox(servers []model.Server, user model.User) (string, error) {
|
||||||
|
template := service.GetSubscribeTemplate("singbox")
|
||||||
|
if template == "" {
|
||||||
|
return generateSingBoxFallback(servers, user)
|
||||||
|
}
|
||||||
|
|
||||||
|
var config map[string]any
|
||||||
|
if err := json.Unmarshal([]byte(template), &config); err != nil {
|
||||||
|
return generateSingBoxFallback(servers, user)
|
||||||
|
}
|
||||||
|
|
||||||
|
outbounds := make([]any, 0, len(servers))
|
||||||
|
proxyTags := make([]string, 0, len(servers))
|
||||||
|
for _, s := range servers {
|
||||||
|
conf := service.BuildNodeConfig(&s)
|
||||||
|
outbound := buildSingBoxOutbound(conf, user)
|
||||||
|
if outbound == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
outbounds = append(outbounds, outbound)
|
||||||
|
proxyTags = append(proxyTags, conf.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
existingOutbounds := anySlice(config["outbounds"])
|
||||||
|
for index, item := range existingOutbounds {
|
||||||
|
outbound, ok := item.(map[string]any)
|
||||||
|
if !ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
outboundType, _ := outbound["type"].(string)
|
||||||
|
if outboundType != "selector" && outboundType != "urltest" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
outbound["outbounds"] = appendUniqueAny(anySlice(outbound["outbounds"]), stringsToAny(proxyTags)...)
|
||||||
|
existingOutbounds[index] = outbound
|
||||||
|
}
|
||||||
|
|
||||||
|
config["outbounds"] = append(existingOutbounds, outbounds...)
|
||||||
|
|
||||||
|
data, err := json.MarshalIndent(config, "", " ")
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return string(data), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func buildSingBoxOutbound(conf service.NodeServerConfig, user model.User) map[string]any {
|
||||||
|
outbound := map[string]any{
|
||||||
|
"tag": conf.Name,
|
||||||
|
"server": conf.RawHost,
|
||||||
|
"server_port": conf.ServerPort,
|
||||||
|
}
|
||||||
|
|
||||||
|
switch conf.Protocol {
|
||||||
|
case "shadowsocks":
|
||||||
|
outbound["type"] = "shadowsocks"
|
||||||
|
outbound["method"] = conf.Cipher
|
||||||
|
outbound["password"] = user.UUID
|
||||||
|
case "vmess":
|
||||||
|
outbound["type"] = "vmess"
|
||||||
|
outbound["uuid"] = user.UUID
|
||||||
|
outbound["security"] = "auto"
|
||||||
|
case "trojan":
|
||||||
|
outbound["type"] = "trojan"
|
||||||
|
outbound["password"] = user.UUID
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return outbound
|
||||||
|
}
|
||||||
|
|
||||||
|
func generateSingBoxFallback(servers []model.Server, user model.User) (string, error) {
|
||||||
outbounds := []map[string]interface{}{}
|
outbounds := []map[string]interface{}{}
|
||||||
proxyTags := []string{}
|
proxyTags := []string{}
|
||||||
|
|
||||||
@@ -42,7 +117,6 @@ func GenerateSingBox(servers []model.Server, user model.User) (string, error) {
|
|||||||
proxyTags = append(proxyTags, conf.Name)
|
proxyTags = append(proxyTags, conf.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add selector
|
|
||||||
selector := map[string]interface{}{
|
selector := map[string]interface{}{
|
||||||
"type": "selector",
|
"type": "selector",
|
||||||
"tag": "Proxy",
|
"tag": "Proxy",
|
||||||
|
|||||||
56
internal/service/subscribe_templates.go
Normal file
56
internal/service/subscribe_templates.go
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"sort"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
var subscribeTemplateFiles = map[string]string{
|
||||||
|
"singbox": filepath.Join("submodule", "singbox.json"),
|
||||||
|
"clash": filepath.Join("submodule", "clash.yaml"),
|
||||||
|
"clashmeta": filepath.Join("submodule", "clash-meta.yaml"),
|
||||||
|
"stash": filepath.Join("submodule", "stash.yaml"),
|
||||||
|
"surge": filepath.Join("submodule", "surge.toml"),
|
||||||
|
"surfboard": filepath.Join("submodule", "surfboard.toml"),
|
||||||
|
}
|
||||||
|
|
||||||
|
func SubscribeTemplateSettingKey(name string) string {
|
||||||
|
return "subscribe_template_" + strings.TrimSpace(strings.ToLower(name))
|
||||||
|
}
|
||||||
|
|
||||||
|
func DefaultSubscribeTemplate(name string) string {
|
||||||
|
path, ok := subscribeTemplateFiles[strings.TrimSpace(strings.ToLower(name))]
|
||||||
|
if !ok {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
content, err := os.ReadFile(path)
|
||||||
|
if err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return string(content)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetSubscribeTemplate(name string) string {
|
||||||
|
key := SubscribeTemplateSettingKey(name)
|
||||||
|
if value, ok := GetSetting(key); ok && strings.TrimSpace(value) != "" {
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
return DefaultSubscribeTemplate(name)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetAllSubscribeTemplates() map[string]string {
|
||||||
|
keys := make([]string, 0, len(subscribeTemplateFiles))
|
||||||
|
for key := range subscribeTemplateFiles {
|
||||||
|
keys = append(keys, key)
|
||||||
|
}
|
||||||
|
sort.Strings(keys)
|
||||||
|
|
||||||
|
result := make(map[string]string, len(keys))
|
||||||
|
for _, key := range keys {
|
||||||
|
result[SubscribeTemplateSettingKey(key)] = GetSubscribeTemplate(key)
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
493
submodule/clash-meta.yaml
Normal file
493
submodule/clash-meta.yaml
Normal file
@@ -0,0 +1,493 @@
|
|||||||
|
port: 7890
|
||||||
|
socks-port: 7891
|
||||||
|
allow-lan: true
|
||||||
|
ipv6: true
|
||||||
|
bind-address: "*"
|
||||||
|
mode: Rule
|
||||||
|
log-level: info
|
||||||
|
external-controller: 127.0.0.1:9090
|
||||||
|
tcp-concurrent: true
|
||||||
|
find-process-mode: strict
|
||||||
|
geodata-mode: true #【Meta专属】使用geoip.dat数据库(默认:false使用mmdb数据库)
|
||||||
|
geodata-loader: standard
|
||||||
|
geo-auto-update: true
|
||||||
|
geo-update-interval: 24
|
||||||
|
geox-url:
|
||||||
|
geoip: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat"
|
||||||
|
geosite: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat"
|
||||||
|
mmdb: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.metadb"
|
||||||
|
asn: "https://github.com/xishang0128/geoip/releases/download/latest/GeoLite2-ASN.mmdb"
|
||||||
|
experimental:
|
||||||
|
ignore-resolve-fail: true
|
||||||
|
dns:
|
||||||
|
enable: true
|
||||||
|
listen: 1053
|
||||||
|
ipv6: false
|
||||||
|
default-nameserver:
|
||||||
|
- 1.1.1.1
|
||||||
|
- 8.8.8.8
|
||||||
|
nameserver:
|
||||||
|
- https://1.1.1.1/dns-query # Cloudflare(支持 H3)
|
||||||
|
- https://dns.google/dns-query # Google(支持 H3)
|
||||||
|
- 1.1.1.1 # Cloudflare Public DNS (UDP)
|
||||||
|
- 8.8.8.8 # Google Public DNS (UDP)
|
||||||
|
proxy-server-nameserver:
|
||||||
|
- https://doh.pub/dns-query
|
||||||
|
- 223.5.5.5
|
||||||
|
nameserver-policy:
|
||||||
|
"geosite:cn,private": # 国内域名和私有域名强制走国内 DNS
|
||||||
|
- https://223.5.5.5/dns-query # 阿里
|
||||||
|
- https://doh.pub/dns-query # 腾讯
|
||||||
|
- 223.5.5.5 # 阿里 UDP
|
||||||
|
- 119.29.29.29 # 腾讯 UDP
|
||||||
|
"geo:cn": # 也可以用 geo:cn 匹配 IP
|
||||||
|
- https://223.5.5.5/dns-query
|
||||||
|
- https://doh.pub/dns-query
|
||||||
|
- 223.5.5.5 # 阿里 UDP
|
||||||
|
- 119.29.29.29 # 腾讯 UDP
|
||||||
|
"geosite:gfw": # 新增:GFW 列表域名强制走国外 DNS
|
||||||
|
- https://cloudflare-dns.com/dns-query
|
||||||
|
- https://dns.google/dns-query
|
||||||
|
- 1.1.1.1
|
||||||
|
- 8.8.8.8
|
||||||
|
"geosite:geolocation-!cn": # 新增:非中国大陆域名强制走国外 DNS
|
||||||
|
- https://cloudflare-dns.com/dns-query
|
||||||
|
- https://dns.google/dns-query
|
||||||
|
- 1.1.1.1
|
||||||
|
- 8.8.8.8
|
||||||
|
"full-nameserver": # 新增:最终兜底,所有未匹配的域名查询强制走国外 DNS
|
||||||
|
- https://cloudflare-dns.com/dns-query
|
||||||
|
- https://dns.google/dns-query
|
||||||
|
- 1.1.1.1
|
||||||
|
- 8.8.8.8
|
||||||
|
fallback:
|
||||||
|
- tls://8.8.4.4
|
||||||
|
- tls://1.1.1.1
|
||||||
|
fallback-filter:
|
||||||
|
geoip: true
|
||||||
|
geoip-code: CN
|
||||||
|
geosite:
|
||||||
|
- gfw
|
||||||
|
ipcidr:
|
||||||
|
- 240.0.0.0/4
|
||||||
|
domain:
|
||||||
|
- +.google.com
|
||||||
|
- +.facebook.com
|
||||||
|
- +.youtube.com
|
||||||
|
- +.githubusercontent.com
|
||||||
|
- +.googlevideo.com
|
||||||
|
- +.msftconnecttest.com
|
||||||
|
- +.msftncsi.com
|
||||||
|
- msftconnecttest.com
|
||||||
|
- msftncsi.com
|
||||||
|
enhanced-mode: fake-ip
|
||||||
|
fake-ip-range: 198.18.0.1/16
|
||||||
|
fake-ip-filter-mode: blacklist
|
||||||
|
fake-ip-filter:
|
||||||
|
- "*.lan"
|
||||||
|
- "*.localdomain"
|
||||||
|
- "*.example"
|
||||||
|
- "*.invalid"
|
||||||
|
- "*.localhost"
|
||||||
|
- "*.test"
|
||||||
|
- "*.local"
|
||||||
|
- "*.home.arpa"
|
||||||
|
- "*.direct"
|
||||||
|
- "*.orb.local"
|
||||||
|
- "*.ip6-localhost"
|
||||||
|
- "*.ip6-loopback"
|
||||||
|
- "time.*.com"
|
||||||
|
- "time.*.gov"
|
||||||
|
- "time.*.edu.cn"
|
||||||
|
- "time.*.apple.com"
|
||||||
|
- "time-ios.apple.com"
|
||||||
|
- "time1.*.com"
|
||||||
|
- "time2.*.com"
|
||||||
|
- "time3.*.com"
|
||||||
|
- "time4.*.com"
|
||||||
|
- "time5.*.com"
|
||||||
|
- "time6.*.com"
|
||||||
|
- "time7.*.com"
|
||||||
|
- "ntp.*.com"
|
||||||
|
- "ntp1.*.com"
|
||||||
|
- "ntp2.*.com"
|
||||||
|
- "ntp3.*.com"
|
||||||
|
- "ntp4.*.com"
|
||||||
|
- "ntp5.*.com"
|
||||||
|
- "ntp6.*.com"
|
||||||
|
- "ntp7.*.com"
|
||||||
|
- "*.time.edu.cn"
|
||||||
|
- "*.ntp.org.cn"
|
||||||
|
- "+.pool.ntp.org"
|
||||||
|
- "time1.cloud.tencent.com"
|
||||||
|
- "music.163.com"
|
||||||
|
- "*.music.163.com"
|
||||||
|
- "*.126.net"
|
||||||
|
- "musicapi.taihe.com"
|
||||||
|
- "music.taihe.com"
|
||||||
|
- "songsearch.kugou.com"
|
||||||
|
- "trackercdn.kugou.com"
|
||||||
|
- "*.kuwo.cn"
|
||||||
|
- "api-jooxtt.sanook.com"
|
||||||
|
- "api.joox.com"
|
||||||
|
- "joox.com"
|
||||||
|
- "y.qq.com"
|
||||||
|
- "*.y.qq.com"
|
||||||
|
- "streamoc.music.tc.qq.com"
|
||||||
|
- "mobileoc.music.tc.qq.com"
|
||||||
|
- "isure.stream.qqmusic.qq.com"
|
||||||
|
- "dl.stream.qqmusic.qq.com"
|
||||||
|
- "aqqmusic.tc.qq.com"
|
||||||
|
- "amobile.music.tc.qq.com"
|
||||||
|
- "*.xiami.com"
|
||||||
|
- "*.music.migu.cn"
|
||||||
|
- "music.migu.cn"
|
||||||
|
- "+.msftconnecttest.com"
|
||||||
|
- "+.msftncsi.com"
|
||||||
|
- "localhost.ptlogin2.qq.com"
|
||||||
|
- "localhost.sec.qq.com"
|
||||||
|
- "localhost.*.weixin.qq.com"
|
||||||
|
- "+.steamcontent.com"
|
||||||
|
- "+.srv.nintendo.net"
|
||||||
|
- "*.n.n.srv.nintendo.net"
|
||||||
|
- "+.cdn.nintendo.net"
|
||||||
|
- "xbox.*.*.microsoft.com"
|
||||||
|
- "*.*.xboxlive.com"
|
||||||
|
- "xbox.*.microsoft.com"
|
||||||
|
- "xnotify.xboxlive.com"
|
||||||
|
- "+.battle.net"
|
||||||
|
- "+.battlenet.com.cn"
|
||||||
|
- "+.wotgame.cn"
|
||||||
|
- "+.wggames.cn"
|
||||||
|
- "+.wowsgame.cn"
|
||||||
|
- "+.wargaming.net"
|
||||||
|
- "proxy.golang.org"
|
||||||
|
- "+.stun.*.*"
|
||||||
|
- "+.stun.*.*.*"
|
||||||
|
- "+.stun.*.*.*.*"
|
||||||
|
- "+.stun.*.*.*.*.*"
|
||||||
|
- "heartbeat.belkin.com"
|
||||||
|
- "*.linksys.com"
|
||||||
|
- "*.linksyssmartwifi.com"
|
||||||
|
- "*.router.asus.com"
|
||||||
|
- "mesu.apple.com"
|
||||||
|
- "swscan.apple.com"
|
||||||
|
- "swquery.apple.com"
|
||||||
|
- "swdownload.apple.com"
|
||||||
|
- "swcdn.apple.com"
|
||||||
|
- "swdist.apple.com"
|
||||||
|
- "lens.l.google.com"
|
||||||
|
- "na.b.g-tun.com"
|
||||||
|
- "+.nflxvideo.net"
|
||||||
|
- "*.square-enix.com"
|
||||||
|
- "*.finalfantasyxiv.com"
|
||||||
|
- "*.ffxiv.com"
|
||||||
|
- "*.ff14.sdo.com"
|
||||||
|
- "ff.dorado.sdo.com"
|
||||||
|
- "*.mcdn.bilivideo.cn"
|
||||||
|
- "+.media.dssott.com"
|
||||||
|
- "shark007.net"
|
||||||
|
- "Mijia Cloud"
|
||||||
|
- "+.market.xiaomi.com"
|
||||||
|
- "+.cmbchina.com"
|
||||||
|
- "+.cmbimg.com"
|
||||||
|
- "adguardteam.github.io"
|
||||||
|
- "adrules.top"
|
||||||
|
- "anti-ad.net"
|
||||||
|
- "local.adguard.org"
|
||||||
|
- "static.adtidy.org"
|
||||||
|
- "+.sandai.net"
|
||||||
|
- "+.n0808.com"
|
||||||
|
- "+.3gppnetwork.org"
|
||||||
|
- "+.uu.163.com"
|
||||||
|
- "ps.res.netease.com"
|
||||||
|
- "+.pub.3gppnetwork.org"
|
||||||
|
- "+.oray.com"
|
||||||
|
- "+.orayimg.com"
|
||||||
|
- "+.gcloudcs.com"
|
||||||
|
- "+.gcloudsdk.com"
|
||||||
|
- "+.instant.arubanetworks.com"
|
||||||
|
- "+.setmeup.arubanetworks.com"
|
||||||
|
- "+.router.asus.com"
|
||||||
|
- "+.www.asusrouter.com"
|
||||||
|
- "+.hiwifi.com"
|
||||||
|
- "+.leike.cc"
|
||||||
|
- "+.miwifi.com"
|
||||||
|
- "+.my.router"
|
||||||
|
- "+.p.to"
|
||||||
|
- "+.peiluyou.com"
|
||||||
|
- "+.phicomm.me"
|
||||||
|
- "+.router.ctc"
|
||||||
|
- "+.routerlogin.com"
|
||||||
|
- "+.tendawifi.com"
|
||||||
|
- "+.zte.home"
|
||||||
|
- "+.tplogin.cn"
|
||||||
|
- "+.wifi.cmcc"
|
||||||
|
tun:
|
||||||
|
enable: true
|
||||||
|
stack: system
|
||||||
|
device: mochen
|
||||||
|
auto-route: true
|
||||||
|
endpoint-independent-nat: true
|
||||||
|
auto-detect-interface: true
|
||||||
|
endpoint-independents-hijack:
|
||||||
|
- any:53
|
||||||
|
- tcp://any:53
|
||||||
|
strict-route: false
|
||||||
|
mtu: 1500
|
||||||
|
udp-timeout: 120
|
||||||
|
proxies: []
|
||||||
|
|
||||||
|
proxy-groups:
|
||||||
|
- name: 🚀 默认代理
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- ♻️ 自动选择
|
||||||
|
- 🔯 故障转移
|
||||||
|
- 🔮 负载均衡
|
||||||
|
|
||||||
|
- name: 🎮 游戏
|
||||||
|
type: select
|
||||||
|
proxies: []
|
||||||
|
|
||||||
|
- name: 🎮 steam
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
- DIRECT
|
||||||
|
|
||||||
|
- name: 📹 YouTube
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 🍀 Google
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 📺 Bilibili
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- DIRECT
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 🤖 ChatGPT
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 👨🏿💻 GitHub
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 🐬 OneDrive
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- DIRECT
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 🪟 Microsoft
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- DIRECT
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 🎵 TikTok
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 📲 Telegram
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 🎥 NETFLIX
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: ✈️ Speedtest
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
- DIRECT
|
||||||
|
|
||||||
|
- name: 💶 PayPal
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 🍎 Apple
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- DIRECT
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 🐟 漏网之鱼
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
- DIRECT
|
||||||
|
|
||||||
|
- name: 🌏 国内网站
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- DIRECT
|
||||||
|
- 🚀 默认代理
|
||||||
|
|
||||||
|
- name: ♻️ 自动选择
|
||||||
|
type: url-test
|
||||||
|
url: http://cp.cloudflare.com/
|
||||||
|
interval: 300
|
||||||
|
tolerance: 50
|
||||||
|
timeout: 300
|
||||||
|
max-failed-times: 3
|
||||||
|
proxies: []
|
||||||
|
|
||||||
|
- name: 🔯 故障转移
|
||||||
|
type: fallback
|
||||||
|
url: http://cp.cloudflare.com/
|
||||||
|
interval: 300
|
||||||
|
tolerance: 50
|
||||||
|
timeout: 300
|
||||||
|
max-failed-times: 3
|
||||||
|
proxies: []
|
||||||
|
|
||||||
|
- name: 🔮 负载均衡
|
||||||
|
type: load-balance
|
||||||
|
strategy: consistent-hashing
|
||||||
|
url: http://cp.cloudflare.com/
|
||||||
|
interval: 300
|
||||||
|
tolerance: 50
|
||||||
|
timeout: 300
|
||||||
|
max-failed-times: 3
|
||||||
|
proxies: []
|
||||||
|
|
||||||
|
rules:
|
||||||
|
- GEOSITE,category-ads-all,REJECT
|
||||||
|
- DOMAIN,instant.arubanetworks.com,DIRECT
|
||||||
|
- DOMAIN,setmeup.arubanetworks.com,DIRECT
|
||||||
|
- DOMAIN,router.asus.com,DIRECT
|
||||||
|
- DOMAIN,www.asusrouter.com,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,hiwifi.com,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,leike.cc,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,miwifi.com,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,my.router,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,p.to,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,peiluyou.com,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,phicomm.me,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,router.ctc,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,routerlogin.com,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,tendawifi.com,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,zte.home,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,tplogin.cn,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,wifi.cmcc,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,bilibili.com, 📺 Bilibili
|
||||||
|
- GEOSITE,bilibili, 📺 Bilibili
|
||||||
|
- GEOSITE,biliintl, 📺 Bilibili
|
||||||
|
- DOMAIN,ipinfo.littlediary.cn, 🚀 默认代理
|
||||||
|
- DOMAIN,console.cloudyun.top, 🚀 默认代理
|
||||||
|
- DOMAIN,s3.cloudyun.top, 🚀 默认代理
|
||||||
|
- DOMAIN-SUFFIX,browserleaks.com, 🚀 默认代理
|
||||||
|
- DOMAIN-SUFFIX,ping.pe,🚀 默认代理
|
||||||
|
- DOMAIN-SUFFIX,dgameglobal.com,🎮 游戏
|
||||||
|
- DOMAIN-SUFFIX,wilds.monsterhunter.com,🎮 游戏
|
||||||
|
- DOMAIN-SUFFIX,capcom.com,🎮 游戏
|
||||||
|
- DOMAIN-SUFFIX,playfabapi.com,🎮 游戏
|
||||||
|
- DOMAIN-SUFFIX,playfab.com,🎮 游戏
|
||||||
|
- DOMAIN-SUFFIX,akamai.net,🎮 游戏
|
||||||
|
- DOMAIN-SUFFIX,cloudapp.azure.com,🎮 游戏
|
||||||
|
- PROCESS-NAME,CrashReport.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,InstallerMessage.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,MonsterHunterWilds.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,SGuard64.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,SGuardSvc64.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,SGuardUpdate64.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,Uninstall64.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,ACE-Service64.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,ACE-Setup64.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,GeckoParser.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,MetaperfCapturer.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,profiler-symbol-server.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,DownSysSymCache.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,dumpbin.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,Link.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,SymCacheGen.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,SymChk.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,WevtUtil.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,XPerf.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,DeltaForceClient-Win64-Shipping.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,INTLWebViewHelper.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,pfbs.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,UnrealCEFSubProcess.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,UE4PrereqSetup_x64.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,DeltaForceClient.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,EAAntiCheat.Installer.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,bf6.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,bf6.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,EAAntiCheat.GameServiceLauncher.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,EAAntiCheat.GameService.exe,🎮 游戏
|
||||||
|
- DOMAIN-SUFFIX,eaanticheat.ac.ea.com,🎮 游戏
|
||||||
|
- GEOSITE,steam@cn,🌏 国内网站
|
||||||
|
- GEOSITE,steam,🎮 steam
|
||||||
|
- GEOSITE,apple,🍎 Apple
|
||||||
|
- GEOSITE,private,🌏 国内网站
|
||||||
|
- GEOSITE,openai,🤖 ChatGPT
|
||||||
|
- GEOSITE,google-gemini,🤖 ChatGPT
|
||||||
|
- GEOSITE,github,👨🏿💻 GitHub
|
||||||
|
- GEOSITE,onedrive,🐬 OneDrive
|
||||||
|
- GEOSITE,microsoft,🪟 Microsoft
|
||||||
|
- GEOSITE,youtube,📹 YouTube
|
||||||
|
- GEOSITE,google,🍀 Google
|
||||||
|
- GEOSITE,tiktok,🎵 TikTok
|
||||||
|
- GEOSITE,speedtest,✈️ Speedtest
|
||||||
|
- GEOSITE,telegram,📲 Telegram
|
||||||
|
- GEOSITE,netflix,🎥 NETFLIX
|
||||||
|
- GEOSITE,paypal,💶 PayPal
|
||||||
|
- GEOSITE,gfw,🚀 默认代理
|
||||||
|
- GEOSITE,category-dev,🚀 默认代理
|
||||||
|
- DOMAIN-SUFFIX,cloudflare-dns.com,🚀 默认代理
|
||||||
|
- DOMAIN-SUFFIX,api.nn.ci,🚀 默认代理
|
||||||
|
- DOMAIN-SUFFIX,api.ipify.org,🚀 默认代理
|
||||||
|
- DOMAIN-SUFFIX,gsas.apple.com,🚀 默认代理
|
||||||
|
- DOMAIN-SUFFIX,hotmail.com,🚀 默认代理
|
||||||
|
- GEOSITE,CN,🌏 国内网站
|
||||||
|
- GEOIP,private,🌏 国内网站,no-resolve
|
||||||
|
- IP-CIDR,1.0.0.1/32,🚀 默认代理,no-resolve
|
||||||
|
- IP-CIDR,1.1.1.1/32,🚀 默认代理,no-resolve
|
||||||
|
- IP-CIDR,8.8.8.8/32,🚀 默认代理,no-resolve
|
||||||
|
- IP-CIDR,8.8.4.4/32,🚀 默认代理,no-resolve
|
||||||
|
- GEOIP,google,🍀 Google
|
||||||
|
- GEOIP,netflix,🎥 NETFLIX
|
||||||
|
- GEOIP,telegram,📲 Telegram
|
||||||
|
- GEOIP,CN,🌏 国内网站
|
||||||
|
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
|
||||||
|
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
|
||||||
|
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
|
||||||
|
- IP-CIDR,100.64.0.0/10,DIRECT,no-resolve
|
||||||
|
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
|
||||||
|
- IP-CIDR,198.18.0.0/16,DIRECT,no-resolve
|
||||||
|
- IP-CIDR,224.0.0.0/4,DIRECT,no-resolve
|
||||||
|
- IP-CIDR6,::1/128,DIRECT,no-resolve
|
||||||
|
- IP-CIDR6,fc00::/7,DIRECT,no-resolve
|
||||||
|
- IP-CIDR6,fe80::/10,DIRECT,no-resolve
|
||||||
|
- IP-CIDR6,fd00::/8,DIRECT,no-resolve
|
||||||
|
- MATCH,🐟 漏网之鱼
|
||||||
493
submodule/clash.yaml
Normal file
493
submodule/clash.yaml
Normal file
@@ -0,0 +1,493 @@
|
|||||||
|
port: 7890
|
||||||
|
socks-port: 7891
|
||||||
|
allow-lan: true
|
||||||
|
ipv6: true
|
||||||
|
bind-address: "*"
|
||||||
|
mode: Rule
|
||||||
|
log-level: info
|
||||||
|
external-controller: 127.0.0.1:9090
|
||||||
|
tcp-concurrent: true
|
||||||
|
find-process-mode: strict
|
||||||
|
geodata-mode: true #【Meta专属】使用geoip.dat数据库(默认:false使用mmdb数据库)
|
||||||
|
geodata-loader: standard
|
||||||
|
geo-auto-update: true
|
||||||
|
geo-update-interval: 24
|
||||||
|
geox-url:
|
||||||
|
geoip: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat"
|
||||||
|
geosite: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat"
|
||||||
|
mmdb: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.metadb"
|
||||||
|
asn: "https://github.com/xishang0128/geoip/releases/download/latest/GeoLite2-ASN.mmdb"
|
||||||
|
experimental:
|
||||||
|
ignore-resolve-fail: true
|
||||||
|
dns:
|
||||||
|
enable: true
|
||||||
|
listen: 1053
|
||||||
|
ipv6: false
|
||||||
|
default-nameserver:
|
||||||
|
- 1.1.1.1
|
||||||
|
- 8.8.8.8
|
||||||
|
nameserver:
|
||||||
|
- https://1.1.1.1/dns-query # Cloudflare(支持 H3)
|
||||||
|
- https://dns.google/dns-query # Google(支持 H3)
|
||||||
|
- 1.1.1.1 # Cloudflare Public DNS (UDP)
|
||||||
|
- 8.8.8.8 # Google Public DNS (UDP)
|
||||||
|
proxy-server-nameserver:
|
||||||
|
- https://doh.pub/dns-query
|
||||||
|
- 223.5.5.5
|
||||||
|
nameserver-policy:
|
||||||
|
"geosite:cn,private": # 国内域名和私有域名强制走国内 DNS
|
||||||
|
- https://223.5.5.5/dns-query # 阿里
|
||||||
|
- https://doh.pub/dns-query # 腾讯
|
||||||
|
- 223.5.5.5 # 阿里 UDP
|
||||||
|
- 119.29.29.29 # 腾讯 UDP
|
||||||
|
"geo:cn": # 也可以用 geo:cn 匹配 IP
|
||||||
|
- https://223.5.5.5/dns-query
|
||||||
|
- https://doh.pub/dns-query
|
||||||
|
- 223.5.5.5 # 阿里 UDP
|
||||||
|
- 119.29.29.29 # 腾讯 UDP
|
||||||
|
"geosite:gfw": # 新增:GFW 列表域名强制走国外 DNS
|
||||||
|
- https://cloudflare-dns.com/dns-query
|
||||||
|
- https://dns.google/dns-query
|
||||||
|
- 1.1.1.1
|
||||||
|
- 8.8.8.8
|
||||||
|
"geosite:geolocation-!cn": # 新增:非中国大陆域名强制走国外 DNS
|
||||||
|
- https://cloudflare-dns.com/dns-query
|
||||||
|
- https://dns.google/dns-query
|
||||||
|
- 1.1.1.1
|
||||||
|
- 8.8.8.8
|
||||||
|
"full-nameserver": # 新增:最终兜底,所有未匹配的域名查询强制走国外 DNS
|
||||||
|
- https://cloudflare-dns.com/dns-query
|
||||||
|
- https://dns.google/dns-query
|
||||||
|
- 1.1.1.1
|
||||||
|
- 8.8.8.8
|
||||||
|
fallback:
|
||||||
|
- tls://8.8.4.4
|
||||||
|
- tls://1.1.1.1
|
||||||
|
fallback-filter:
|
||||||
|
geoip: true
|
||||||
|
geoip-code: CN
|
||||||
|
geosite:
|
||||||
|
- gfw
|
||||||
|
ipcidr:
|
||||||
|
- 240.0.0.0/4
|
||||||
|
domain:
|
||||||
|
- +.google.com
|
||||||
|
- +.facebook.com
|
||||||
|
- +.youtube.com
|
||||||
|
- +.githubusercontent.com
|
||||||
|
- +.googlevideo.com
|
||||||
|
- +.msftconnecttest.com
|
||||||
|
- +.msftncsi.com
|
||||||
|
- msftconnecttest.com
|
||||||
|
- msftncsi.com
|
||||||
|
enhanced-mode: fake-ip
|
||||||
|
fake-ip-range: 198.18.0.1/16
|
||||||
|
fake-ip-filter-mode: blacklist
|
||||||
|
fake-ip-filter:
|
||||||
|
- "*.lan"
|
||||||
|
- "*.localdomain"
|
||||||
|
- "*.example"
|
||||||
|
- "*.invalid"
|
||||||
|
- "*.localhost"
|
||||||
|
- "*.test"
|
||||||
|
- "*.local"
|
||||||
|
- "*.home.arpa"
|
||||||
|
- "*.direct"
|
||||||
|
- "*.orb.local"
|
||||||
|
- "*.ip6-localhost"
|
||||||
|
- "*.ip6-loopback"
|
||||||
|
- "time.*.com"
|
||||||
|
- "time.*.gov"
|
||||||
|
- "time.*.edu.cn"
|
||||||
|
- "time.*.apple.com"
|
||||||
|
- "time-ios.apple.com"
|
||||||
|
- "time1.*.com"
|
||||||
|
- "time2.*.com"
|
||||||
|
- "time3.*.com"
|
||||||
|
- "time4.*.com"
|
||||||
|
- "time5.*.com"
|
||||||
|
- "time6.*.com"
|
||||||
|
- "time7.*.com"
|
||||||
|
- "ntp.*.com"
|
||||||
|
- "ntp1.*.com"
|
||||||
|
- "ntp2.*.com"
|
||||||
|
- "ntp3.*.com"
|
||||||
|
- "ntp4.*.com"
|
||||||
|
- "ntp5.*.com"
|
||||||
|
- "ntp6.*.com"
|
||||||
|
- "ntp7.*.com"
|
||||||
|
- "*.time.edu.cn"
|
||||||
|
- "*.ntp.org.cn"
|
||||||
|
- "+.pool.ntp.org"
|
||||||
|
- "time1.cloud.tencent.com"
|
||||||
|
- "music.163.com"
|
||||||
|
- "*.music.163.com"
|
||||||
|
- "*.126.net"
|
||||||
|
- "musicapi.taihe.com"
|
||||||
|
- "music.taihe.com"
|
||||||
|
- "songsearch.kugou.com"
|
||||||
|
- "trackercdn.kugou.com"
|
||||||
|
- "*.kuwo.cn"
|
||||||
|
- "api-jooxtt.sanook.com"
|
||||||
|
- "api.joox.com"
|
||||||
|
- "joox.com"
|
||||||
|
- "y.qq.com"
|
||||||
|
- "*.y.qq.com"
|
||||||
|
- "streamoc.music.tc.qq.com"
|
||||||
|
- "mobileoc.music.tc.qq.com"
|
||||||
|
- "isure.stream.qqmusic.qq.com"
|
||||||
|
- "dl.stream.qqmusic.qq.com"
|
||||||
|
- "aqqmusic.tc.qq.com"
|
||||||
|
- "amobile.music.tc.qq.com"
|
||||||
|
- "*.xiami.com"
|
||||||
|
- "*.music.migu.cn"
|
||||||
|
- "music.migu.cn"
|
||||||
|
- "+.msftconnecttest.com"
|
||||||
|
- "+.msftncsi.com"
|
||||||
|
- "localhost.ptlogin2.qq.com"
|
||||||
|
- "localhost.sec.qq.com"
|
||||||
|
- "localhost.*.weixin.qq.com"
|
||||||
|
- "+.steamcontent.com"
|
||||||
|
- "+.srv.nintendo.net"
|
||||||
|
- "*.n.n.srv.nintendo.net"
|
||||||
|
- "+.cdn.nintendo.net"
|
||||||
|
- "xbox.*.*.microsoft.com"
|
||||||
|
- "*.*.xboxlive.com"
|
||||||
|
- "xbox.*.microsoft.com"
|
||||||
|
- "xnotify.xboxlive.com"
|
||||||
|
- "+.battle.net"
|
||||||
|
- "+.battlenet.com.cn"
|
||||||
|
- "+.wotgame.cn"
|
||||||
|
- "+.wggames.cn"
|
||||||
|
- "+.wowsgame.cn"
|
||||||
|
- "+.wargaming.net"
|
||||||
|
- "proxy.golang.org"
|
||||||
|
- "+.stun.*.*"
|
||||||
|
- "+.stun.*.*.*"
|
||||||
|
- "+.stun.*.*.*.*"
|
||||||
|
- "+.stun.*.*.*.*.*"
|
||||||
|
- "heartbeat.belkin.com"
|
||||||
|
- "*.linksys.com"
|
||||||
|
- "*.linksyssmartwifi.com"
|
||||||
|
- "*.router.asus.com"
|
||||||
|
- "mesu.apple.com"
|
||||||
|
- "swscan.apple.com"
|
||||||
|
- "swquery.apple.com"
|
||||||
|
- "swdownload.apple.com"
|
||||||
|
- "swcdn.apple.com"
|
||||||
|
- "swdist.apple.com"
|
||||||
|
- "lens.l.google.com"
|
||||||
|
- "na.b.g-tun.com"
|
||||||
|
- "+.nflxvideo.net"
|
||||||
|
- "*.square-enix.com"
|
||||||
|
- "*.finalfantasyxiv.com"
|
||||||
|
- "*.ffxiv.com"
|
||||||
|
- "*.ff14.sdo.com"
|
||||||
|
- "ff.dorado.sdo.com"
|
||||||
|
- "*.mcdn.bilivideo.cn"
|
||||||
|
- "+.media.dssott.com"
|
||||||
|
- "shark007.net"
|
||||||
|
- "Mijia Cloud"
|
||||||
|
- "+.market.xiaomi.com"
|
||||||
|
- "+.cmbchina.com"
|
||||||
|
- "+.cmbimg.com"
|
||||||
|
- "adguardteam.github.io"
|
||||||
|
- "adrules.top"
|
||||||
|
- "anti-ad.net"
|
||||||
|
- "local.adguard.org"
|
||||||
|
- "static.adtidy.org"
|
||||||
|
- "+.sandai.net"
|
||||||
|
- "+.n0808.com"
|
||||||
|
- "+.3gppnetwork.org"
|
||||||
|
- "+.uu.163.com"
|
||||||
|
- "ps.res.netease.com"
|
||||||
|
- "+.pub.3gppnetwork.org"
|
||||||
|
- "+.oray.com"
|
||||||
|
- "+.orayimg.com"
|
||||||
|
- "+.gcloudcs.com"
|
||||||
|
- "+.gcloudsdk.com"
|
||||||
|
- "+.instant.arubanetworks.com"
|
||||||
|
- "+.setmeup.arubanetworks.com"
|
||||||
|
- "+.router.asus.com"
|
||||||
|
- "+.www.asusrouter.com"
|
||||||
|
- "+.hiwifi.com"
|
||||||
|
- "+.leike.cc"
|
||||||
|
- "+.miwifi.com"
|
||||||
|
- "+.my.router"
|
||||||
|
- "+.p.to"
|
||||||
|
- "+.peiluyou.com"
|
||||||
|
- "+.phicomm.me"
|
||||||
|
- "+.router.ctc"
|
||||||
|
- "+.routerlogin.com"
|
||||||
|
- "+.tendawifi.com"
|
||||||
|
- "+.zte.home"
|
||||||
|
- "+.tplogin.cn"
|
||||||
|
- "+.wifi.cmcc"
|
||||||
|
tun:
|
||||||
|
enable: true
|
||||||
|
stack: system
|
||||||
|
device: mochen
|
||||||
|
auto-route: true
|
||||||
|
endpoint-independent-nat: true
|
||||||
|
auto-detect-interface: true
|
||||||
|
endpoint-independents-hijack:
|
||||||
|
- any:53
|
||||||
|
- tcp://any:53
|
||||||
|
strict-route: false
|
||||||
|
mtu: 1500
|
||||||
|
udp-timeout: 120
|
||||||
|
proxies: []
|
||||||
|
|
||||||
|
proxy-groups:
|
||||||
|
- name: 🚀 默认代理
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- ♻️ 自动选择
|
||||||
|
- 🔯 故障转移
|
||||||
|
- 🔮 负载均衡
|
||||||
|
|
||||||
|
- name: 🎮 游戏
|
||||||
|
type: select
|
||||||
|
proxies: []
|
||||||
|
|
||||||
|
- name: 🎮 steam
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
- DIRECT
|
||||||
|
|
||||||
|
- name: 📹 YouTube
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 🍀 Google
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 📺 Bilibili
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- DIRECT
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 🤖 ChatGPT
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 👨🏿💻 GitHub
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 🐬 OneDrive
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- DIRECT
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 🪟 Microsoft
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- DIRECT
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 🎵 TikTok
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 📲 Telegram
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 🎥 NETFLIX
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: ✈️ Speedtest
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
- DIRECT
|
||||||
|
|
||||||
|
- name: 💶 PayPal
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 🍎 Apple
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- DIRECT
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 🐟 漏网之鱼
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
- DIRECT
|
||||||
|
|
||||||
|
- name: 🌏 国内网站
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- DIRECT
|
||||||
|
- 🚀 默认代理
|
||||||
|
|
||||||
|
- name: ♻️ 自动选择
|
||||||
|
type: url-test
|
||||||
|
url: http://cp.cloudflare.com/
|
||||||
|
interval: 300
|
||||||
|
tolerance: 50
|
||||||
|
timeout: 300
|
||||||
|
max-failed-times: 3
|
||||||
|
proxies: []
|
||||||
|
|
||||||
|
- name: 🔯 故障转移
|
||||||
|
type: fallback
|
||||||
|
url: http://cp.cloudflare.com/
|
||||||
|
interval: 300
|
||||||
|
tolerance: 50
|
||||||
|
timeout: 300
|
||||||
|
max-failed-times: 3
|
||||||
|
proxies: []
|
||||||
|
|
||||||
|
- name: 🔮 负载均衡
|
||||||
|
type: load-balance
|
||||||
|
strategy: consistent-hashing
|
||||||
|
url: http://cp.cloudflare.com/
|
||||||
|
interval: 300
|
||||||
|
tolerance: 50
|
||||||
|
timeout: 300
|
||||||
|
max-failed-times: 3
|
||||||
|
proxies: []
|
||||||
|
|
||||||
|
rules:
|
||||||
|
- GEOSITE,category-ads-all,REJECT
|
||||||
|
- DOMAIN,instant.arubanetworks.com,DIRECT
|
||||||
|
- DOMAIN,setmeup.arubanetworks.com,DIRECT
|
||||||
|
- DOMAIN,router.asus.com,DIRECT
|
||||||
|
- DOMAIN,www.asusrouter.com,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,hiwifi.com,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,leike.cc,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,miwifi.com,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,my.router,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,p.to,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,peiluyou.com,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,phicomm.me,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,router.ctc,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,routerlogin.com,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,tendawifi.com,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,zte.home,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,tplogin.cn,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,wifi.cmcc,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,bilibili.com, 📺 Bilibili
|
||||||
|
- GEOSITE,bilibili, 📺 Bilibili
|
||||||
|
- GEOSITE,biliintl, 📺 Bilibili
|
||||||
|
- DOMAIN,ipinfo.littlediary.cn, 🚀 默认代理
|
||||||
|
- DOMAIN,console.cloudyun.top, 🚀 默认代理
|
||||||
|
- DOMAIN,s3.cloudyun.top, 🚀 默认代理
|
||||||
|
- DOMAIN-SUFFIX,browserleaks.com, 🚀 默认代理
|
||||||
|
- DOMAIN-SUFFIX,ping.pe,🚀 默认代理
|
||||||
|
- DOMAIN-SUFFIX,dgameglobal.com,🎮 游戏
|
||||||
|
- DOMAIN-SUFFIX,wilds.monsterhunter.com,🎮 游戏
|
||||||
|
- DOMAIN-SUFFIX,capcom.com,🎮 游戏
|
||||||
|
- DOMAIN-SUFFIX,playfabapi.com,🎮 游戏
|
||||||
|
- DOMAIN-SUFFIX,playfab.com,🎮 游戏
|
||||||
|
- DOMAIN-SUFFIX,akamai.net,🎮 游戏
|
||||||
|
- DOMAIN-SUFFIX,cloudapp.azure.com,🎮 游戏
|
||||||
|
- PROCESS-NAME,CrashReport.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,InstallerMessage.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,MonsterHunterWilds.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,SGuard64.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,SGuardSvc64.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,SGuardUpdate64.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,Uninstall64.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,ACE-Service64.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,ACE-Setup64.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,GeckoParser.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,MetaperfCapturer.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,profiler-symbol-server.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,DownSysSymCache.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,dumpbin.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,Link.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,SymCacheGen.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,SymChk.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,WevtUtil.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,XPerf.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,DeltaForceClient-Win64-Shipping.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,INTLWebViewHelper.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,pfbs.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,UnrealCEFSubProcess.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,UE4PrereqSetup_x64.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,DeltaForceClient.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,EAAntiCheat.Installer.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,bf6.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,bf6.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,EAAntiCheat.GameServiceLauncher.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,EAAntiCheat.GameService.exe,🎮 游戏
|
||||||
|
- DOMAIN-SUFFIX,eaanticheat.ac.ea.com,🎮 游戏
|
||||||
|
- GEOSITE,steam@cn,🌏 国内网站
|
||||||
|
- GEOSITE,steam,🎮 steam
|
||||||
|
- GEOSITE,apple,🍎 Apple
|
||||||
|
- GEOSITE,private,🌏 国内网站
|
||||||
|
- GEOSITE,openai,🤖 ChatGPT
|
||||||
|
- GEOSITE,google-gemini,🤖 ChatGPT
|
||||||
|
- GEOSITE,github,👨🏿💻 GitHub
|
||||||
|
- GEOSITE,onedrive,🐬 OneDrive
|
||||||
|
- GEOSITE,microsoft,🪟 Microsoft
|
||||||
|
- GEOSITE,youtube,📹 YouTube
|
||||||
|
- GEOSITE,google,🍀 Google
|
||||||
|
- GEOSITE,tiktok,🎵 TikTok
|
||||||
|
- GEOSITE,speedtest,✈️ Speedtest
|
||||||
|
- GEOSITE,telegram,📲 Telegram
|
||||||
|
- GEOSITE,netflix,🎥 NETFLIX
|
||||||
|
- GEOSITE,paypal,💶 PayPal
|
||||||
|
- GEOSITE,gfw,🚀 默认代理
|
||||||
|
- GEOSITE,category-dev,🚀 默认代理
|
||||||
|
- DOMAIN-SUFFIX,cloudflare-dns.com,🚀 默认代理
|
||||||
|
- DOMAIN-SUFFIX,api.nn.ci,🚀 默认代理
|
||||||
|
- DOMAIN-SUFFIX,api.ipify.org,🚀 默认代理
|
||||||
|
- DOMAIN-SUFFIX,gsas.apple.com,🚀 默认代理
|
||||||
|
- DOMAIN-SUFFIX,hotmail.com,🚀 默认代理
|
||||||
|
- GEOSITE,CN,🌏 国内网站
|
||||||
|
- GEOIP,private,🌏 国内网站,no-resolve
|
||||||
|
- IP-CIDR,1.0.0.1/32,🚀 默认代理,no-resolve
|
||||||
|
- IP-CIDR,1.1.1.1/32,🚀 默认代理,no-resolve
|
||||||
|
- IP-CIDR,8.8.8.8/32,🚀 默认代理,no-resolve
|
||||||
|
- IP-CIDR,8.8.4.4/32,🚀 默认代理,no-resolve
|
||||||
|
- GEOIP,google,🍀 Google
|
||||||
|
- GEOIP,netflix,🎥 NETFLIX
|
||||||
|
- GEOIP,telegram,📲 Telegram
|
||||||
|
- GEOIP,CN,🌏 国内网站
|
||||||
|
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
|
||||||
|
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
|
||||||
|
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
|
||||||
|
- IP-CIDR,100.64.0.0/10,DIRECT,no-resolve
|
||||||
|
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
|
||||||
|
- IP-CIDR,198.18.0.0/16,DIRECT,no-resolve
|
||||||
|
- IP-CIDR,224.0.0.0/4,DIRECT,no-resolve
|
||||||
|
- IP-CIDR6,::1/128,DIRECT,no-resolve
|
||||||
|
- IP-CIDR6,fc00::/7,DIRECT,no-resolve
|
||||||
|
- IP-CIDR6,fe80::/10,DIRECT,no-resolve
|
||||||
|
- IP-CIDR6,fd00::/8,DIRECT,no-resolve
|
||||||
|
- MATCH,🐟 漏网之鱼
|
||||||
159
submodule/singbox.json
Normal file
159
submodule/singbox.json
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
{
|
||||||
|
"dns": {
|
||||||
|
"rules": [
|
||||||
|
{
|
||||||
|
"outbound": [
|
||||||
|
"any"
|
||||||
|
],
|
||||||
|
"server": "local"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"clash_mode": "global",
|
||||||
|
"server": "remote"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"clash_mode": "direct",
|
||||||
|
"server": "local"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"rule_set": [
|
||||||
|
"geosite-cn"
|
||||||
|
],
|
||||||
|
"server": "local"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"servers": [
|
||||||
|
{
|
||||||
|
"address": "https://1.1.1.1/dns-query",
|
||||||
|
"detour": "节点选择",
|
||||||
|
"tag": "remote"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": "https://223.5.5.5/dns-query",
|
||||||
|
"detour": "direct",
|
||||||
|
"tag": "local"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": "rcode://success",
|
||||||
|
"tag": "block"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"strategy": "prefer_ipv4"
|
||||||
|
},
|
||||||
|
"experimental": {
|
||||||
|
"cache_file": {
|
||||||
|
"enabled": true,
|
||||||
|
"path": "cache.db",
|
||||||
|
"cache_id": "cache_db",
|
||||||
|
"store_fakeip": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"inbounds": [
|
||||||
|
{
|
||||||
|
"auto_route": true,
|
||||||
|
"domain_strategy": "prefer_ipv4",
|
||||||
|
"endpoint_independent_nat": true,
|
||||||
|
"address": [
|
||||||
|
"172.19.0.1/30",
|
||||||
|
"2001:0470:f9da:fdfa::1/64"
|
||||||
|
],
|
||||||
|
"mtu": 9000,
|
||||||
|
"sniff": true,
|
||||||
|
"sniff_override_destination": true,
|
||||||
|
"stack": "system",
|
||||||
|
"strict_route": true,
|
||||||
|
"type": "tun"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"domain_strategy": "prefer_ipv4",
|
||||||
|
"listen": "127.0.0.1",
|
||||||
|
"listen_port": 2333,
|
||||||
|
"sniff": true,
|
||||||
|
"sniff_override_destination": true,
|
||||||
|
"tag": "socks-in",
|
||||||
|
"type": "socks",
|
||||||
|
"users": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"domain_strategy": "prefer_ipv4",
|
||||||
|
"listen": "127.0.0.1",
|
||||||
|
"listen_port": 2334,
|
||||||
|
"sniff": true,
|
||||||
|
"sniff_override_destination": true,
|
||||||
|
"tag": "mixed-in",
|
||||||
|
"type": "mixed",
|
||||||
|
"users": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"outbounds": [
|
||||||
|
{
|
||||||
|
"tag": "节点选择",
|
||||||
|
"type": "selector",
|
||||||
|
"default": "自动选择",
|
||||||
|
"outbounds": [
|
||||||
|
"自动选择"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "direct",
|
||||||
|
"type": "direct"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "block",
|
||||||
|
"type": "block"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "dns-out",
|
||||||
|
"type": "dns"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "自动选择",
|
||||||
|
"type": "urltest",
|
||||||
|
"outbounds": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"route": {
|
||||||
|
"auto_detect_interface": true,
|
||||||
|
"rules": [
|
||||||
|
{
|
||||||
|
"outbound": "dns-out",
|
||||||
|
"protocol": "dns"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"clash_mode": "direct",
|
||||||
|
"outbound": "direct"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"clash_mode": "global",
|
||||||
|
"outbound": "节点选择"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ip_is_private": true,
|
||||||
|
"outbound": "direct"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"rule_set": [
|
||||||
|
"geosite-cn",
|
||||||
|
"geoip-cn"
|
||||||
|
],
|
||||||
|
"outbound": "direct"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"rule_set": [
|
||||||
|
{
|
||||||
|
"tag": "geosite-cn",
|
||||||
|
"type": "remote",
|
||||||
|
"format": "binary",
|
||||||
|
"url": "https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-cn.srs",
|
||||||
|
"download_detour": "自动选择"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "geoip-cn",
|
||||||
|
"type": "remote",
|
||||||
|
"format": "binary",
|
||||||
|
"url": "https://raw.githubusercontent.com/SagerNet/sing-geoip/rule-set/geoip-cn.srs",
|
||||||
|
"download_detour": "自动选择"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
491
submodule/stash.yaml
Normal file
491
submodule/stash.yaml
Normal file
@@ -0,0 +1,491 @@
|
|||||||
|
port: 7890
|
||||||
|
socks-port: 7891
|
||||||
|
allow-lan: true
|
||||||
|
ipv6: true
|
||||||
|
bind-address: "*"
|
||||||
|
mode: Rule
|
||||||
|
log-level: info
|
||||||
|
external-controller: 127.0.0.1:9090
|
||||||
|
tcp-concurrent: true
|
||||||
|
find-process-mode: strict
|
||||||
|
geodata-mode: true #【Meta专属】使用geoip.dat数据库(默认:false使用mmdb数据库)
|
||||||
|
geodata-loader: standard
|
||||||
|
geo-auto-update: true
|
||||||
|
geo-update-interval: 24
|
||||||
|
geox-url:
|
||||||
|
geoip: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat"
|
||||||
|
geosite: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat"
|
||||||
|
mmdb: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.metadb"
|
||||||
|
asn: "https://github.com/xishang0128/geoip/releases/download/latest/GeoLite2-ASN.mmdb"
|
||||||
|
experimental:
|
||||||
|
ignore-resolve-fail: true
|
||||||
|
dns:
|
||||||
|
enable: true
|
||||||
|
listen: 1053
|
||||||
|
ipv6: false
|
||||||
|
default-nameserver:
|
||||||
|
- 1.1.1.1
|
||||||
|
- 8.8.8.8
|
||||||
|
nameserver:
|
||||||
|
- https://1.1.1.1/dns-query # Cloudflare(支持 H3)
|
||||||
|
- https://dns.google/dns-query # Google(支持 H3)
|
||||||
|
- 1.1.1.1 # Cloudflare Public DNS (UDP)
|
||||||
|
- 8.8.8.8 # Google Public DNS (UDP)
|
||||||
|
proxy-server-nameserver:
|
||||||
|
- https://doh.pub/dns-query
|
||||||
|
- 223.5.5.5
|
||||||
|
nameserver-policy:
|
||||||
|
"geosite:cn,private": # 国内域名和私有域名强制走国内 DNS
|
||||||
|
- https://223.5.5.5/dns-query # 阿里
|
||||||
|
- https://doh.pub/dns-query # 腾讯
|
||||||
|
- 223.5.5.5 # 阿里 UDP
|
||||||
|
- 119.29.29.29 # 腾讯 UDP
|
||||||
|
"geo:cn": # 也可以用 geo:cn 匹配 IP
|
||||||
|
- https://223.5.5.5/dns-query
|
||||||
|
- https://doh.pub/dns-query
|
||||||
|
- 223.5.5.5 # 阿里 UDP
|
||||||
|
- 119.29.29.29 # 腾讯 UDP
|
||||||
|
"geosite:gfw": # 新增:GFW 列表域名强制走国外 DNS
|
||||||
|
- https://cloudflare-dns.com/dns-query
|
||||||
|
- https://dns.google/dns-query
|
||||||
|
- 1.1.1.1
|
||||||
|
- 8.8.8.8
|
||||||
|
"geosite:geolocation-!cn": # 新增:非中国大陆域名强制走国外 DNS
|
||||||
|
- https://cloudflare-dns.com/dns-query
|
||||||
|
- https://dns.google/dns-query
|
||||||
|
- 1.1.1.1
|
||||||
|
- 8.8.8.8
|
||||||
|
"full-nameserver": # 新增:最终兜底,所有未匹配的域名查询强制走国外 DNS
|
||||||
|
- https://cloudflare-dns.com/dns-query
|
||||||
|
- https://dns.google/dns-query
|
||||||
|
- 1.1.1.1
|
||||||
|
- 8.8.8.8
|
||||||
|
fallback:
|
||||||
|
- tls://8.8.4.4
|
||||||
|
- tls://1.1.1.1
|
||||||
|
fallback-filter:
|
||||||
|
geoip: true
|
||||||
|
geoip-code: CN
|
||||||
|
geosite:
|
||||||
|
- gfw
|
||||||
|
ipcidr:
|
||||||
|
- 240.0.0.0/4
|
||||||
|
domain:
|
||||||
|
- +.google.com
|
||||||
|
- +.facebook.com
|
||||||
|
- +.youtube.com
|
||||||
|
- +.githubusercontent.com
|
||||||
|
- +.googlevideo.com
|
||||||
|
- +.msftconnecttest.com
|
||||||
|
- +.msftncsi.com
|
||||||
|
- msftconnecttest.com
|
||||||
|
- msftncsi.com
|
||||||
|
enhanced-mode: fake-ip
|
||||||
|
fake-ip-range: 198.18.0.1/16
|
||||||
|
fake-ip-filter-mode: blacklist
|
||||||
|
fake-ip-filter:
|
||||||
|
- "*.lan"
|
||||||
|
- "*.localdomain"
|
||||||
|
- "*.example"
|
||||||
|
- "*.invalid"
|
||||||
|
- "*.localhost"
|
||||||
|
- "*.test"
|
||||||
|
- "*.local"
|
||||||
|
- "*.home.arpa"
|
||||||
|
- "*.direct"
|
||||||
|
- "*.orb.local"
|
||||||
|
- "*.ip6-localhost"
|
||||||
|
- "*.ip6-loopback"
|
||||||
|
- "time.*.com"
|
||||||
|
- "time.*.gov"
|
||||||
|
- "time.*.edu.cn"
|
||||||
|
- "time.*.apple.com"
|
||||||
|
- "time-ios.apple.com"
|
||||||
|
- "time1.*.com"
|
||||||
|
- "time2.*.com"
|
||||||
|
- "time3.*.com"
|
||||||
|
- "time4.*.com"
|
||||||
|
- "time5.*.com"
|
||||||
|
- "time6.*.com"
|
||||||
|
- "time7.*.com"
|
||||||
|
- "ntp.*.com"
|
||||||
|
- "ntp1.*.com"
|
||||||
|
- "ntp2.*.com"
|
||||||
|
- "ntp3.*.com"
|
||||||
|
- "ntp4.*.com"
|
||||||
|
- "ntp5.*.com"
|
||||||
|
- "ntp6.*.com"
|
||||||
|
- "ntp7.*.com"
|
||||||
|
- "*.time.edu.cn"
|
||||||
|
- "*.ntp.org.cn"
|
||||||
|
- "+.pool.ntp.org"
|
||||||
|
- "time1.cloud.tencent.com"
|
||||||
|
- "music.163.com"
|
||||||
|
- "*.music.163.com"
|
||||||
|
- "*.126.net"
|
||||||
|
- "musicapi.taihe.com"
|
||||||
|
- "music.taihe.com"
|
||||||
|
- "songsearch.kugou.com"
|
||||||
|
- "trackercdn.kugou.com"
|
||||||
|
- "*.kuwo.cn"
|
||||||
|
- "api-jooxtt.sanook.com"
|
||||||
|
- "api.joox.com"
|
||||||
|
- "joox.com"
|
||||||
|
- "y.qq.com"
|
||||||
|
- "*.y.qq.com"
|
||||||
|
- "streamoc.music.tc.qq.com"
|
||||||
|
- "mobileoc.music.tc.qq.com"
|
||||||
|
- "isure.stream.qqmusic.qq.com"
|
||||||
|
- "dl.stream.qqmusic.qq.com"
|
||||||
|
- "aqqmusic.tc.qq.com"
|
||||||
|
- "amobile.music.tc.qq.com"
|
||||||
|
- "*.xiami.com"
|
||||||
|
- "*.music.migu.cn"
|
||||||
|
- "music.migu.cn"
|
||||||
|
- "+.msftconnecttest.com"
|
||||||
|
- "+.msftncsi.com"
|
||||||
|
- "localhost.ptlogin2.qq.com"
|
||||||
|
- "localhost.sec.qq.com"
|
||||||
|
- "localhost.*.weixin.qq.com"
|
||||||
|
- "+.steamcontent.com"
|
||||||
|
- "+.srv.nintendo.net"
|
||||||
|
- "*.n.n.srv.nintendo.net"
|
||||||
|
- "+.cdn.nintendo.net"
|
||||||
|
- "xbox.*.*.microsoft.com"
|
||||||
|
- "*.*.xboxlive.com"
|
||||||
|
- "xbox.*.microsoft.com"
|
||||||
|
- "xnotify.xboxlive.com"
|
||||||
|
- "+.battle.net"
|
||||||
|
- "+.battlenet.com.cn"
|
||||||
|
- "+.wotgame.cn"
|
||||||
|
- "+.wggames.cn"
|
||||||
|
- "+.wowsgame.cn"
|
||||||
|
- "+.wargaming.net"
|
||||||
|
- "proxy.golang.org"
|
||||||
|
- "+.stun.*.*"
|
||||||
|
- "+.stun.*.*.*"
|
||||||
|
- "+.stun.*.*.*.*"
|
||||||
|
- "+.stun.*.*.*.*.*"
|
||||||
|
- "heartbeat.belkin.com"
|
||||||
|
- "*.linksys.com"
|
||||||
|
- "*.linksyssmartwifi.com"
|
||||||
|
- "*.router.asus.com"
|
||||||
|
- "mesu.apple.com"
|
||||||
|
- "swscan.apple.com"
|
||||||
|
- "swquery.apple.com"
|
||||||
|
- "swdownload.apple.com"
|
||||||
|
- "swcdn.apple.com"
|
||||||
|
- "swdist.apple.com"
|
||||||
|
- "lens.l.google.com"
|
||||||
|
- "na.b.g-tun.com"
|
||||||
|
- "+.nflxvideo.net"
|
||||||
|
- "*.square-enix.com"
|
||||||
|
- "*.finalfantasyxiv.com"
|
||||||
|
- "*.ffxiv.com"
|
||||||
|
- "*.ff14.sdo.com"
|
||||||
|
- "ff.dorado.sdo.com"
|
||||||
|
- "*.mcdn.bilivideo.cn"
|
||||||
|
- "+.media.dssott.com"
|
||||||
|
- "shark007.net"
|
||||||
|
- "Mijia Cloud"
|
||||||
|
- "+.market.xiaomi.com"
|
||||||
|
- "+.cmbchina.com"
|
||||||
|
- "+.cmbimg.com"
|
||||||
|
- "adguardteam.github.io"
|
||||||
|
- "adrules.top"
|
||||||
|
- "anti-ad.net"
|
||||||
|
- "local.adguard.org"
|
||||||
|
- "static.adtidy.org"
|
||||||
|
- "+.sandai.net"
|
||||||
|
- "+.n0808.com"
|
||||||
|
- "+.3gppnetwork.org"
|
||||||
|
- "+.uu.163.com"
|
||||||
|
- "ps.res.netease.com"
|
||||||
|
- "+.pub.3gppnetwork.org"
|
||||||
|
- "+.oray.com"
|
||||||
|
- "+.orayimg.com"
|
||||||
|
- "+.gcloudcs.com"
|
||||||
|
- "+.gcloudsdk.com"
|
||||||
|
- "+.instant.arubanetworks.com"
|
||||||
|
- "+.setmeup.arubanetworks.com"
|
||||||
|
- "+.router.asus.com"
|
||||||
|
- "+.www.asusrouter.com"
|
||||||
|
- "+.hiwifi.com"
|
||||||
|
- "+.leike.cc"
|
||||||
|
- "+.miwifi.com"
|
||||||
|
- "+.my.router"
|
||||||
|
- "+.p.to"
|
||||||
|
- "+.peiluyou.com"
|
||||||
|
- "+.phicomm.me"
|
||||||
|
- "+.router.ctc"
|
||||||
|
- "+.routerlogin.com"
|
||||||
|
- "+.tendawifi.com"
|
||||||
|
- "+.zte.home"
|
||||||
|
- "+.tplogin.cn"
|
||||||
|
- "+.wifi.cmcc"
|
||||||
|
tun:
|
||||||
|
enable: true
|
||||||
|
stack: system
|
||||||
|
device: mochen
|
||||||
|
auto-route: true
|
||||||
|
endpoint-independent-nat: true
|
||||||
|
auto-detect-interface: true
|
||||||
|
endpoint-independents-hijack:
|
||||||
|
- any:53
|
||||||
|
- tcp://any:53
|
||||||
|
strict-route: false
|
||||||
|
mtu: 1500
|
||||||
|
udp-timeout: 120
|
||||||
|
proxies: []
|
||||||
|
|
||||||
|
proxy-groups:
|
||||||
|
- name: 🚀 默认代理
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- ♻️ 自动选择
|
||||||
|
- 🔯 故障转移
|
||||||
|
- 🔮 负载均衡
|
||||||
|
|
||||||
|
- name: 🎮 游戏
|
||||||
|
type: select
|
||||||
|
proxies: []
|
||||||
|
|
||||||
|
- name: 🎮 steam
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
- DIRECT
|
||||||
|
|
||||||
|
- name: 📹 YouTube
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 🍀 Google
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 📺 Bilibili
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- DIRECT
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 🤖 ChatGPT
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 👨🏿💻 GitHub
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 🐬 OneDrive
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- DIRECT
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 🪟 Microsoft
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- DIRECT
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 🎵 TikTok
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 📲 Telegram
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 🎥 NETFLIX
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: ✈️ Speedtest
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
- DIRECT
|
||||||
|
|
||||||
|
- name: 💶 PayPal
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 🍎 Apple
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- DIRECT
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
|
||||||
|
- name: 🐟 漏网之鱼
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- 🚀 默认代理
|
||||||
|
- ♻️ 自动选择
|
||||||
|
- DIRECT
|
||||||
|
|
||||||
|
- name: 🌏 国内网站
|
||||||
|
type: select
|
||||||
|
proxies:
|
||||||
|
- DIRECT
|
||||||
|
- 🚀 默认代理
|
||||||
|
|
||||||
|
- name: ♻️ 自动选择
|
||||||
|
type: url-test
|
||||||
|
url: http://cp.cloudflare.com/
|
||||||
|
interval: 300
|
||||||
|
tolerance: 50
|
||||||
|
timeout: 300
|
||||||
|
max-failed-times: 3
|
||||||
|
proxies: []
|
||||||
|
|
||||||
|
- name: 🔯 故障转移
|
||||||
|
type: fallback
|
||||||
|
url: http://cp.cloudflare.com/
|
||||||
|
interval: 300
|
||||||
|
tolerance: 50
|
||||||
|
timeout: 300
|
||||||
|
max-failed-times: 3
|
||||||
|
proxies: []
|
||||||
|
|
||||||
|
- name: 🔮 负载均衡
|
||||||
|
type: load-balance
|
||||||
|
strategy: consistent-hashing
|
||||||
|
url: http://cp.cloudflare.com/
|
||||||
|
interval: 300
|
||||||
|
tolerance: 50
|
||||||
|
timeout: 300
|
||||||
|
max-failed-times: 3
|
||||||
|
proxies: []
|
||||||
|
|
||||||
|
rules:
|
||||||
|
- GEOSITE,category-ads-all,REJECT
|
||||||
|
- DOMAIN,instant.arubanetworks.com,DIRECT
|
||||||
|
- DOMAIN,setmeup.arubanetworks.com,DIRECT
|
||||||
|
- DOMAIN,router.asus.com,DIRECT
|
||||||
|
- DOMAIN,www.asusrouter.com,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,hiwifi.com,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,leike.cc,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,miwifi.com,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,my.router,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,p.to,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,peiluyou.com,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,phicomm.me,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,router.ctc,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,routerlogin.com,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,tendawifi.com,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,zte.home,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,tplogin.cn,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,wifi.cmcc,DIRECT
|
||||||
|
- DOMAIN-SUFFIX,bilibili.com, 📺 Bilibili
|
||||||
|
- GEOSITE,bilibili, 📺 Bilibili
|
||||||
|
- GEOSITE,biliintl, 📺 Bilibili
|
||||||
|
- DOMAIN,ipinfo.littlediary.cn, 🚀 默认代理
|
||||||
|
- DOMAIN-SUFFIX,browserleaks.com, 🚀 默认代理
|
||||||
|
- DOMAIN-SUFFIX,ping.pe,🚀 默认代理
|
||||||
|
- DOMAIN-SUFFIX,dgameglobal.com,🎮 游戏
|
||||||
|
- DOMAIN-SUFFIX,wilds.monsterhunter.com,🎮 游戏
|
||||||
|
- DOMAIN-SUFFIX,capcom.com,🎮 游戏
|
||||||
|
- DOMAIN-SUFFIX,playfabapi.com,🎮 游戏
|
||||||
|
- DOMAIN-SUFFIX,playfab.com,🎮 游戏
|
||||||
|
- DOMAIN-SUFFIX,akamai.net,🎮 游戏
|
||||||
|
- DOMAIN-SUFFIX,cloudapp.azure.com,🎮 游戏
|
||||||
|
- PROCESS-NAME,CrashReport.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,InstallerMessage.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,MonsterHunterWilds.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,SGuard64.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,SGuardSvc64.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,SGuardUpdate64.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,Uninstall64.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,ACE-Service64.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,ACE-Setup64.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,GeckoParser.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,MetaperfCapturer.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,profiler-symbol-server.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,DownSysSymCache.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,dumpbin.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,Link.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,SymCacheGen.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,SymChk.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,WevtUtil.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,XPerf.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,DeltaForceClient-Win64-Shipping.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,INTLWebViewHelper.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,pfbs.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,UnrealCEFSubProcess.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,UE4PrereqSetup_x64.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,DeltaForceClient.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,EAAntiCheat.Installer.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,bf6.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,bf6.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,EAAntiCheat.GameServiceLauncher.exe,🎮 游戏
|
||||||
|
- PROCESS-NAME,EAAntiCheat.GameService.exe,🎮 游戏
|
||||||
|
- DOMAIN-SUFFIX,eaanticheat.ac.ea.com,🎮 游戏
|
||||||
|
- GEOSITE,steam@cn,🌏 国内网站
|
||||||
|
- GEOSITE,steam,🎮 steam
|
||||||
|
- GEOSITE,apple,🍎 Apple
|
||||||
|
- GEOSITE,private,🌏 国内网站
|
||||||
|
- GEOSITE,openai,🤖 ChatGPT
|
||||||
|
- GEOSITE,google-gemini,🤖 ChatGPT
|
||||||
|
- GEOSITE,github,👨🏿💻 GitHub
|
||||||
|
- GEOSITE,onedrive,🐬 OneDrive
|
||||||
|
- GEOSITE,microsoft,🪟 Microsoft
|
||||||
|
- GEOSITE,youtube,📹 YouTube
|
||||||
|
- GEOSITE,google,🍀 Google
|
||||||
|
- GEOSITE,tiktok,🎵 TikTok
|
||||||
|
- GEOSITE,speedtest,✈️ Speedtest
|
||||||
|
- GEOSITE,telegram,📲 Telegram
|
||||||
|
- GEOSITE,netflix,🎥 NETFLIX
|
||||||
|
- GEOSITE,paypal,💶 PayPal
|
||||||
|
- GEOSITE,gfw,🚀 默认代理
|
||||||
|
- GEOSITE,category-dev,🚀 默认代理
|
||||||
|
- DOMAIN-SUFFIX,cloudflare-dns.com,🚀 默认代理
|
||||||
|
- DOMAIN-SUFFIX,api.nn.ci,🚀 默认代理
|
||||||
|
- DOMAIN-SUFFIX,api.ipify.org,🚀 默认代理
|
||||||
|
- DOMAIN-SUFFIX,gsas.apple.com,🚀 默认代理
|
||||||
|
- DOMAIN-SUFFIX,hotmail.com,🚀 默认代理
|
||||||
|
- GEOSITE,CN,🌏 国内网站
|
||||||
|
- GEOIP,private,🌏 国内网站,no-resolve
|
||||||
|
- IP-CIDR,1.0.0.1/32,🚀 默认代理,no-resolve
|
||||||
|
- IP-CIDR,1.1.1.1/32,🚀 默认代理,no-resolve
|
||||||
|
- IP-CIDR,8.8.8.8/32,🚀 默认代理,no-resolve
|
||||||
|
- IP-CIDR,8.8.4.4/32,🚀 默认代理,no-resolve
|
||||||
|
- GEOIP,google,🍀 Google
|
||||||
|
- GEOIP,netflix,🎥 NETFLIX
|
||||||
|
- GEOIP,telegram,📲 Telegram
|
||||||
|
- GEOIP,CN,🌏 国内网站
|
||||||
|
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
|
||||||
|
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
|
||||||
|
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
|
||||||
|
- IP-CIDR,100.64.0.0/10,DIRECT,no-resolve
|
||||||
|
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
|
||||||
|
- IP-CIDR,198.18.0.0/16,DIRECT,no-resolve
|
||||||
|
- IP-CIDR,224.0.0.0/4,DIRECT,no-resolve
|
||||||
|
- IP-CIDR6,::1/128,DIRECT,no-resolve
|
||||||
|
- IP-CIDR6,fc00::/7,DIRECT,no-resolve
|
||||||
|
- IP-CIDR6,fe80::/10,DIRECT,no-resolve
|
||||||
|
- IP-CIDR6,fd00::/8,DIRECT,no-resolve
|
||||||
|
- MATCH,🐟 漏网之鱼
|
||||||
576
submodule/surfboard.toml
Normal file
576
submodule/surfboard.toml
Normal file
@@ -0,0 +1,576 @@
|
|||||||
|
#!MANAGED-CONFIG $subs_link interval=43200 strict=true
|
||||||
|
# Thanks @Hackl0us SS-Rule-Snippet
|
||||||
|
|
||||||
|
[General]
|
||||||
|
loglevel = notify
|
||||||
|
ipv6 = false
|
||||||
|
skip-proxy = localhost, *.local, injections.adguard.org, local.adguard.org, 0.0.0.0/8, 10.0.0.0/8, 17.0.0.0/8, 100.64.0.0/10, 127.0.0.0/8, 169.254.0.0/16, 172.16.0.0/12, 192.0.0.0/24, 192.0.2.0/24, 192.168.0.0/16, 192.88.99.0/24, 198.18.0.0/15, 198.51.100.0/24, 203.0.113.0/24, 224.0.0.0/4, 240.0.0.0/4, 255.255.255.255/32
|
||||||
|
tls-provider = default
|
||||||
|
show-error-page-for-reject = true
|
||||||
|
dns-server = 223.6.6.6, 119.29.29.29, 119.28.28.28
|
||||||
|
test-timeout = 5
|
||||||
|
internet-test-url = http://bing.com
|
||||||
|
proxy-test-url = http://bing.com
|
||||||
|
|
||||||
|
[Panel]
|
||||||
|
SubscribeInfo = $subscribe_info, style=info
|
||||||
|
|
||||||
|
# Surfboard 的服务器和策略组配置方式与 Surge 类似, 可以参考 Surge 的规则配置手册: https://manual.nssurge.com/
|
||||||
|
|
||||||
|
[Proxy]
|
||||||
|
$proxies
|
||||||
|
|
||||||
|
[Proxy Group]
|
||||||
|
Proxy = select, auto, fallback, $proxy_group
|
||||||
|
auto = url-test, $proxy_group, url=http://www.gstatic.com/generate_204, interval=43200
|
||||||
|
fallback = fallback, $proxy_group, url=http://www.gstatic.com/generate_204, interval=43200
|
||||||
|
|
||||||
|
[Rule]
|
||||||
|
# 自定义规则
|
||||||
|
## 您可以在此处插入自定义规则
|
||||||
|
DOMAIN-SUFFIX,tophub.today,DIRECT
|
||||||
|
DOMAIN-SUFFIX,netmarble.com,Proxy
|
||||||
|
DOMAIN-SUFFIX,worldflipper.jp,Proxy
|
||||||
|
DOMAIN-SUFFIX,naver.com,Proxy
|
||||||
|
DOMAIN-SUFFIX,smartmediarep.com,Proxy
|
||||||
|
DOMAIN-SUFFIX,technews.tw,Proxy
|
||||||
|
|
||||||
|
# 强制订阅域名直连
|
||||||
|
DOMAIN,$subs_domain,DIRECT
|
||||||
|
|
||||||
|
# Google 中国服务
|
||||||
|
DOMAIN-SUFFIX,services.googleapis.cn,Proxy
|
||||||
|
DOMAIN-SUFFIX,xn--ngstr-lra8j.com,Proxy
|
||||||
|
|
||||||
|
# Apple
|
||||||
|
DOMAIN,developer.apple.com,Proxy
|
||||||
|
DOMAIN-SUFFIX,digicert.com,Proxy
|
||||||
|
USER-AGENT,com.apple.trustd*,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,safebrowsing.urlsec.qq.com,DIRECT
|
||||||
|
DOMAIN,safebrowsing.googleapis.com,DIRECT
|
||||||
|
USER-AGENT,com.apple.appstored*,DIRECT
|
||||||
|
USER-AGENT,AppStore*,DIRECT
|
||||||
|
DOMAIN-SUFFIX,mzstatic.com,DIRECT
|
||||||
|
DOMAIN-SUFFIX,itunes.apple.com,DIRECT
|
||||||
|
DOMAIN-SUFFIX,icloud.com,DIRECT
|
||||||
|
DOMAIN-SUFFIX,icloud-content.com,DIRECT
|
||||||
|
USER-AGENT,cloudd*,DIRECT
|
||||||
|
USER-AGENT,*com.apple.WebKit*,DIRECT
|
||||||
|
USER-AGENT,*com.apple.*,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
|
||||||
|
|
||||||
|
# 国内网站
|
||||||
|
USER-AGENT,MicroMessenger Client*,DIRECT
|
||||||
|
USER-AGENT,WeChat*,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,aliyun,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-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,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-KEYWORD,officecdn,DIRECT
|
||||||
|
DOMAIN-SUFFIX,office365.com,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-KEYWORD,.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-KEYWORD,admarvel,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,admaster,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,adsage,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,adsmogo,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,adsrvmedia,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,adwords,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,adservice,REJECT-TINYGIF
|
||||||
|
DOMAIN-SUFFIX,appsflyer.com,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,domob,REJECT-TINYGIF
|
||||||
|
DOMAIN-SUFFIX,doubleclick.net,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,duomeng,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,dwtrack,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,guanggao,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,lianmeng,REJECT-TINYGIF
|
||||||
|
DOMAIN-SUFFIX,mmstat.com,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,mopub,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,omgmta,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,openx,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,partnerad,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,pingfore,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,supersonicads,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,uedas,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,umeng,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,usage,REJECT-TINYGIF
|
||||||
|
DOMAIN-SUFFIX,vungle.com,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,wlmonitor,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,zjtoolbar,REJECT-TINYGIF
|
||||||
|
|
||||||
|
## 抗 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-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,linkedin.com,Proxy
|
||||||
|
DOMAIN-SUFFIX,line-apps.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,no-resolve
|
||||||
|
IP-CIDR,91.108.8.0/21,Proxy,no-resolve
|
||||||
|
IP-CIDR,91.108.16.0/22,Proxy,no-resolve
|
||||||
|
IP-CIDR,91.108.56.0/22,Proxy,no-resolve
|
||||||
|
IP-CIDR,149.154.160.0/20,Proxy,no-resolve
|
||||||
|
IP-CIDR6,2001:67c:4e8::/48,Proxy,no-resolve
|
||||||
|
IP-CIDR6,2001:b28:f23d::/48,Proxy,no-resolve
|
||||||
|
IP-CIDR6,2001:b28:f23f::/48,Proxy,no-resolve
|
||||||
|
|
||||||
|
# Google 中国服务 services.googleapis.cn
|
||||||
|
IP-CIDR,120.232.181.162/32,Proxy,no-resolve
|
||||||
|
IP-CIDR,120.241.147.226/32,Proxy,no-resolve
|
||||||
|
IP-CIDR,120.253.253.226/32,Proxy,no-resolve
|
||||||
|
IP-CIDR,120.253.255.162/32,Proxy,no-resolve
|
||||||
|
IP-CIDR,120.253.255.34/32,Proxy,no-resolve
|
||||||
|
IP-CIDR,120.253.255.98/32,Proxy,no-resolve
|
||||||
|
IP-CIDR,180.163.150.162/32,Proxy,no-resolve
|
||||||
|
IP-CIDR,180.163.150.34/32,Proxy,no-resolve
|
||||||
|
IP-CIDR,180.163.151.162/32,Proxy,no-resolve
|
||||||
|
IP-CIDR,180.163.151.34/32,Proxy,no-resolve
|
||||||
|
IP-CIDR,203.208.39.0/24,Proxy,no-resolve
|
||||||
|
IP-CIDR,203.208.40.0/24,Proxy,no-resolve
|
||||||
|
IP-CIDR,203.208.41.0/24,Proxy,no-resolve
|
||||||
|
IP-CIDR,203.208.43.0/24,Proxy,no-resolve
|
||||||
|
IP-CIDR,203.208.50.0/24,Proxy,no-resolve
|
||||||
|
IP-CIDR,220.181.174.162/32,Proxy,no-resolve
|
||||||
|
IP-CIDR,220.181.174.226/32,Proxy,no-resolve
|
||||||
|
IP-CIDR,220.181.174.34/32,Proxy,no-resolve
|
||||||
|
|
||||||
|
# LAN
|
||||||
|
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
|
||||||
|
|
||||||
|
# 剩余未匹配的国内网站
|
||||||
|
DOMAIN-SUFFIX,cn,DIRECT
|
||||||
|
DOMAIN-KEYWORD,-cn,DIRECT
|
||||||
|
|
||||||
|
# 最终规则
|
||||||
|
GEOIP,CN,DIRECT
|
||||||
|
FINAL,Proxy
|
||||||
595
submodule/surge.toml
Normal file
595
submodule/surge.toml
Normal file
@@ -0,0 +1,595 @@
|
|||||||
|
#!MANAGED-CONFIG $subs_link interval=43200 strict=true
|
||||||
|
# Surge 的规则配置手册: https://manual.nssurge.com/
|
||||||
|
# Thanks @Hackl0us SS-Rule-Snippet
|
||||||
|
|
||||||
|
[General]
|
||||||
|
loglevel = notify
|
||||||
|
# 从 Surge iOS 4 / Surge Mac 3.3.0 起,工具开始支持 DoH
|
||||||
|
doh-server = https://doh.pub/dns-query
|
||||||
|
# https://dns.alidns.com/dns-query, https://13800000000.rubyfish.cn/, https://dns.google/dns-query
|
||||||
|
dns-server = 223.5.5.5, 114.114.114.114
|
||||||
|
tun-excluded-routes = 0.0.0.0/8, 10.0.0.0/8, 100.64.0.0/10, 127.0.0.0/8, 169.254.0.0/16, 172.16.0.0/12, 192.0.0.0/24, 192.0.2.0/24, 192.168.0.0/16, 192.88.99.0/24, 198.51.100.0/24, 203.0.113.0/24, 224.0.0.0/4, 255.255.255.255/32
|
||||||
|
skip-proxy = localhost, *.local, injections.adguard.org, local.adguard.org, captive.apple.com, guzzoni.apple.com, 0.0.0.0/8, 10.0.0.0/8, 17.0.0.0/8, 100.64.0.0/10, 127.0.0.0/8, 169.254.0.0/16, 172.16.0.0/12, 192.0.0.0/24, 192.0.2.0/24, 192.168.0.0/16, 192.88.99.0/24, 198.18.0.0/15, 198.51.100.0/24, 203.0.113.0/24, 224.0.0.0/4, 240.0.0.0/4, 255.255.255.255/32
|
||||||
|
|
||||||
|
wifi-assist = true
|
||||||
|
allow-wifi-access = true
|
||||||
|
wifi-access-http-port = 6152
|
||||||
|
wifi-access-socks5-port = 6153
|
||||||
|
http-listen = 0.0.0.0:6152
|
||||||
|
socks5-listen = 0.0.0.0:6153
|
||||||
|
|
||||||
|
external-controller-access = surgepasswd@0.0.0.0:6170
|
||||||
|
replica = false
|
||||||
|
|
||||||
|
tls-provider = openssl
|
||||||
|
network-framework = false
|
||||||
|
exclude-simple-hostnames = true
|
||||||
|
ipv6 = true
|
||||||
|
|
||||||
|
test-timeout = 4
|
||||||
|
proxy-test-url = http://www.gstatic.com/generate_204
|
||||||
|
geoip-maxmind-url = https://unpkg.zhimg.com/rulestatic@1.0.1/Country.mmdb
|
||||||
|
|
||||||
|
[Replica]
|
||||||
|
hide-apple-request = true
|
||||||
|
hide-crashlytics-request = true
|
||||||
|
use-keyword-filter = false
|
||||||
|
hide-udp = false
|
||||||
|
|
||||||
|
[Panel]
|
||||||
|
SubscribeInfo = $subscribe_info, style=info
|
||||||
|
|
||||||
|
# -----------------------------
|
||||||
|
# Surge 的几种策略配置规范,请参考 https://manual.nssurge.com/policy/proxy.html
|
||||||
|
# 不同的代理策略有*很多*可选参数,请参考上方连接的 Parameters 一段,根据需求自行添加参数。
|
||||||
|
#
|
||||||
|
# Surge 现已支持 UDP 转发功能,请参考: https://trello.com/c/ugOMxD3u/53-udp-%E8%BD%AC%E5%8F%91
|
||||||
|
# Surge 现已支持 TCP-Fast-Open 技术,请参考: https://trello.com/c/ij65BU6Q/48-tcp-fast-open-troubleshooting-guide
|
||||||
|
# Surge 现已支持 ss-libev 的全部加密方式和混淆,请参考: https://trello.com/c/BTr0vG1O/47-ss-libev-%E7%9A%84%E6%94%AF%E6%8C%81%E6%83%85%E5%86%B5
|
||||||
|
# -----------------------------
|
||||||
|
|
||||||
|
[Proxy]
|
||||||
|
$proxies
|
||||||
|
|
||||||
|
[Proxy Group]
|
||||||
|
Proxy = select, auto, fallback, $proxy_group
|
||||||
|
auto = url-test, $proxy_group, url=http://www.gstatic.com/generate_204, interval=43200
|
||||||
|
fallback = fallback, $proxy_group, url=http://www.gstatic.com/generate_204, interval=43200
|
||||||
|
|
||||||
|
[Rule]
|
||||||
|
# 自定义规则
|
||||||
|
## 您可以在此处插入自定义规则
|
||||||
|
|
||||||
|
# 强制订阅域名直连
|
||||||
|
DOMAIN,$subs_domain,DIRECT
|
||||||
|
|
||||||
|
# Google 中国服务
|
||||||
|
DOMAIN-SUFFIX,services.googleapis.cn,Proxy
|
||||||
|
DOMAIN-SUFFIX,xn--ngstr-lra8j.com,Proxy
|
||||||
|
|
||||||
|
# Apple
|
||||||
|
DOMAIN,developer.apple.com,Proxy
|
||||||
|
DOMAIN-SUFFIX,digicert.com,Proxy
|
||||||
|
USER-AGENT,com.apple.trustd*,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,safebrowsing.urlsec.qq.com,DIRECT
|
||||||
|
DOMAIN,safebrowsing.googleapis.com,DIRECT
|
||||||
|
USER-AGENT,com.apple.appstored*,DIRECT
|
||||||
|
USER-AGENT,AppStore*,DIRECT
|
||||||
|
DOMAIN-SUFFIX,mzstatic.com,DIRECT
|
||||||
|
DOMAIN-SUFFIX,itunes.apple.com,DIRECT
|
||||||
|
DOMAIN-SUFFIX,icloud.com,DIRECT
|
||||||
|
DOMAIN-SUFFIX,icloud-content.com,DIRECT
|
||||||
|
USER-AGENT,cloudd*,DIRECT
|
||||||
|
USER-AGENT,*com.apple.WebKit*,DIRECT
|
||||||
|
USER-AGENT,*com.apple.*,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
|
||||||
|
|
||||||
|
# 国内网站
|
||||||
|
USER-AGENT,MicroMessenger Client*,DIRECT
|
||||||
|
USER-AGENT,WeChat*,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,aliyun,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-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,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-KEYWORD,officecdn,DIRECT
|
||||||
|
DOMAIN-SUFFIX,office365.com,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-KEYWORD,.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-KEYWORD,admarvel,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,admaster,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,adsage,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,adsmogo,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,adsrvmedia,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,adwords,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,adservice,REJECT-TINYGIF
|
||||||
|
DOMAIN-SUFFIX,appsflyer.com,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,domob,REJECT-TINYGIF
|
||||||
|
DOMAIN-SUFFIX,doubleclick.net,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,duomeng,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,dwtrack,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,guanggao,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,lianmeng,REJECT-TINYGIF
|
||||||
|
DOMAIN-SUFFIX,mmstat.com,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,mopub,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,omgmta,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,openx,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,partnerad,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,pingfore,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,supersonicads,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,uedas,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,umeng,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,usage,REJECT-TINYGIF
|
||||||
|
DOMAIN-SUFFIX,vungle.com,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,wlmonitor,REJECT-TINYGIF
|
||||||
|
DOMAIN-KEYWORD,zjtoolbar,REJECT-TINYGIF
|
||||||
|
|
||||||
|
## 抗 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-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,linkedin.com,Proxy
|
||||||
|
DOMAIN-SUFFIX,line-apps.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,no-resolve
|
||||||
|
IP-CIDR,91.108.8.0/21,Proxy,no-resolve
|
||||||
|
IP-CIDR,91.108.16.0/22,Proxy,no-resolve
|
||||||
|
IP-CIDR,91.108.56.0/22,Proxy,no-resolve
|
||||||
|
IP-CIDR,149.154.160.0/20,Proxy,no-resolve
|
||||||
|
IP-CIDR6,2001:67c:4e8::/48,Proxy,no-resolve
|
||||||
|
IP-CIDR6,2001:b28:f23d::/48,Proxy,no-resolve
|
||||||
|
IP-CIDR6,2001:b28:f23f::/48,Proxy,no-resolve
|
||||||
|
|
||||||
|
# Google 中国服务 services.googleapis.cn
|
||||||
|
IP-CIDR,120.232.181.162/32,Proxy,no-resolve
|
||||||
|
IP-CIDR,120.241.147.226/32,Proxy,no-resolve
|
||||||
|
IP-CIDR,120.253.253.226/32,Proxy,no-resolve
|
||||||
|
IP-CIDR,120.253.255.162/32,Proxy,no-resolve
|
||||||
|
IP-CIDR,120.253.255.34/32,Proxy,no-resolve
|
||||||
|
IP-CIDR,120.253.255.98/32,Proxy,no-resolve
|
||||||
|
IP-CIDR,180.163.150.162/32,Proxy,no-resolve
|
||||||
|
IP-CIDR,180.163.150.34/32,Proxy,no-resolve
|
||||||
|
IP-CIDR,180.163.151.162/32,Proxy,no-resolve
|
||||||
|
IP-CIDR,180.163.151.34/32,Proxy,no-resolve
|
||||||
|
IP-CIDR,203.208.39.0/24,Proxy,no-resolve
|
||||||
|
IP-CIDR,203.208.40.0/24,Proxy,no-resolve
|
||||||
|
IP-CIDR,203.208.41.0/24,Proxy,no-resolve
|
||||||
|
IP-CIDR,203.208.43.0/24,Proxy,no-resolve
|
||||||
|
IP-CIDR,203.208.50.0/24,Proxy,no-resolve
|
||||||
|
IP-CIDR,220.181.174.162/32,Proxy,no-resolve
|
||||||
|
IP-CIDR,220.181.174.226/32,Proxy,no-resolve
|
||||||
|
IP-CIDR,220.181.174.34/32,Proxy,no-resolve
|
||||||
|
|
||||||
|
RULE-SET,LAN,DIRECT
|
||||||
|
|
||||||
|
# 剩余未匹配的国内网站
|
||||||
|
DOMAIN-SUFFIX,cn,DIRECT
|
||||||
|
DOMAIN-KEYWORD,-cn,DIRECT
|
||||||
|
|
||||||
|
# 最终规则
|
||||||
|
GEOIP,CN,DIRECT
|
||||||
|
FINAL,Proxy,dns-failed
|
||||||
|
|
||||||
|
[URL Rewrite]
|
||||||
|
^https?://(www.)?(g|google).cn https://www.google.com 302
|
||||||
Reference in New Issue
Block a user